こんにちは、大和総研金融システム部の岸田です。
大和総研ではクラウドを通じてお客様に価値を提供すべく、2021年度よりパブリッククラウドの推進組織(CCoE: Cloud Center of Excellence)を設置し、クラウド活用を推進しています。
私は、金融機関向けシステムのアプリケーションの開発を担当しています。 現在は、地方銀行向けのシステムをオンプレミスからパブリッククラウドへ移行するプロジェクトにおいて、AWS CodePipelineなどの開発ワークフローに関わるサービスの設計、構築を担当しています。
AWS CodePipelineは、2023年10月から2024年2月にかけて大規模なアップデートが行われました。AWS CodePipelineの最新仕様を理解するのに苦労している方も多いと思います。 そこで本記事では、AWS CodePipelineのアップデート内容をテーマに、動作確認結果も含め詳細にお伝えしたいと思います。
AWS CodePipelineとは
AWS CodePipeline(以下、CodePipeline)とは、ソフトウェアの開発およびデプロイメントプロセスを自動化するためのフルマネージドの継続的な配信サービスです。
パイプラインは、複数のステージ(ビルド、テスト、デプロイなど)から構成され、各ステージは一連のアクション(ビルドプロジェクト、テストスイート、デプロイメントなど)で構成されます。これらの設定はGUI(Graphical User Interface)上で直感的に行うことができます。 パイプライン内のステージは、他のサービスと組み合わせることで柔軟なカスタマイズが可能です。 代表的なステージには、ソースステージ、ビルドステージ、デプロイステージがあります。これらのステージは、AWSのマネージドサービスだけでなく、GitHubやGitLabなどの外部サービスとの連携が可能なことも魅力です。
CodePipelineのアップデート概要
今回ご紹介するCodePipelineのアップデートは、2023年10月から2024年2月にかけて発表された以下2つの機能です。
パイプラインレベル変数の追加
トリガーフィルターサポートの実装
パイプラインレベル変数の追加
2023年10月にCodePipelineの新しいバージョンであるV2がリリースされました。 これまでのCodePipelineでは、各ステージに渡せる変数は決まったもののみでしたが、V2では各ステージに動的に変数を渡すことができるようになりました。
AWS CodePipeline でパラメータ化されたパイプラインのサポートを開始
トリガーフィルターサポート
トリガーフィルターが実装され、パイプラインの起動を制御する際に、「Gitのプルリクエストやプッシュがされたかどうか」だけでなく、「指定したGitタグが付与されているかどうか」や「リポジトリ内のどのファイルに変更が加わったかどうか」を考慮することができるようになりました。なお、トリガーフィルターサポートの対象はGitHub, GitLab等の外部リポジトリのみです。
CodePipeline が追加のトリガーフィルターと新しい実行モードのサポートを開始
CodePipelineの各アップデートの詳細
ここからは、CodePipelineの各アップデートをより詳細に理解するために、大和総研で動作確認した結果を紹介します。
パイプラインレベル変数の追加
パイプラインV1でも各ステージで変数は使用できますが、それぞれのステージで使用できる変数はサービスごとに決まっています。 今回は、パイプラインレベル変数をCodeBuild内のbuildspec内で使用するための設定を確認します。
※CodePipelineの元々の仕様については「AWS公式ユーザーガイド」を参照
パイプラインレベル変数は、CodePipeline の「変数を編集」から宣言することが可能です。

パイプラインレベルで宣言した変数をビルドアクションで利用してみます。ビルドアクションの「環境変数」にパイプライン変数を記載します。記載ルールは、#{variables.(パイプラインレベル変数名)}
となります。変数名は、CodeBuild内で使用したい変数名を自由に記載できます。

CodeBuildの環境変数で定義した変数名をbuildspec内でも使用するための宣言を行います。
version: 0.2 env: variables: CodeBuildtest: "" phases: build: commands: - echo "Hello, CodeBuild!" - echo "This is a sample build." - printenv
設定は以上です。 CodePipeline を実行(「変更をリリース」ボタンをクリック)すると、実行時に変数の入力を求められます。

変数を設定して「リリースする」を押すとパイプラインが実行されます。実行結果は下記です。printenvの出力結果にパイプラインレベル変数で宣言した文字列が表示されていることが確認できました。

トリガーフィルターサポート Gitタグでのトリガー機能
次に、Gitタグでのトリガー機能について詳細を見ていきます。GitHub側でタグを付与した際にCodePipelineが実行されることを確認します。比較のためにSourceアクションにGitHubとCodeCommit両方のSourceを用意します。トリガーの設定はCodePipeline の設定画面から編集できます。

設定画面です。対象のソースを設定する際、CodeCommit側のソースが選択できない状態になっていることがわかります。

GitHub側のソースに対して、feature/*という命名規則のタグが付与されていることをトリガー条件として指定します。 除外条件も含めることができるため、feature/testという状態の場合は除外するように設定します。

紐付けているGitHub上にタグを生成します。

生成後、CodePipeline側でパイプラインが実行されたことを確認しました。

一方で、除外設定を入れているfeature/testのタグを付与した場合は、パイプラインが起動しないことも確認できました。
トリガーフィルターサポート ファイルパスでのトリガー機能
最後に、ファイルパスでのトリガーフィルターの動作を確認します。GitHub上のリポジトリ構成は下記のようになっており、terraformフォルダに対してトリガーフィルターを設定した状態で、terraform配下とwebdemoディレクトリ上にtestファイルを追加した場合の挙動について確認します。
. ├─ terraform: terraform資源を管理するフォルダ ├─ webdemo: デモ用webアプリケーションを格納するフォルダ ├─ .gitignore └─ README.md
ファイルパスでのトリガーフィルターを設定する場合は、トリガーフィルターの設定画面で、フィルタータイプをブランチにして、ファイルパスに対象とするディレクトリパスを記載します。

GitHub上にテストファイルをコミットしました。

その結果、新しいコミットのソースでCodePipelineが実行されることを確認できました。


また、webdemoにファイル追加した場合は、ファイルパスの条件に合致しないため、パイプラインが起動しないことも確認できました。
動作確認ができなかった点
今回の動作検証では、以下の機能は未対応であったため動作確認ができませんでした。今後のアップデートを期待しています。
パイプラインレベル変数について
CodePipelineをCodeCommitと連携させる場合、EventBridge側から変数を指定して実行させることはまだできないようです。トリガーフィルターについて
トリガーフィルターはGitHub等の主要外部Gitリポジトリサービスにのみ対応しており、現段階ではCodeCommitには対応していません。
おわりに
本記事では、CodePipelineV2のアップデートについて、その内容と大和総研での動作確認結果を紹介しました。 パイプラインの起動制御の融通が利かないという点がデメリットの一つでしたが、今回のアップデートでCodePipelineを利用するケースが増えそうです。 また、外部のリポジトリとの連携機能も充実してきているので、リポジトリはGitHubやGitLabなどの外部リポジトリを選択し、パイプラインはCodePipelineを利用するパターンなど、柔軟に組み合わせることも考えられます。
これからもCodePipelineなどの開発ツールのアップデートは多くなりそうなので、引き続き注視していきたいと思います。
大和総研では、金融機関や事業会社のお客様へクラウドを導入・運用してきた実績を活かし、お客様のクラウドインフラの構築・移行などをサポートします。ご要望・ご不明点などがありましたら、ITソリューションサービスサイトよりお問い合わせください。
関連記事
大和総研の豊富な知識と粘り強い取り組みで実現した ミッションクリティカルなEC決済システムのクラウド移行 | 大和総研
保険業界のデジタル戦略をサポートする「DXプラットフォーム(通称:insNext)」をクラウドネイティブなアーキテクチャで構築 | 大和総研