Назовите параметр SSM из параметра стека в имени параметра SSM в AWS CDK

#amazon-web-services #aws-cdk #aws-ssm

Вопрос:

У меня есть приложение CDK с параметром стека CloudFormation, что-то вроде:

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

Поскольку можно развернуть несколько экземпляров этого стека, я хотел бы создать параметр SSM с именем, основанным на этом названии проекта, чтобы все было организовано.

В простой облачной форме это может быть достигнуто, например, за счет:

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

…Но я изо всех сил пытаюсь понять, как бы я использовал project_id_param объект в CDK для достижения того же самого. Например, пытались и потерпели неудачу с различными комбинациями, подобными:

 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"
    ),
)
 

Вероятно, мне не хватает чего — то базового, поскольку я все еще довольно новичок в использовании параметров CFn в CDK-может ли кто-нибудь просветить меня о том, как это должно работать?

Комментарии:

1. Так что же происходит? Какие-нибудь ошибки?

Ответ №1:

Упс, нашел проблему!

cdk.Fn является ненужным (CDK в любом случае должен разрешить динамический «токен» в форматировании строк), но, как указано в документе simple_name StringParameter, параметр требуется при использовании маркированного 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!
)