EC2 インスタンスが起動した時に自動的に CodeDeploy エージェントをインストールする方法
チュートリアル: CodeDeploy を使用して Auto Scaling グループにアプリケーションをデプロイする - AWS CodeDeploy
上記チュートリアルで自動的に CodeDeploy エージェントをインストールする方法を紹介します。
結論
Systems Manager Distributor でタグベースの関連付けを作成しましょう。
State Manager 関連付けのターゲットとレート制御について - AWS Systems Manager
新しいノードを作成し、指定したタグキーと値をそれらのノードに割り当てると、システムは関連付けを自動的に適用し、すぐに実行した後、スケジュールに従って実行します。
チュートリアルでの手順について
ステップ 1: Auto Scaling グループを作成して設定します。 - AWS CodeDeploy
- CodeDeploy 「 エージェントのインストール」の手順に従って、Name=CodeDeployDemoインスタンスタグを使用して CodeDeploy エージェントをインストールします。
CodeDeploy エージェントをインストールする手順では上記の説明が記載されていたため、当初は EC2 インスタンスにログインしてインストールコマンドを実行していました。
Amazon Linux または 用の CodeDeploy エージェントをインストールする RHEL - AWS CodeDeploy
しかし、ステップ 4: Auto Scaling グループの Amazon EC2 インスタンスの数を増やす以降の手順では Auto Scaling グループの EC2 インスタンスを増やせば自動的にリビジョンがデプロイされるという内容になっています。
チュートリアルで使用するクイックスタートの AMI には CodeDeploy エージェントはプリインストールされていないため、何も設定しなければ新しく起動した EC2 インスタンスに CodeDeploy エージェントはインストールされていない状態となります。
この状態ではデプロイができないため、起動した EC2 インスタンスに自動的に CodeDeploy エージェントをインストールする必要がありました。
Systems Manager Distributor でインストール
Systems Manager Distributor でタグベースの関連付けを作成しましょう。
State Manager 関連付けのターゲットとレート制御について - AWS Systems Manager
新しいノードを作成し、指定したタグキーと値をそれらのノードに割り当てると、システムは関連付けを自動的に適用し、すぐに実行した後、スケジュールに従って実行します。
上記の通り、Systems Manager Distributor でタグベースの関連付けを作成すれば Auto Scaling グループから起動した EC2 インスタンスにも自動的に CodeDeploy エージェントをインストールすることができます。
やってみた
まずはチュートリアル通りに起動テンプレートと Auto Scaling グループを作成しました。
Systems Manager コンソール左ペインから「ディストリビューター」を選択します。
AWSCodeDeployAgent を選択し、「スケジュールへのインストール」をクリックします。
関連付けには任意の名前を入力します。
ターゲットの選択で、「インスタンスタグを指定」を選択し、タグキーに Name
、タグの値に CodeDeployDemo
と入力して「Add」をクリックします。
スケジュールを指定で「スケジュールなし」を選択します。
その他の設定はデフォルトのまま関連付けを作成します。
自動的にステートマネージャーのコンソールに遷移します。
しばらく待つとステータスが「成功」になります。
ただし、EC2 インスタンス起動直後に関連付けを作成した場合には失敗することもあるので、EC2 インスタンスのステータスチェックが終わってから実行した方が成功しやすいと思われます。
現状で Auto Scaling 内に起動している 1 台の EC2 インスタンスにログインして CodeDeploy エージェントのインストール状況を確認してみます。
$ systemctl status codedeploy-agent
● codedeploy-agent.service - AWS CodeDeploy Host Agent
Loaded: loaded (/usr/lib/systemd/system/codedeploy-agent.service; enabled; preset: disabled)
Active: active (running) since Sun 2025-01-12 00:42:32 UTC; 3min 44s ago
Main PID: 6603 (ruby)
Tasks: 3 (limit: 1111)
Memory: 66.2M
CPU: 941ms
CGroup: /system.slice/codedeploy-agent.service
├─6603 "codedeploy-agent: master 6603"
└─6629 "codedeploy-agent: InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller of master 6603"
running
のステータスになっているのでインストールできています。
次に Auto Scaling の EC2 インスタンスの数を増やしてみます。
新しい EC2 インスタンスが起動すると、ステートマネージャー側のリソースにも表示されます。
しばらく待つとステータスが「成功」に変わります。
新しく起動した EC2 インスタンスにも CodeDeploy エージェントがインストールされているか確認してみます。
$ systemctl status codedeploy-agent
● codedeploy-agent.service - AWS CodeDeploy Host Agent
Loaded: loaded (/usr/lib/systemd/system/codedeploy-agent.service; enabled; preset: disabled)
Active: active (running) since Sun 2025-01-12 00:49:01 UTC; 1min 9s ago
Main PID: 6501 (ruby)
Tasks: 3 (limit: 1111)
Memory: 66.3M
CPU: 968ms
CGroup: /system.slice/codedeploy-agent.service
├─6501 "codedeploy-agent: master 6501"
└─6522 "codedeploy-agent: InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller of master 6501"
Jan 12 00:49:00 ip-172-31-41-204.ap-northeast-1.compute.internal systemd[1]: Starting codedeploy-agent.service - AWS CodeDeploy Host Agent...
Jan 12 00:49:01 ip-172-31-41-204.ap-northeast-1.compute.internal systemd[1]: Started codedeploy-agent.service - AWS CodeDeploy Host Agent.
running
のステータスになっているのでインストールできています。
新しく起動した EC2 インスタンスにも自動的に CodeDeploy エージェントをインストールすることができました。
これで Auto Scaling グループ内の EC2 インスタンス数が増えた時でも CodeDeploy によるデプロイを実施できます。
まとめ
今回は EC2 インスタンスが起動した時に自動的に CodeDeploy エージェントをインストールする方法を紹介しました。
どなたかの参考になれば幸いです。
Discussion