LoginSignup
3
2

More than 1 year has passed since last update.

CDK Pipelines管理下のStackをローカルから直接デプロイする

Last updated at Posted at 2022-02-19

AWS CDK Tipsシリーズの記事。

はじめに

CDK Pipelinesで管理されたStackを、Pipelineを介さずにローカル環境などから直にデプロイしたいことがある。
本記事ではこの方法を紹介する。

方法

次のように cdk deploy コマンドを実行すれば良い。

npx cdk deploy <PipelineがあるStackの名前>/<Stageの名前>/<Stackの名前>

例えば以下のコードを考える。

import * as cdk from '@aws-cdk/core';
import * as pipelines from 'aws-cdk-lib/aws-pipelines';
const app = new cdk.App();

// CDK Pipelinesを定義するStack
const pipelineStack = new cdk.Stack(app, 'PipelineStack');
const pipeline = new pipelines.CodePipeline(pipelineStack, 'Pipeline', {
    synth, //put some step here,
});

// CDK PipelinesでデプロイするStage
const devStage = new cdk.Stage(pipelineStack, "DevStage");
// Stageの中のStack
new cdk.Stack(devStage, "SomeStack");

pipeline.addStage(devStage);

この時DevStage の中の SomeStack は通常 CDK Pipelines からデプロイされる。
一方で、以下のコマンドにより、ローカル環境からも直接 Stack をデプロイすることができる。

npx cdk deploy PipelineStack/DevStage/SomeStack

なお、もちろんコマンドを実行する環境に適切な権限が必要なことには注意!

また、StageのConstruct tree内の位置によっては、上記のコマンドではうまく行かない場合がある。
例えば、下記のようにStageをStack直下ではなく他のConstructの下に配置した場合を考える。

...
// pipelineStack直下に何らかのConstructがあると仮定する
const someConstruct = new Construct(pipelineStack, "SomeConstruct");
// devStageのscopeをSomeConstructにしたとする
const devStage = new cdk.Stage(someConstruct, "DevStage");
...

この場合、デプロイコマンドは下記のようにする必要がある。

npx cdk deploy PipelineStack/SomeConstruct/DevStage/SomeStack

Construct treeについての詳細は話はこちら!

但し書き

CI/CD パイプラインで管理されたものをローカルからいじると、ややこしい考慮事項が増えそう。
最後の手段にとどめておいたほうが良いと思う。
CDKでは稀に、Stack間の依存関係を無視して特定のStackだけをデプロイしたい状況が発生するので、そのようなときに使えるかも。 (参考: --exclusively を付ける)

その他

この方法はドキュメントには記載されていない気がするが、ここで見つけた
cdk.devのSlackチャンネルに入っているとこういった情報を見つけやすくなるので、良い!

3
2
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
3
2