如何将存储在系统管理器中的参数与 AWS CloudFormation 堆栈动态配合使用?

1 分钟阅读
0

我在 AWS Systems Manager Parameter Store 中存储了多个参数值。我想根据自己的要求在 AWS CloudFormation 堆栈中动态使用这些参数。

简短描述

以下解决方法使用 Microsoft Windows 和 Linux 作为示例环境来演示如何在 CloudFormation 堆栈中动态使用不同的参数。

重要提示:使用以下命令和模板时,请务必根据您的要求替换 WindowsLinux

解决方法

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-resourcesAMI-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 研讨会:动态引用实验室


AWS 官方
AWS 官方已更新 2 年前