📝

CDKでECR作成

に公開

前提条件の確認

  • node.js: 20.2.0
  • cdk: 2.1018.1 (build cb71364)
mkdir sample2
cd sample2
cdk init app --language typescript

こちらがECRの内容です。
注意したいのは removalPolicy が設定されているので、Stackを消した時に削除されてしまいます。

lib/repository-stack.ts
import * as cdk from 'aws-cdk-lib';
import { Stack, StackProps } from 'aws-cdk-lib';
import * as ecr from 'aws-cdk-lib/aws-ecr';
import { Construct } from 'constructs';

export class RepositoryStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props);

    // ECR リポジトリの作成
    new ecr.Repository(this, 'MySampleRepository', {
      repositoryName: 'my-sample-repo1',
      imageScanOnPush: true, // プッシュ時にイメージスキャン
      removalPolicy: cdk.RemovalPolicy.DESTROY, // スタック削除時にECR削除(開発用)
    });
  }
}

メインのコードはこれを呼び出して使うようにします

lib/sample2-stack.ts
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import { RepositoryStack } from '../lib/repository-stack';

export class Sample2Stack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    new RepositoryStack(this, 'RepositoryStack', {
      env: { account: process.env.CDK_DEFAULT_ACCOUNT, region: 'ap-northeast-1' },
    });
  }
}

ではこれで動かします

cdk bootstrap
cdk diff
cdk deploy --all

この書き方だと複数のStackが作成されるので、--all で全てのStackを更新することを明示します。

https://ap-northeast-1.console.aws.amazon.com/ecr/private-registry/repositories で確認したら削除します。

cdk destroy --all

ここでも--all を指定します

注意点

repositoryName はグローバル一意ではないが、アカウント内では重複不可。
RemovalPolicy.DESTROY は本番環境では避けるべきです。

Discussion