既存のSubnet情報を読み込んで利用する
VPCのSubnetを別手法で作成済みでIaCでは管理していないが
利用したい場合についてです。
data resourceを利用すればOKなのですが、
CDK for Terraformではどのように記述するのかを記載します。
サンプルコード
// Subnet ID Get
const subnets = new aws.dataAwsSubnets.DataAwsSubnets(scope, `subnets-${id}`, {
filter: [
{
name: "tag:Name",
values: [`sample-private-subnet`]
}
]
})
sample-private-subnet
という名称のSubnet情報をリスト型で 全て 取得します。
実際の指定方法
Lambdaでサブネットを指定する場合は以下のように記述します。
// Lambda
new Lambda(scope, `lambda-${id}`, {
functionName: `sample-lambda`,
description: "Lambda Function",
handler: "index.lambda_handler",
runtime: "python3.12",
sourcePath: sourcePath,
attachPolicies: true,
architectures: ["arm64"],
publish: true, // Versionを作成する
policies: [
"arn:aws:iam::aws:policy/AdministratorAccess" // iam:DetachRolePolicyアクションを実行権限が必要になるため、AdministratorAccessを付与
],
numberOfPolicies: 1,
environmentVariables: {
},
createCurrentVersionAllowedTriggers: false, // Latest Version に対してのみトリガーはエラーになるため無効
triggerOnPackageTimestamp: false, // パッケージのタイムスタンプによるトリガーを無効化
layers: [
"arn:aws:lambda:ap-northeast-1:133490724326:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11" // キャッシュあんど高速化のため追加
],
vpcSecurityGroupIds: [securityGroupWeb.id],
vpcSubnetIds: subnets.ids
});
簡単な解説
sample-private-subnet
というNameタグが付与されている
Subnetを設定しています。
IaCで管理していないためsample-private-subnet
のサブネットを
別で削除してしまったりした場合はエラーになりますので、
ご注意ください。
一つだけ取得したい場合はDataAwsSubnet
を利用してください。