AWS CDK公式の機能でACMとCloudFrontのクロスリージョン参照を実装する
AWS CDKでクロスリージョン参照できなくて、悔しい思いをしたことはありませんか? 私はよくあります。
そんなときはcdk-remote-stackパッケージを利用すると解決できており、以前ブログも書きました。
ところが、いつの間にかAWS CDK公式でクロスリージョン参照できるようになっていました!(2023/10/05時点では、まだexperimentalな機能です)
以前のブログ同様、次の図のようなCloudFront+S3の環境を東京(ap-northeast-1)リージョンで構築して、 CloudFrontにカスタムドメインをつける場合、CloudFrontの仕様上バージニア(us-east-1)リージョンでACMを構築する必要があります。
今回、公式の機能を使ってクロスリージョン参照ができるようになっていたので、実際にこの環境をAWS CDKで作ってみました。
サンプルコード
今回cdkで構築する環境のサンプルコードは以下に保存しています。細部が気になる方はこちらを御覧ください。
前提条件
AWS CDKはv2を使用しています。
$ cdk --version 2.99.1 (build b2a895e)
Version 2.50.0で追加された機能なので、それより新しければ動くと思います。
Route 53のパブリックホストゾーンを事前に作成しています。
解説
主なファイル構成はこんな感じです。
- bin/
- cdk-cloudfront-cross-region-sample.ts
- lib/
- acm-for-cloudfront-stack.ts
- cloudfront-stack.ts
- s3/
- index.html
#!/usr/bin/env node import "source-map-support/register" import * as cdk from "aws-cdk-lib" import { AcmForCloudfrontStack } from "../lib/acm-for-cloudfront-stack" import { CloudfrontStack } from "../lib/cloudfront-stack" const account = "<<YOUR_AWS_ACCOUNT_NO>>" const domainName = "<<YOUR_PUBLIC_DOMAIN_NAME>>" const hostName = "cf-cross" const envJP: cdk.Environment = { account, region: "ap-northeast-1", } const envUS: cdk.Environment = { account, region: "us-east-1", } const app = new cdk.App() const acmForCloudfront = new AcmForCloudfrontStack( app, "AcmForCloudfrontStack", { env: envUS, crossRegionReferences: true, domainName, hostName, }, ) const cloudfront = new CloudfrontStack(app, "CloudFrontStack", { env: envJP, crossRegionReferences: true, domainName, hostName, certificate: acmForCloudfront.certificate, })
自分で使用するときは、環境に合わせて <<YOUR_AWS_ACCOUNT_NO>>
と <<YOUR_PUBLIC_DOMAIN_NAME>>
を書き換えてください。
まず最初に23行目でバージニアリージョンのACMを作成しています。
この時、スタックプロパティに crossRegionReferences: true
を設定することで、異なるリージョン間であっても
リソースの受け渡しができるようになります。
34行目でバージニアリージョンのACMを受け渡しつつ、東京リージョンでCloudFront+S3を作成しています。
同様に、スタックプロパティに crossRegionReferences: true
を設定しています。
たったこれだけで、クロスリージョン参照ができるようになります。簡単ですね!
受け渡しさえできれば、あとは普通にCloudFrontを構築するだけです。
CloudFrontのAWS CDKでの書き方は、こちらのブログをご覧ください。
実際のプログラムはこちらです。
このcdkをデプロイすると、S3を東京リージョンに配置しながらカスタムドメインのCloudFrontが構築できます。
終わりに
AWS CDKでのクロスリージョンの参照が更に簡単になりました。 現時点ではexprementalな機能ですが、正式に取り入れられると良いですね。 いろいろなパターンで使えそうなので、クロスリージョン参照で困っている方はぜひ試してみてください。