Типы параметров менеджера системы AWS EC2

Я пытаюсь использовать Amazon EC2 Systems Manager ( 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 }}
  }
},
...

с добавлением нового параметра "Теги" типа "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 Systems Manager (в частности, "MapList")?

Обновить:

Поскольку документов не хватает, служба поддержки Amazon спрашивает группу автоматизации, как лучше всего пометить 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.

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 }}"
      }
    }
  ]
}
Другие вопросы по тегам