LoginSignup
9
3

最近よく見るCodePipeline V2とV1との違いを今こそ理解したい

Last updated at Posted at 2024-03-13

はじめに

こんにちは!

AWS CodePipelineは2023/10/24にV2という新しいパイプラインタイプがリリースされ、従来のパイプラインはV1のタイプに分類されるようになりました。

V2は頻繁にアップデートされており、V1でできなかったことが色々できるようになっています。ただ、公式ドキュメントではV1との差がわかりにくかったので違いを改めて整理したいと思います。

image.png

引用:What type of pipeline is right for me?

パイプラインレベル変数(Pipeline-level variables)

パイプライン実行時に変数を渡す機能です。V2のみ対応しています。
変数を渡すことでパイプライン内のステージで実行される処理を動的に変更することが可能です。

パイプライン実行時に以下のように変数の値を入力して、
image.png

特定のステージで#{variables.xxx}という形で参照します。(図の最後の項目)
image.png

パイプライン変数を使うことで、似ているけどちょっと違う処理をパイプラインで実行したい場合にパイプラインを分けなくてよくなります。

ソースリビジョンの上書き(Source revision overrides)

パイプラインを実行する際に以前処理されたソースのリビジョンを指定できる機能です。V2でのみ使用可能です。これまでは手動でパイプラインを実行する場合、最新のリビジョンが自動で選択されていました。これがリビジョンを上書きできるようになったので、例えば新しいソースソースリビジョンが原因で失敗した場合に、以前正常に処理されたソースリビジョンを選択してロールバックするようなことが可能になりました。

image.png

ソースリビジョンの上書きがサポートされているリビジョンのタイプはCOMMIT_IDIMAGE_DIGESTS3_OBJECT_VERSION_IDの三つになっています。

トリガーのフィルタ(Filter triggers)

パイプラインをトリガーする条件をタグやブランチ名、ファイルパスなどでフィルタ出来る機能です。V2でのみ使用可能です。これがなかったがためにCodePipelineを利用していない人は結構いるんじゃないでしょうか。

PushまたはPull Requestイベントで1つ以上のフィルターを設定できます。
例えば、mainブランチのdirAのディレクトリ以下に変更があったPushにのみトリガーするには以下のように指定します。
image.png

フィルタに対応しているのは以下のソースプロバイダです。CodeCommitはありませんのでご注意ください。

  • Bitbucket Cloud
  • GitHub
  • GitHub Enterprise Server
  • GitLab.com
  • GitLab self-managed

実行モード(Execution modes)

実行モードはパイプラインの実行が完了していない状態で更に実行された際の挙動を制御する機能です。実行モードはSUPERSEDEDQUEUEDPARALLELの3つがあり、V1ではSUPERSEDEDのみ対応しています。V2は全て対応していてパイプライン作成後に切り替えることが可能です。

SUPERSEDED

デフォルトの実行モードです。この実行モードでは過去の実行が新しい実行で上書きされることがあります。

具体的に説明します。パイプラインは1つ以上のステージから構成されているのですが、あるステージが実行している最中はそのステージがロックされます。つまりパイプラインを複数回実行したとしても、ステージのロックが解除されるまでは後続の実行はステージの手前で止まります。
image.png
引用: How pipeline executions work

同じステージのロック解除を待つ実行が2つ以上になった場合、SUPERSEDEDでは古い実行は上書きされ一番最新の実行のみが残ります。

image.png
引用: How pipeline executions work

QUEUED

この実行モードではキューに入れられた順序で実行が処理されます。V2のみ対応しています。SUPERSEDEDではロック解除を待つ実行が2つ以上になった場合上書きされていましたが、QUEUEDではキューにたまって順に実行されます。

PARALLEL

この実行モードでは各実行は完全に独立していて個別に処理されます。V2のみ対応しています。
実行モードをPARALLELモードからSUPERSEDEDまたはQUEUEDに変更する場合、既知の課題があるようなので読んでおくとよいでしょう。

料金体系

V1とV2では課金体系が異なります。

V1はアクティブなパイプラインの数に応じた課金(1USD/パイプライン)、V2はパイプラインの実行時間に応じた課金(0.002USD/min)になります。無料利用枠もあってV1は1つ、V2は100分まで無料です。
詳しくはAWS CodePipelineの料金をご参照ください。

※料金は2024/3現在のus-west-2のものです

使い分け

機能面だけみるとV2はV1の機能を包含していそうなので、新しく作るならV2でしょうか。できることが増えるので禁止したい場合ポリシーが長くなりそうですが。なお、パイプラインが1つでよくて実行時間が長いなどのケースではV1にコストメリットが出そうですね。

追記 (2024/3/14):
CDKだとV2が今後デフォルトになるみたいです!情報ありがとうございます!

おわりに

最後までお読みいただきありがとうございました!
XのCDK界隈のTLでCodePipeline V2の話題を最近よく見かけるので記事を書きました。(@365_step_techさんが開発いただいていて感謝しかない)

今回の記事が何かのお役に立てば幸いです!

9
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
3