Как выполнить bash-код в экземпляре EC2 из документа автоматизации, развернутого с CloudFormation - PullRequest
1 голос
/ 05 марта 2019

Я пытаюсь выполнить bash-код с помощью aws: runcommand. Я взял и адаптировал приведенный ниже фрагмент из репозитория AWS для развертывания конвейера Golden Image

То, что вы видите ниже, развернуто через стек CloudFormation. Объект AWS :: SSM :: Document формируется, передавая различные входные данные. Это один из основных шагов моего документа по автоматизации. Я пытаюсь обновить ОС моего экземпляра.

{

   "name": "updateOSSoftware",

   "action": "aws:runCommand",

   "maxAttempts": 3,

   "timeoutSeconds": 3600,

   "onFailure": "Abort",

   "inputs": {

       "DocumentName": "AWS-RunShellScript",

       "InstanceIds": [

           "{{startInstances.InstanceIds}}"

       ],

       "Parameters": {

           "commands": [

               "export https_proxy=http://myproxy.com:myport",

                "export https_proxy='{{OutBoundProxy}}'",

                "set -e",

               "[ -x \"$(which wget)\" ] && get_contents='wget $1 -O -'",

               "[ -x \"$(which curl)\" ] && get_contents='curl -s -f $1'",

               "eval $get_contents https://aws-ssm-downloads-eu-west-1.s3.amazonaws.com/scripts/aws-update-linux-instance > /tmp/aws-update-linux-instance",

               "chmod +x /tmp/aws-update-linux-instance",

               "/tmp/aws-update-linux-instance --pre-update-script '{{PreUpdateScript}}' --post-update-script '{{PostUpdateScript}}' --include-packages '{{IncludePackages}}' --exclude-packages '{{ExcludePackages}}' 2>&1 | tee /tmp/aws-update-linux-instance.log"

           ]

       }

   }

}

Как только я выполняю документ из System Manager, я SSH в экземпляр EC2 и пытаюсь и echo $http_proxy, переменная сбрасывается, показывая, что код не был запущен.

Как мне запустить bash code?

1 Ответ

1 голос
/ 26 апреля 2019

Переменная среды, экспортируемая с помощью команды export, предназначена только для текущей оболочки. Если вы войдете в хосты через ssh, они будут в другой оболочке, я не думаю, что вы увидите переменную env, установленную через 'RunCommand'.

В качестве обходного пути можно добавить команду в профиле bash. например

echo "export https_proxy=http://myproxy.com:myport" >> ~/.bash_profile

...