如何通过 AWS CloudFormation 堆栈动态使用存储在 Systems Manager 中的参数?

1 分钟阅读
0

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

解决方法

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

  1. 打开 AWS Systems Manager 控制台

  2. 在导航窗格中,选择 Parameter Store(参数存储)。

  3. 创建类型为字符串的 Systems Manager 参数,用于存储适用于 Linux 或 Windows 的亚马逊机器映像 (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 作为窗口,则 CreateWindowsResources 条件的计算结果为 true。CloudFormation 使用存储在 WindowsAmiId中的值来预置 AWS::EC2::Instance 资源。对于 Linux,条件的计算结果为 false,CloudFormation 使用存储在 LinuxAmiId 中的值来预置 AWS::EC2::Instance 资源。

有关动态引用的更多信息,请参阅使用动态引用获取存储在其他服务中的值

相关信息

动态引用

AWS 官方
AWS 官方已更新 2 个月前