排除 AWS Proton 的故障 - AWS Proton

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

排除 AWS Proton 的故障

了解如何解决 AWS Proton 问题。

引用 AWS CloudFormation 动态参数的部署错误

如果您看到引用 CloudFormation 动态变量的部署错误,请验证它们是否经过 Jinja 转义。这些错误可能是由 Jinja 错误地解释动态变量引起的。CloudFormation 动态参数语法与您在 AWS Proton 参数中使用的 Jinja 语法非常相似。

示例 CloudFormation 动态变量语法:

'{{resolve:secretsmanager:MySecret:SecretString:password:EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE}}'.

示例 AWS Proton 参数 Jinja 语法:

'{{ service_instance.environment.outputs.env-outputs }}'.

为了避免这些解释错误,Jinja 转义了您的 CloudFormation 动态参数,如以下示例中所示。

该示例来自于《AWS CloudFormation 用户指南》。可以使用 AWS Secrets Manager secret-name 和 json-key 分段检索密钥中存储的登录凭证。

MyRDSInstance: Type: AWS::RDS::DBInstance Properties: DBName: 'MyRDSInstance' AllocatedStorage: '20' DBInstanceClass: db.t2.micro Engine: mysql MasterUsername: '{{resolve:secretsmanager:MyRDSSecret:SecretString:username}}' MasterUserPassword: '{{resolve:secretsmanager:MyRDSSecret:SecretString:password}}'

要转义 CloudFormation 动态参数,您可以使用两种不同的方法:

  • 将一个块放在 {% raw %} and {% endraw %} 之间:

    '{% raw %}' MyRDSInstance: Type: AWS::RDS::DBInstance Properties: DBName: 'MyRDSInstance' AllocatedStorage: '20' DBInstanceClass: db.t2.micro Engine: mysql MasterUsername: '{{resolve:secretsmanager:MyRDSSecret:SecretString:username}}' MasterUserPassword: '{{resolve:secretsmanager:MyRDSSecret:SecretString:password}}' '{% endraw %}'
  • 将一个参数放在 "{{ }}" 之间:

    MyRDSInstance: Type: AWS::RDS::DBInstance Properties: DBName: 'MyRDSInstance' AllocatedStorage: '20' DBInstanceClass: db.t2.micro Engine: mysql MasterUsername: "{{ '{{resolve:secretsmanager:MyRDSSecret:SecretString:username}}' }}" MasterUserPassword: "{{ '{{resolve:secretsmanager:MyRDSSecret:SecretString:password}}' }}"

有关信息,请参阅 Jinja escaping