Code Deployを使ったnode.jsアプリケーションデプロイ方法

AWS, Node.js, CodeDeploy, EC2
2021-05-20

node.jsのアプリケーションをEC2へ自動デプロイする方法です

EC2側の設定

EC2にCodeDeploy-Agentをインストール

https://docs.aws.amazon.com/codedeploy/latest/userguide/codedeploy-agent-operations-install-linux.html

こちらを参考に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のIAMロールにCodeDeployのパーミッションを追加

EC2からS3のアーティファクトを取りにいけるようにするため、サービスロールを作成し、EC2にアタッチします。

https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/getting-started-create-iam-instance-profile.html

こちらの手順を順にやれば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

CodeCommitの設定

CodeCommitへpushするためのユーザを追加します

※ 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の設定

CodeDeployのサービスロールを作成

CodeDeployからEC2等のサービスへアクセスできるようにするため、ロールを作成します。

https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/getting-started-create-service-role.html

CodeDeployのアプリケーションの作成

CodeDeployの画面から [アプリケーションの作成] を選択しますた。

アプリケーション名を入力し、コンピューティングプラットフォームは「EC2/オンプレミス」を選択します。

CodeDeployのデプロイグループの作成

作成したアプリケーションの詳細画面から [デプロイグループの作成] を選択。

サービスロールは上記で作成したロール(CodeDeployServiceRole等)を選択する。その他は適宜設定する。

CodePipelineの設定

CodeCommitにpushしたファイルを元に自動的にデプロイが実行されるようにします。

CodePipelineの作成

CodePipelineの画面から [パイプラインの作成] を選択。パイプライン名を設定し、「新しいサービスロール」を選択し、サービスロール名は CodePipeline-Role 等とします。

ソースはCodeCommitのリポジトリ、ブランチを選択。

ビルドステージは「スキップ」を選択。

デプロイプロバイダーは上記のCodeDeployのアプリケーション、デプロイグループを設定します。

これでプロジェクトファイルのルートディレクトリに appspec.yml があれば自動的にその内容でデプロイされます。

Written by Kyohei Tsukuda who lives and works in Tokyo 🇯🇵 , building useful things 🔧.