[アップデート] AWS CodePipeline の EC2 デプロイアクションで DeploySpec ファイルを指定できるようになりました
いわさです。
3 ヶ月ほど前のアップデートで CodePipeline から CodeDeploy 無しで EC2 インスタンスへアプリケーションコードデプロイができるようになりました。
これは SSM コマンドを使ってスクリプトを実行する方法で、PreScript と PostScript の2つのタイミングがサポートされていました。
先日のアップデートで DeploySpec ファイルをサポートし、従来の CodeDeploy のようなより柔軟なデプロイができるようになりました。
DeploySpec ファイルの指定
以前のスクリプト実行方式は「アクションの設定を使用」を選択した時に引き続き設定が可能です。
今回のアップデートで「DeploySpec ファイルを使用」が選択できるようになっており、この場合は DeploySpec ファイル名を指定することが出来ます。
DeploySpec ファイルの仕様は次の公式ドキュメントに記載されています。
概ね CodeDeploy の AppSpec ファイルの形式をサポート(一部パラメータはサポートされておらず無視される)しており、そのまま AppSpec ファイルを使うことも可能です。
※ AppSpec 互換のためにhooks
パラメータを使うこともできるのですが、その場合は Spec ファイルのバージョンを 0.0 で指定する必要があります。
やってみたのだが...
リポジトリに AppSpec ファイルを配置し、今回の方法でデプロイを試してみます。
以下の検証用リポジトリを用意しました。
CodePipeline で DeploySpec ファイルを指定します。
DeploySpec ファイルの内容ですが、公式ドキュメントのとおりに実装してみます。
version: 0.1
files:
- source: /index.html
destination: /var/www/html/
scripts:
BeforeDeploy:
- location: scripts/install_dependencies
timeout: 300
runas: myuser
AfterDeploy:
- location: scripts/start_server
timeout: 300
runas: myuser
デプロイしてみます。
エラーになりました。
[2025/05/18 21:00:08.127] Deploy event DEPLOY succeeded on instances: i-056188e376cc71858.
[2025/05/18 21:00:08.205] Processing deploy event AFTER_DEPLOY on instances: i-056188e376cc71858
[2025/05/18 21:00:08.315] Executing commands on instances i-056188e376cc71858, SSM command id 17435b33-e2df-4d54-aeeb-ee22cc05804a, commands:
chmod u+x /
/
[2025/05/18 21:00:39.103] Instance i-056188e376cc71858 is FAILED on event AFTER_DEPLOY, message: SSM Command Failed, please check SSM Command for details.
[2025/05/18 21:00:39.161] Found 1 instances failed deploy. Max error 0
[2025/05/18 21:00:39.196] Deployment FAILED
DeploySpec ファイルの読み込み前に問題が発生しているようです。
切り分けのためにインスタンスタイプの変更、DeploySpec ファイルの指定方法の変更、サービスロールの権限など見直しましたけどうまく動かないですね。
SSM Run Commnad 結果を確認してみたとこと、CodePipeline の EC2 アクションが内部的に次のようなパラメータでAWS-RunShellScript
を実行していました。
このあたり介入できないのでちょっと解決が難しそうです。数日待ってもう一度試してみます。
さいごに
本日は AWS CodePipeline の EC2 デプロイアクションで DeploySpec ファイルをサポートするようになったので試してみました。
結果としては私の環境ではうまく動作しなかったのですが、動作している方いますかね?うまく出来ている方もし入れば教えてください。