初めに
現在以下のハンズオンの「AWS Code サービス群を活用して、CI/CD のための構成を構築しよう!」でCICD構築を行っている。
https://aws.amazon.com/jp/events/aws-event-resource/hands-on/
途中苦戦しながらも何とかCodeDeployでデプロイするところまで来たのだが、以下のように失敗をした。
ちなみに今回の(私の場合の)前提条件は以下である。
・EC2インスタンスやCodeBuildなどの設定はハンズオン参照
・EC2インスタンスにはSSH接続している
原因を探る
まずエラーの原因を探ろうとしたのだが、コンソール上だと詳細が見つけられなかったため、黒画面で確認してみることにした。以下のコマンドでログを確認する。もちろんSSH接続した状態で。
sudo tail -f /var/log/aws/codedeploy-agent/codedeploy-agent.log
すると以下のエラーを確認できた。
InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller: Missing credentials - please check if this instance was started with an IAM instance profile
どうやら必要なIAMポリシーが足りないとのこと。そこで、EC2インスタンスのIAMロールを開いて、必要だと言われるポリシーを追加する。ちなみにここはChatGPT君に聞いた。
実際に追加したのはAmazonEC2RoleforAWSCodeDeployとAmazonS3ReadOnlyAccess(オプション)である。これで多分大丈夫だろうと再度デプロイを行う。
見落としていたこと
上記でもうまく行かない。IAMロールの更新はEC2インスタンスの再起動は必要ないはず…と思いながらインスタンス再起動しても同様の結果。
考えているうちに以下の神記事を見つけた。
こちらによると、CodeDeploy Agentを再起動するという手順が足りなかったようだ。
再度黒画面にてsudo systemctl restartでサービスを再起動、systemctl statusで起動状態の確認を行った。
sudo systemctl restart codedeploy-agent.service
systemctl status codedeploy-agent.service
その結果、無事デプロイも成功し、index.htmlがサーバーに上がったことも確認できた。
EC2インスタンスのパブリックアドレスへアクセスすると、index.htmlの中身が表示されていることが分かる。
終わりに
今回のCICD構築はgitコマンドやサーバーのことを知っていないと難しいなと感じた(幸いその辺りは少し知識があったので何とかなったが…)
とりあえず無料枠終わる前にハンズオン全て終わらせるぞ!