我在 AWS Systems Manager Parameter Store 中存储了多个参数值。我想根据自己的要求在 AWS CloudFormation 堆栈中动态使用这些参数。
简短描述
以下解决方法使用 Microsoft Windows 和 Linux 作为示例环境来演示如何在 CloudFormation 堆栈中动态使用不同的参数。
重要提示:使用以下命令和模板时,请务必根据您的要求替换 Windows 和 Linux。
解决方法
1. 打开 AWS Systems Manager 控制台。
2. 在导航窗格中,选择 Parameter Store。
3. 将系统管理器参数创建为字符串类型,以存储适用于 Linux 或 Windows 的 Amazon Machine Image (AMI) ID。
Linux:
LinuxAmiId - AMI-Id-for-Linux-resources
-或者-
Windows:
WindowsAmiId - AMI-Id-for-Windows-resources
注意:将AMI-Id-for-Linux-resources 和 AMI-Id-for-Windows-resources 替换为您的资源的 AMI ID。
4. 使用以下示例 CloudFormation 模板创建参数,用于选择在部署时使用的 AMI 参数:
"Parameters": {
"AmiToUse": {
"Type": "String",
"AllowedValues": [
"windows",
"linux"
]
}
},
"Conditions": {
"CreateWindowsResources": {
"Fn::Equals": [
"windows",
{
"Ref": "AmiToUse"
}
]
}
},
"Resources": {
"EC2Instance": {
"Type": "AWS::EC2::Instance",
"Properties": {
"ImageId": {
"Fn::If": [
"CreateWindowsResources",
"{{resolve:ssm:WindowsAmiId:1}}",
"{{resolve:ssm:LinuxAmiId:1}}"
]
}
}
}
}
**注意:**在前面的模板中,如果 AmiToUse 选择 Windows,则 CreateWindowsResources 条件的计算结果为 true。CloudFormation 使用存储在 WindowsAmiId 中的值来预置 AWS::EC2::Instance 资源。对于 Linux,条件的计算结果为 false,CloudFormation 使用存储在 LinuxAmiId 中的值来预置 AWS::EC2::Instance 资源。
有关动态引用的详细信息,请参阅使用动态引用指定模板值。
相关信息
CloudFormation 研讨会:动态引用实验室