#amazon-web-services #amazon-ec2 #amazon-cloudformation #aws-systems-manager
#amazon-веб-сервисы #amazon-ec2 #aws-cloudformation #aws-ssm
Вопрос:
Я пытаюсь выполнить код 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)" ] amp;amp; get_contents='wget $1 -O -'",
"[ -x "$(which curl)" ] amp;amp; 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>amp;1 | tee /tmp/aws-update-linux-instance.log"
]
}
}
}
Как только я выполняю документ из системного менеджера, я подключаюсь по SSH к экземпляру EC2 и пытаюсь, и echo $http_proxy
переменная не установлена, показывая, что код не был запущен.
Как я могу запустить bash-код?
Комментарии:
1. рассматривали ли вы возможность создания AMI и использования его вместо этого?
2. после обновления ОС я хочу остановить экземпляр, а затем создать AMI с помощью action:
aws:createimage
Ответ №1:
Переменная среды, экспортируемая с помощью команды «экспорт», предназначена только для текущей командной строки. Если вы войдете на хосты через ssh, они будут в другой оболочке, я не думаю, что вы могли видеть переменную env, установленную через ‘runCommand’.
Обходным путем может быть добавление команды в профиль bash. например
echo "export https_proxy=http://myproxy.com:myport" >> ~/.bash_profile