从 AWS CDK 中 SSM 参数名称中的堆栈参数命名 SSM 参数

Name an SSM parameter from a stack parameter within an SSM parameter name in AWS CDK

我有一个带有 CloudFormation 堆栈参数的 CDK 应用程序:

project_name_param = cdk.CfnParameter(
    self,
    "ProjectName",
    default="MyCoolProject",
)

由于可以部署此堆栈的多个实例,我想创建一个 SSM Parameter 名称基于此项目名称,以使事情井井有条。

在普通的 CloudFormation 中,这可以通过例如实现:

  MyCoolResourceArnParam:
    Type: 'AWS::SSM::Parameter'
    Properties:
      Description: ARN of this project's MyCoolResource
      Name: !Sub '/Projects/${ProjectName}/MyCoolResource'
      Type: String
      Value: !GetAtt MyCoolResourceArn

...但我正在努力弄清楚如何使用 CDK 中的 project_id_param 对象来实现相同的目的。例如已经尝试并失败了类似的各种组合:

input_bucket_ssm_param = ssm.StringParameter(
    self,
    "MyCoolResourceSSMParam",
    string_value=my_cool_resource.arn,
    description="...",
    parameter_name=cdk.Fn.sub(
        f"/Projects/{project_name_param.value_as_string}/MyCoolResource"
    ),
)

可能我遗漏了一些基本的东西,因为在 CDK 中使用 CFn 参数仍然很新 - 谁能告诉我它应该如何工作?

哎呀,找到问题了!

cdk.Fn 是不必要的(CDK 无论如何都应该在字符串格式中解析动态“令牌”),但是如 the StringParameter doc 中所述,使用 simple_name 参数是必需的标记化 parameter_name.

input_bucket_ssm_param = ssm.StringParameter(
    self,
    "MyCoolResourceSSMParam",
    string_value=my_cool_resource.arn,
    description="...",
    parameter_name=f"/Projects/{project_name_param.value_as_string}/MyCoolResource",
    simple_name=False,  # < Need this too!
)