🚀
CDKPipelineで空ステージを作成する
動機
- CDKPipelineでPipelineを構築している際に、コマンド(シェルスクリプト)だけ実行できるステージを作ることが欲しい
※CDKPipelineとは、aws-cdk-lib.pipelines module で実装されたCI/CD Pipelineを指します。
解決方法概要
- 空の何もデプロイしないStackを定義して、そのスタックをStage化する
- そのStageをPipelineの途中に挟み、
pre
やpost
で好きなコマンドを実行する
メリット:
- CDKPipelineの定義をそのまま使った形で実現できる
デメリット: - 何もデプロイしないCDK(CloudFormation)デプロイが走るのが少し無駄に感じる
CDKPipeline実装方法
空Stackを定義:
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
export class EmptyStack extends cdk.Stack {
constructor(scope: Construct, id: string, props: cdk.StackProps) {
super(scope, id, props);
}
}
空Stageを定義:
import * as cdk from "aws-cdk-lib";
import { Stage, StageProps } from "aws-cdk-lib";
import { Construct } from 'constructs';
export class EmptyStage extends Stage {
constructor(scope: Construct, id: string, props: cdk.StackProps) {
super(scope, id, props);
new EmptyStack(this, 'empty-stack', props);
}
}
CDKPipelineに組み込む:
import { CodePipeline } from "aws-cdk-lib/pipelines";
const pipeline = new CodePipeline(略)
:
const hogeStage = pipeline.addStage(new EmptyStage(app, 'hogeStage', props));
hogeStage.addPre(...steps: cdk.pipelines.Step[]); ←好きなコマンドを挟む
まとめ
以上が、CDKPipelineで任意のコマンドを実行するだけのステージを挟む方法になります。
Stack無しのステージは作成することができなかったので空ステージのような形で実現していますが、もっと良い方法があれば教えてください!
細かいことに対応するのが難しいという印象を受けがちなCDKPipelineですが、こんなこともできるのか〜くらいに誰かの役に立てば幸いです。
Discussion