[アップデート] AWS CodePipeline の EC2 デプロイアクションで DeploySpec ファイルを指定できるようになりました

[アップデート] AWS CodePipeline の EC2 デプロイアクションで DeploySpec ファイルを指定できるようになりました

Clock Icon2025.05.19

いわさです。

3 ヶ月ほど前のアップデートで CodePipeline から CodeDeploy 無しで EC2 インスタンスへアプリケーションコードデプロイができるようになりました。

https://dev.classmethod.jp/articles/codepipeline-native-ec2-deployment/

これは SSM コマンドを使ってスクリプトを実行する方法で、PreScript と PostScript の2つのタイミングがサポートされていました。

先日のアップデートで DeploySpec ファイルをサポートし、従来の CodeDeploy のようなより柔軟なデプロイができるようになりました。

https://aws.amazon.com/about-aws/whats-new/2025/05/aws-codepipeline-deploy-spec-file-ec2-deploy-action/

DeploySpec ファイルの指定

以前のスクリプト実行方式は「アクションの設定を使用」を選択した時に引き続き設定が可能です。

09AC5FCC-934A-494C-95B2-ADB9EFBF8F3A.png

今回のアップデートで「DeploySpec ファイルを使用」が選択できるようになっており、この場合は DeploySpec ファイル名を指定することが出来ます。

6A93C38E-213F-439C-B122-D20826437110.png

DeploySpec ファイルの仕様は次の公式ドキュメントに記載されています。
概ね CodeDeploy の AppSpec ファイルの形式をサポート(一部パラメータはサポートされておらず無視される)しており、そのまま AppSpec ファイルを使うことも可能です。

https://docs.aws.amazon.com/codepipeline/latest/userguide/action-reference-EC2Deploy.html#action-reference-EC2Deploy-spec-reference

※ AppSpec 互換のためにhooksパラメータを使うこともできるのですが、その場合は Spec ファイルのバージョンを 0.0 で指定する必要があります。

やってみたのだが...

リポジトリに AppSpec ファイルを配置し、今回の方法でデプロイを試してみます。
以下の検証用リポジトリを用意しました。

https://github.com/Tak1wa/hoge0519-codepipeline-to-ec2/tree/main

CodePipeline で DeploySpec ファイルを指定します。

7ECE8FC8-7981-4099-92AC-27FAF755D31A.png

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

デプロイしてみます。

image.png

エラーになりました。

[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を実行していました。

image.png

このあたり介入できないのでちょっと解決が難しそうです。数日待ってもう一度試してみます。

さいごに

本日は AWS CodePipeline の EC2 デプロイアクションで DeploySpec ファイルをサポートするようになったので試してみました。

結果としては私の環境ではうまく動作しなかったのですが、動作している方いますかね?うまく出来ている方もし入れば教えてください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.