如何从 aws_cdk L1 中的资源检索 ARN 属性?

How to retrieve ARN attribute from resource in aws_cdk L1?

我已经使用 aws cdk 创建了一个 L1 lambda 层,如 docs. I would like to attach this lambda layer to a lambda function. Documentation on lambda 函数中所示,关于参数层如下:

layers (Optional[Sequence[str]]) – A list of function layers to add to the function’s execution environment. Specify each layer by its ARN, including the version.

如何在 L1 中获取我的 lambda 层的 ARN?我试过了

cfn_function = lambda_.CfnFunction(self, ..., layers = [cfn_layer_version.get_att(resource.arn)])

您将使用 cfn_layer_version.ref 获取 ARN。

来自Cloudformation docs

When you pass the logical ID of this resource to the intrinsic Ref function, Ref returns the ARN of the layer version, such as arn:aws:lambda:us-west-2:123456789012:layer:my-layer:1.

我们必须记住,当我们在 CDK 中使用 L1 构造时,这些构造直接代表 AWS CloudFormation [1] 中可用的所有资源。本质上,使用 L1 构造定义资源的配置与直接在 CloudFormation 模板中定义资源是一样的。话虽这么说,如果我们想获得 L1 构造的 ARN,我们可以对我们定义的给定构造使用“.ref”属性。

例如,如果我们要定义一个Lambda层如下:

    cfn_layer_version = lambda_.CfnLayerVersion(self, "MyCfnLayerVersion",
                                                        content=lambda_.CfnLayerVersion.ContentProperty(
                                                            s3_bucket="my-bucket-name-here",
                                                            s3_key="module.zip"
                                                        )
                                                        )

我可以使用“ref”[2] 创建一个 CloudFormation 输出,其中值为我层的 ARN,如下所示:

    cdk.CfnOutput(self, "LayerARN", value= cfn_layer_version.ref)

另一种获取输出的方法是使用我们创建的资源的“get_att()”方法,如下所示:

    cdk.CfnOutput(self, "LayerARN", value= cfn_layer_version.get_att('Ref').to_string())

如您所见,我们查找与 AWS::Lambda::LayerVersion 文档 [3] 一致的属性“Ref”。

最后,我确实建议您在 CDK 中尽可能使用更高级别的构造,因为它们在编写 CDK 代码时提供了模式灵活性。例如,您可以使用以下高级构造在 CDK [4] 中创建 Lambda 层。

参考文献:

[1] 构造 - AWS 构造库 - https://docs.aws.amazon.com/cdk/v1/guide/constructs.html#constructs_lib [2] CfnLambdaLayer 参考:https://docs.aws.amazon.com/cdk/api/v1/python/aws_cdk.aws_lambda/CfnLayerVersion.html#aws_cdk.aws_lambda.CfnLayerVersion.ref [3] AWS::Lambda::LayerVersion - https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-layerversion.html [4] Lambda层:https://docs.aws.amazon.com/cdk/api/v1/python/aws_cdk.aws_lambda/LayerVersion.html