結論:class ScopedAwsを使用します
概要
AWS CloudFormationで記述する際、擬似パラメータは必ずと言って良いほど使用するかと思います。
- 例. AWS::Region, AWS::AccountId
実はAWS CDKでも用意されています。
aws-cdk-lib(AWS CDKライブラリ)のScopedAwsクラスで定義されています。
AWS CloudFormationのAWS::NoValue以外は定義されています
class ScopedAwsの使い方
使い方はドキュメントに記載がある通りです。
aws-cdk-libをインポートし、ScopedAwsクラスのインスタンスを作成することで使用できます。
stack.ts
import * as cdk from "aws-cdk-lib";
/*
~
*/
const scopedAws = new cdk.ScopedAws(this);
実践
簡単ですが、IAMポリシーを作成してみます。
stackファイル
デプロイするstackファイルを以下のように記述しました。
resources
で呼び出しています。
cdk-app-stack.ts
import * as cdk from "aws-cdk-lib";
import { Construct } from "constructs";
import * as iam from "aws-cdk-lib/aws-iam";
export class CdkAppStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// 擬似パラメータインスタンス作成
const pseudo = new cdk.ScopedAws(this);
// IAMポリシー作成
new iam.ManagedPolicy(this, "policy", {
managedPolicyName: "iam-policy",
statements: [
new iam.PolicyStatement({
sid: "testPolicy",
effect: iam.Effect.ALLOW,
actions: ["ec2:StartInstances"],
resources: [
`arn:${pseudo.partition}:ec2:${pseudo.region}:${pseudo.accountId}:instance/*`,
],
}),
],
});
}
}
CFnテンプレート確認
cdk synth --no-version-reporting --no-path-metadata
で出力されるCFnテンプレートがこちら。
AWS CloudFormationで使用できる擬似パラメータに変換されていることが確認できます。
Resources:
policyE16B4B70:
Type: AWS::IAM::ManagedPolicy
Properties:
Description: ""
ManagedPolicyName: iam-policy
Path: /
PolicyDocument:
PolicyDocument:
Statement:
- Action: ec2:StartInstances
Effect: Allow
Resource:
Fn::Join:
- ""
- - "arn:"
- Ref: AWS::Partition
- ":ec2:"
- Ref: AWS::Region
- ":"
- Ref: AWS::AccountId
- :instance/*
Sid: testPolicy
Version: "2012-10-17"
デプロイして確認
cdk deploy
で作成されたIAMポリシーがこちら。問題なく擬似パラメータが変換されているのが確認できます。
まとめ
本記事では、擬似パラメータをAWS CDKで利用する方法についてまとめました。
本記事が誰かの役に立てば幸いです。