AWS Команда SSM Run: использовать номер текущей учетной записи из шаблона Cloudformation - PullRequest
0 голосов
/ 07 января 2020

У меня есть шаблон CloudFormation, который создает набор команд SSM для управления моими Linux EC2-экземплярами. У этих команд должен быть доступ к моему AWS номеру учетной записи для выполнения некоторых задач.

В моем шаблоне CloudFormation я сделал:

AWSTemplateFormatVersion: '2010-09-09'
Description: Sample SSM commands

MyCommand1:
  Type: AWS::SSM::Document
  Properties: 
    DocumentType: Command
      Content: 
        schemaVersion: "2.2"
        parameters: {}
        mainSteps: 
          - action: aws:runShellScript 
            name : command1
            inputs: 
              runCommand:
                - echo "this command run on the selected EC2 instance" && echo "You are running this on account {{global:ACCOUNT_ID}}"

Outputs:
    Command1ID:
        Description: MyCommand1
        Value: !Ref  MyCommand1

Этот шаблон устанавливает функцию, и я могу запустить это из веб-консоли SSM.

Но {{global: ACCOUNT_ID}} не оценивается номером моей учетной записи. Он оценивается в строку "{{global: ACCOUNT_ID}}". Поэтому я предполагаю, что это не очень хороший синтаксис для использования global var из команды SSM.

Итак, после прочтения do c здесь https://docs.aws.amazon.com/systems-manager/latest/userguide/walkthrough-cli.html я попытался проверить это через Только CLI (для быстрого тестирования другого синтаксиса):

$> sh_command_id=$(aws ssm send-command --instance-ids "i-0cb0c0ea8ef7339f1" --document-name "AWS-RunShellScript" --parameters commands='echo You are running this on account {{global:ACCOUNT_ID}}' --output text --query "Command.CommandId")

, но команда завершилась неудачно с ошибкой синтаксического анализа Error parsing parameter '--parameters': Expected: ',', received: '}' for input

Какой правильный синтаксис используется для {{global: *} } что в SSM "runCommand" action?

Ответы [ 2 ]

2 голосов
/ 07 января 2020

Этого можно добиться с помощью функции Fn::Sub:

- !Sub 'echo "this command run on the selected EC2 instance" && echo "You are running this on account ${AWS::AccountId}"'
0 голосов
/ 07 января 2020

Встроенная переменная для ACCOUNT_ID не будет вам доступна. Используя SSM, вы запускаете команду для экземпляра, и эта команда не понимает ACCOUNT_ID. Основываясь на шаблоне формирования облака, я предполагаю, что вы работаете в системе на основе * ix.

Один из способов сделать это - использовать это в вашей фактической команде:

ACCOUNT_ID=`curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | grep accountId| awk '{print $3}'|sed 's/"//g'|sed 's/,//g'` && echo "this command run on the selected EC2 instance" && echo "You are running this on account ${ACCOUNT_ID}"

При этом используются метаданные экземпляра ec2 для определения Идентификатор учетной записи.

...