【问题标题】:AWS EC2 Systems Manager Parameter TypesAWS EC2 Systems Manager 参数类型
【发布时间】:2017-06-17 08:50:21
【问题描述】:

我正在尝试使用 Amazon EC2 系统管理器 (http://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html) 创建“自动化”文档类型,以(除其他外)标记它刚刚创建的 AMI。

您可以在“mainSteps”中以这样的预定方式创建标签:

...
{
  "name": "CreateTags",
  "action": "aws:createTags",
  "maxAttempts": 3,
  "onFailure": "Abort",
  "inputs": {
    "ResourceType": "EC2",
    "ResourceIds": ["{{ CreateImage.ImageId }}"],
    "Tags": [
      {
        "Key": "Original_AMI_ID",
        "Value": "Created from {{ SourceAmiId }}"
      }
    ]
  }
},
...

但要使用可变数量的标签进行标记,我假设以下更改是必要的:

...
{
  "name": "CreateTags",
  "action": "aws:createTags",
  "maxAttempts": 3,
  "onFailure": "Abort",
  "inputs": {
    "ResourceType": "EC2",
    "ResourceIds": ["{{ CreateImage.ImageId }}"],
    "Tags": {{ Tags }}
  }
},
...

添加了一个名为“Tags”的“MapList”类型的新参数:

"parameters": {
  "Tags": {
    "type": "MapList"
  }
}

由于运行该进程抱怨我使用“String”类型并说我应该使用“MapList”。

'MapList' 被列为 Amazon EC2 系统管理器 (http://docs.aws.amazon.com/systems-manager/latest/APIReference/top-level.html) 的参数类型,但我尚未找到任何有关如何定义此类型的文档。

根据我从他们上面的“硬编码”示例和他们其他 API 中的其他标记方法中看到的内容,我猜测了几种格式,但无济于事:

[ { "Key": "Name", "Value": "newAmi" } ]
[ { "Key": "Name", "Values": [ "newAmi" ] } ]
1: { "Key": "Name", "Values": [ "newAmi" ] }

有谁知道如何定义 Amazon EC2 系统管理器引入的新参数类型(特别是“MapList”)?

更新:

由于缺少文档,亚马逊支持正在询问自动化团队如何使用这种方法最好地标记 ami。不过,我已经找到了如何在控制台中添加单个标签作为参数值:

{ "Key": "TagName", "Value": "TagValue" }

我尝试添加多个标签将允许自动化启动:

{ "Key": "TagName1", "Value": "TagValue1" }, { "Key": "TagName2", "Value": "TagValue2" }

但最终在运行时返回此一般错误:

Internal Server Error. Please refer to Automation Service Troubleshooting 
Guide for more diagnosis details

数组周围似乎缺少 [],但您似乎可以免费获得这些,因为当我添加它们时出现此错误:

Parameter type error. [[ { "Key": "Description", "Value": "Desc" }, 
{ "Key": "Name", "Value": "Nm" } ]] is defined as MapList.

【问题讨论】:

    标签: amazon-ec2 amazon-systems-manager


    【解决方案1】:

    感谢您使用 EC2 Systems Manager 的自动化功能。这是我测试的文档,它有效。

    {
      "schemaVersion": "0.3",
      "description": "Test tags.",
      "assumeRole": "arn:aws:iam::123456789012:role/TestRole",
      "parameters": {
        "Tags": {
          "default": [{
            "Key": "TagName1",
            "Value": "TagValue1"
          },
          {
            "Key": "TagName2",
            "Value": "TagValue2"
          }],
          "type": "MapList"
        }
      },
      "mainSteps": [
        {
          "name": "CreateTags",
          "action": "aws:createTags",
          "maxAttempts": 3,
          "onFailure": "Abort",
          "inputs": {
            "ResourceType": "EC2",
            "ResourceIds": [
              "i-12345678"
            ],
            "Tags": "{{ Tags }}"
          }
        }
      ]
    }
    

    【讨论】:

    • 感谢@Cooper.Wu。示例确实可以正常工作,前提是我更改了假设角色/资源 ID 并从 CLI 运行,但这在控制台中不起作用,并抱怨标签的默认值:Parameter type error. [[{"Key":"TagName1","Value":"TagValue1"},{"Key":"TagName2","Value":"TagValue2"}]] is defined as MapList. 更重要的是,如果我输入我自己的值在 CLI 中标记没有周围的“[]”(问题中提到的错误)它仍然会在运行时失败:Internal Server Error. Please refer to Automation Service Troubleshooting Guide for more diagnosis details。有什么建议吗?
    猜你喜欢
    • 2021-01-03
    • 2017-08-08
    • 2019-04-29
    • 2021-04-15
    • 2020-07-22
    • 2020-02-06
    • 2020-07-30
    • 2018-04-21
    • 2021-05-18
    相关资源
    最近更新 更多