概要
EC2起動時にユーザデータを使用して処理を実行させることができます。
また、オートスケーリンググループを使用してEC2を起動した場合は、ライフサイクルフックを利用してCodeDeployにデプロイを実行する事が可能です。
ユーザデータ実行中にCodeDeployを起動するのではなく、ユーザデータが終了した後にCodeDeployを起動したい時の設定方法を説明します。
環境
以下の環境を想定します
- AWS
- EC2(Linux)
- オートスケーリンググループによりEC2を起動
- CodeDeployでデプロイを実行
設定方法
CodeDeployを実行する場合は、対象となるEC2にCodeDeploy Agentのインストールを行います。
CodeDeploy Agentをユーザデータ終了後に起動する設定を実施します。
1. ユニットファイルのコピー
/usr/lib/systemd/system/ にあるCodeDeployのユニットファイルを
/etc/systemd/system/ にコピー
2.ユニットファイルの修正
[Unit]の項目目の下に Afterを追加します。
すでにAfterの行がある場合は(多分あるはず)、その行に cloud-final.service をスペース区切りで追記します。
[Unit]
After=cloud-final.service # これを追加する
ユニットファイルの編集が完了したら、設定を有効にするためデーモンリロードします
sudo systemctl daemon-reload
これで順番の制御ができているか動作確認を行います。
CodeDeployに限らず、systemctlで起動しているサービスは順序の制御が可能ですので、他のサービスについても応用可能だと思います。
参考
- systemd 管理のサービスをcloud-init の後に実行する
- 10.6. systemd のユニットファイルの作成および変更