概要
従来CDKでクロスリージョン参照といえば、cdk-remote-stackを使用する事が主流でしたが、どうやらCDK 2.50.0以降からCDKネイティブでクロスリージョンのリソース受け渡し(スタック間参照)が可能になったとの事(もっと早く知っていれば...)
サンプルコード
以下のサンプルコードは、"ap-northeast-1"のCloudFrontスタックから"us-east-1"のWebACLのARNを参照する例です。
bin/main.ts
bin/main.ts
#!/usr/bin/env node
import 'source-map-support/register';
import * as cdk from 'aws-cdk-lib';
import { Environment } from 'aws-cdk-lib';
import { WebACLStack } from '../lib/WebACL/WebACLStack';
import { CloudFrontStack } from '../lib/CloudFront/CloudFrontStack';
if (process.env['NODE_ENV'] == null || process.env['NODE_ENV'] === '') {
throw new Error('NODE_ENV is not set');
}
if (process.env['AWS_PROFILE'] == null || process.env['AWS_PROFILE'] === '') {
throw new Error('AWS_PROFILE is not set');
}
const app = new cdk.App();
const env: Environment = {
account: '<AWSアカウント番号>',
region: 'ap-northeast-1',
};
const webAcl = new WebACLStack(app, {
env: {
...env,
region: 'us-east-1',
},
crossRegionReferences: true, // クロスリージョン参照を有効化
});
new CloudFrontStack(app, {
env: env,
webAclArn: webAcl.outputs.webAclArn, // WebACLのARNを渡す
crossRegionReferences: true, // クロスリージョン参照を有効化
});
関連する2つのスタック両方に「crossRegionReferences: true」を1行追加させるだけで、簡単にクロスリージョン参照をさせる事が出来ました。
※裏側でAWS Lambdaとパラメータストアのリソースが自動で作成される模様。
WebACLStack.tsに依存してしまうのは少し残念な所ではありますが、クロスリージョン参照がこんな簡単に実装出来るなら痛くも痒くもありません。