Невозможно пометить тома EBS с помощью сценария bash UserData - PullRequest
0 голосов
/ 04 апреля 2019

Я пытался пометить тома EBS, прикрепленные к экземплярам EC2, в разделе пользовательских данных CloudFormation.Вот моя первая попытка:

Пример 1:

AWS_INSTANCE_ID=`curl -s http://169.254.169.254/latest/meta-data/instance-id`
ROOT_DISK_ID=`aws ec2 describe-volumes \
  --filter Name=attachment.instance-id,Values="${AWS_INSTANCE_ID}" \
  --query "Volumes[].VolumeId" --region us-east-1 --out text`
aws ec2 create-tags --resources "${ROOT_DISK_ID}" \
  --tags 'Key=VolumeTagName,Value=VolumeTagValue' --region us-east-1

Это привело к ошибке Template format error: Unresolved resource dependencies [AWS_INSTANCE_ID, ROOT_DISK_ID] in the Resources block of the template.

В посте, с которым я столкнулся, упоминалось, что использование ! при вызове переменной в скрипте Cloudformation UserData поможет обойти это, поэтому теперь это выглядит так:

Пример 2:

AWS_INSTANCE_ID=`curl -s http://169.254.169.254/latest/meta-data/instance-id`
ROOT_DISK_ID=`aws ec2 describe-volumes \
  --filter Name=attachment.instance-id,Values="${!AWS_INSTANCE_ID}" \
  --query "Volumes[].VolumeId" --region us-east-1 --out text`
aws ec2 create-tags --resources "${!ROOT_DISK_ID}" \
  --tags 'Key=VolumeTagName,Value=VolumeTagValue' --region us-east-1

Это позволяет обойти эту ошибку, но теги на томе, присоединенном к экземпляру, запущенному с этим шаблоном, не отображаются.Если я ssh в экземпляр и запускаю Пример 1 , он работает просто отлично. Пример 2 не дает мне ошибок для работы.

Что я делаю неправильно в bash, что характерно для Cloudformation?

1 Ответ

0 голосов
/ 12 апреля 2019

Если я правильно понимаю, вы пытаетесь создать свой скрипт с использованием облачной информации, а затем выполнить его при запуске экземпляра ec2. Используя yaml, это мой раздел userdata:

UserData: !Base64
        Fn::Join:
          - ''
          - - "#!/bin/bash -xe \n"
            - "cat << 'EOF' > /home/ec2-user/script.sh \n"
            - "AWS_INSTANCE_ID=`curl -s http://169.254.169.254/latest/meta-data/instance-id`\n"
            - "ROOT_DISK_ID=`aws ec2 describe-volumes "
            - "--filter Name=attachment.instance-id,Values=\"${AWS_INSTANCE_ID}\" "
            - "--query \"Volumes[*].[VolumeId]\" --region eu-west-1 --out text`\n"
            - "aws ec2 create-tags --resources \"${ROOT_DISK_ID}\" "
            - "--tags 'Key=MyAutoTagName,Value=MyAutoTagValue' --region eu-west-1\n"
            - "EOF\n"
            - "chmod +x /home/ec2-user/script.sh\n"
            - "/home/ec2-user/script.sh\n"

Я изменил регион из-за региона, который я использую.

Если я просматриваю содержимое моего файла script.sh, я получаю следующее:

AWS_INSTANCE_ID=`curl -s http://169.254.169.254/latest/meta-data/instance-id`
ROOT_DISK_ID=`aws ec2 describe-volumes --filter Name=attachment.instance-id,Values="${AWS_INSTANCE_ID}" --query "Volumes[*].[VolumeId]" --region eu-west-1 --out text`
aws ec2 create-tags --resources "${ROOT_DISK_ID}" --tags 'Key=MyAutoTagName,Value=MyAutoTagValue' --region eu-west-1

Единственное отличие, которое я вижу, это ваши " тома []. [VolumeId] *", я не уверен, как выглядит ваш раздел пользовательских данных, так что это может быть проблемы с побегом. Используя мой раздел UserData выше, тег был создан, как только экземпляр был запущен, и раздел userdata запустился.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...