从 Terraform cdk deploy lambda 获取属性
Getting attribute from Terrafrom cdk deployed lambda
我正在使用 Terraform CDK 部署 lambda 函数,并尝试使用 s3 通知为其设置触发器。我是 CDK 的新手,所以我不确定哪里出了问题。
阅读此 example 并基于使用常规 CDK 所做的工作,我认为要访问函数 arn(以便将其添加到存储桶通知设置),它是 my_function.arn
,但它呈现以下字符串
{TfToken[TOKEN.XXX]}
.
在我看来,我可以用这个值在某个地方获取 arn,但我找不到位置。
我想把它分成两个堆栈,但我需要同时部署 lambda 和它的通知触发器。
密码是
#!/usr/bin/env python
from constructs import Construct
from cdktf import App, TerraformStack, TerraformOutput
from imports.aws import AwsProvider
from imports.aws.lambdafunction import LambdaFunction
from imports.aws.s3 import S3BucketNotification, S3BucketNotificationLambdaFunction
import os
class My_Stack(TerraformStack):
def __init__(self, scope: Construct, ns: str):
super().__init__(scope, ns)
AwsProvider(self, 'Aws', region='my-region')
my_lambda_function = LambdaFunction(
self, id='id',
function_name='cdk-deployment-test',
role='my-role',
memory_size=128,
runtime='python3.8',
timeout=900,
handler="lambda_handler",
filename=os.path.join(os.getcwd(), 'deployment_package/package.zip')
)
function_to_be_triggered = S3BucketNotificationLambdaFunction(
lambda_function_arn= my_lambda_function.arn,
events = ["s3:ObjectCreate:*"],
filter_prefix = "path"
)
payment_recognition_input = S3BucketNotification(
self, id='s3-bucket-notification',
bucket = 'my-bucket',
lambda_function=[function_to_be_triggered]
)
app = App()
My_Stack(app, "cdktf-poc")
app.synth()
这是引用 Terraform 资源的 ARN 属性 的正确方法,{TfToken[TOKEN.XXX]}
标记在合成输出中解析为 Terraform 语言语法。在此处查看讨论令牌的 CDK For Terraform 文档:
比如这个CDKTF代码:
const vpc = new Vpc(this, "my-vpc", {
name: vpcName,
});
new Eks(this, "EksModule", {
clusterName: "my-kubernetes-cluster",
vpcId: vpc.vpcIdOutput,
});
最终生成(使用令牌)这个地形:
{
"module": {
"helloterraEksModule5DDB67AE": {
"cluster_name": "my-kubernetes-cluster",
"vpc_id": "${module.helloterraMyVpc62D94C17.vpc_id}"
}
}
}
因此该引用和依赖项 link 在 Terraform plan/apply 时仍然存在。
对于您的特定用例,已尝试以下方法,使用预构建的 aws 提供程序和 S3BucketNotificationLambdaFunction
构建 lambda 函数配置:
from cdktf_cdktf_provider_aws.s3 import S3BucketNotificationLambdaFunction, S3BucketNotification
from cdktf_cdktf_provider_aws.lambda_function import LambdaFunction
my_lambda_function = LambdaFunction(
self, id='id',
function_name='cdk-deployment-test',
role='my-role',
memory_size=128,
runtime='python3.8',
timeout=900,
handler="lambda_handler",
filename=os.path.join(os.getcwd(), 'deployment_package/package.zip')
)
S3BucketNotification(
self,
id="s3-bucket-notification",
bucket="my-bucket",
lambda_function=[
S3BucketNotificationLambdaFunction(
lambda_function_arn=my_lambda_function.arn,
events=["s3:ObjectCreate"],
filter_prefix="path"
)
]
)
我正在使用 Terraform CDK 部署 lambda 函数,并尝试使用 s3 通知为其设置触发器。我是 CDK 的新手,所以我不确定哪里出了问题。
阅读此 example 并基于使用常规 CDK 所做的工作,我认为要访问函数 arn(以便将其添加到存储桶通知设置),它是 my_function.arn
,但它呈现以下字符串
{TfToken[TOKEN.XXX]}
.
在我看来,我可以用这个值在某个地方获取 arn,但我找不到位置。
我想把它分成两个堆栈,但我需要同时部署 lambda 和它的通知触发器。
密码是
#!/usr/bin/env python
from constructs import Construct
from cdktf import App, TerraformStack, TerraformOutput
from imports.aws import AwsProvider
from imports.aws.lambdafunction import LambdaFunction
from imports.aws.s3 import S3BucketNotification, S3BucketNotificationLambdaFunction
import os
class My_Stack(TerraformStack):
def __init__(self, scope: Construct, ns: str):
super().__init__(scope, ns)
AwsProvider(self, 'Aws', region='my-region')
my_lambda_function = LambdaFunction(
self, id='id',
function_name='cdk-deployment-test',
role='my-role',
memory_size=128,
runtime='python3.8',
timeout=900,
handler="lambda_handler",
filename=os.path.join(os.getcwd(), 'deployment_package/package.zip')
)
function_to_be_triggered = S3BucketNotificationLambdaFunction(
lambda_function_arn= my_lambda_function.arn,
events = ["s3:ObjectCreate:*"],
filter_prefix = "path"
)
payment_recognition_input = S3BucketNotification(
self, id='s3-bucket-notification',
bucket = 'my-bucket',
lambda_function=[function_to_be_triggered]
)
app = App()
My_Stack(app, "cdktf-poc")
app.synth()
这是引用 Terraform 资源的 ARN 属性 的正确方法,{TfToken[TOKEN.XXX]}
标记在合成输出中解析为 Terraform 语言语法。在此处查看讨论令牌的 CDK For Terraform 文档:
比如这个CDKTF代码:
const vpc = new Vpc(this, "my-vpc", {
name: vpcName,
});
new Eks(this, "EksModule", {
clusterName: "my-kubernetes-cluster",
vpcId: vpc.vpcIdOutput,
});
最终生成(使用令牌)这个地形:
{
"module": {
"helloterraEksModule5DDB67AE": {
"cluster_name": "my-kubernetes-cluster",
"vpc_id": "${module.helloterraMyVpc62D94C17.vpc_id}"
}
}
}
因此该引用和依赖项 link 在 Terraform plan/apply 时仍然存在。
对于您的特定用例,已尝试以下方法,使用预构建的 aws 提供程序和 S3BucketNotificationLambdaFunction
构建 lambda 函数配置:
from cdktf_cdktf_provider_aws.s3 import S3BucketNotificationLambdaFunction, S3BucketNotification
from cdktf_cdktf_provider_aws.lambda_function import LambdaFunction
my_lambda_function = LambdaFunction(
self, id='id',
function_name='cdk-deployment-test',
role='my-role',
memory_size=128,
runtime='python3.8',
timeout=900,
handler="lambda_handler",
filename=os.path.join(os.getcwd(), 'deployment_package/package.zip')
)
S3BucketNotification(
self,
id="s3-bucket-notification",
bucket="my-bucket",
lambda_function=[
S3BucketNotificationLambdaFunction(
lambda_function_arn=my_lambda_function.arn,
events=["s3:ObjectCreate"],
filter_prefix="path"
)
]
)