node.jsのアプリケーションをEC2へ自動デプロイする方法です
こちらを参考にCodeDeploy-Agentをインストールする。途中のwgetのurlは東京リージョンの場合は、以下になると思います。
wget https://aws-codedeploy-ap-northeast-1.s3.ap-northeast-1.amazonaws.com/latest/install
CodeDeploy-agentの起動など
sudo service codedeploy-agent status
sudo service codedeploy-agent start
sudo service codedeploy-agent restart
CodeDeployクライアントのログ確認方法
tail -F /var/log/aws/codedeploy-agent/codedeploy-agent.log
EC2からS3のアーティファクトを取りにいけるようにするため、サービスロールを作成し、EC2にアタッチします。
こちらの手順を順にやればOK
IAMロール 設定後はCodeDeploy-agentをリスタートすること!
# ログにこのようなエラーがでていた場合、リスタートする。
# ERROR [codedeploy-agent(3582)]: InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller: Missing credentials - please check if this instance was started with an IAM instance profile
sudo service codedeploy-agent restart
※ Githubを利用する場合は不要。
CodeCommitのGitにpushできるよう、ユーザとssh周りを設定します。
https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/setting-up-ssh-unixes.html
sshのconfigファイルに以下のような記述を追加し、sshが通ればOKです。
Host git-codecommit.*.amazonaws.com
User APXXXXXXXXXXX
IdentityFile ~/.ssh/codecommit_rsa
ssh git-codecommit.ap-northeast-1.amazonaws.com
# You have successfully authenticated over SSH...
CodeCommitの画面からリポジトリを作成します。作成されたgitのリモート先をローカルのgitに追加し、pushします。
CodeDeployからEC2等のサービスへアクセスできるようにするため、ロールを作成します。
CodeDeployの画面から [アプリケーションの作成] を選択しますた。
アプリケーション名を入力し、コンピューティングプラットフォームは「EC2/オンプレミス」を選択します。
作成したアプリケーションの詳細画面から [デプロイグループの作成] を選択。
サービスロールは上記で作成したロール(CodeDeployServiceRole等)を選択する。その他は適宜設定する。
CodeCommitにpushしたファイルを元に自動的にデプロイが実行されるようにします。
CodePipelineの画面から [パイプラインの作成] を選択。パイプライン名を設定し、「新しいサービスロール」を選択し、サービスロール名は CodePipeline-Role
等とします。
ソースはCodeCommitのリポジトリ、ブランチを選択。
ビルドステージは「スキップ」を選択。
デプロイプロバイダーは上記のCodeDeployのアプリケーション、デプロイグループを設定します。
これでプロジェクトファイルのルートディレクトリに appspec.yml
があれば自動的にその内容でデプロイされます。