我在 AWS Systems Manager Parameter Store 中存储了多个参数值。我想根据我的要求在 AWS CloudFormation 堆栈中动态使用这些参数。
以下解决方案使用 Windows 和 Linux 作为示例环境来演示如何在 CloudFormation 堆栈中动态使用不同的参数。
打开 AWS Systems Manager 控制台。
在导航窗格中,选择 Parameter Store(参数存储)。
创建类型为字符串的 Systems Manager 参数,用于存储适用于 Linux 或 Windows 的亚马逊机器映像 (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。
使用以下示例 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 作为窗口,则 CreateWindowsResources 条件的计算结果为 true。CloudFormation 使用存储在 WindowsAmiId中的值来预置 AWS::EC2::Instance 资源。对于 Linux,条件的计算结果为 false,CloudFormation 使用存储在 LinuxAmiId 中的值来预置 AWS::EC2::Instance 资源。
有关动态引用的更多信息,请参阅使用动态引用获取存储在其他服务中的值。
动态引用