故障排除 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}}'.

Jinja 语法 AWS Proton 参数示例:

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

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

此示例来自《 AWS CloudFormation 用户指南》。 AWS Secrets Manager 密钥名称和 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