Я пытаюсь создать экземпляр EC2 с помощью ansible. Если я попробую это без подсети (и группы безопасности по умолчанию), она отлично работает и создает EC2. Но этого я не хочу. Я хочу создать экземпляр с использованием определенного «sg» и использовать уже существующую подсеть (определенную моей организацией).Невозможно создать EC2, когда подсеть используется через Ansible (то же самое работает через AWS-CLI)
Такая же подсеть и 'sg' отлично работают при использовании AWS-CLI (и через консоль), тот же профиль, то же изображение, тот же ключ и тот же тип экземпляра. Он создает экземпляр под моей подсети и назначает sg, переданный в команде - Perfect !! Можем ли мы исключить здесь проблемы с доступом/ролью (как работает CLI/console)? Если да, то какая еще проблема может быть с Ansible/boto?
AWS CLI:
aws ec2 run-instances --image-id ami-3d4--count 1 --instance-type t2.large --region us-east-1 --key-name MyKeyNameHere --security-group-ids sg-766b1234 --subnet-id subnet-09871234 --profile MyProfileNameHere
Вот сборник пьес.
- name: Provision an EC2 node
hosts: local
connection: local
gather_facts: false
tags: provisioning
vars:
instance_type: t2.large
image: ami-3d4
group_id: sg-766b1234
region: us-east-1
keypair: MyKeyNameHere
vpc_subnet_id: subnet-09871234
tasks:
- name: Launch new Instance
local_action: ec2 instance_tags="Name=MyInstance"
instance_type={{ instance_type}}
image={{ image }}
wait=true
group_id={{ group_id }}
profile=MyProfileNameHere
region={{ region }}
vpc_subnet_id={{ vpc_subnet_id }}
keypair={{ keypair }}
register: ec2
А вот ошибка, не знаю, почему 401 раз (получил это раньше, когда профиль не был упомянут в сборник пьес). Я уверен, что доступ и секретные ключи верны, потому что я могу создать с помощью sg по умолчанию.
vpc_id = vpc.get_all_subnets(subnet_ids=[vpc_subnet_id])[0].vpc_id
File "/Library/Python/2.7/site-packages/boto-2.38.0-py2.7.egg/boto/vpc/__init__.py", line 1153, in get_all_subnets
return self.get_list('DescribeSubnets', params, [('item', Subnet)])
File "/Library/Python/2.7/site-packages/boto-2.38.0-py2.7.egg/boto/connection.py", line 1186, in get_list
raise self.ResponseError(response.status, response.reason, body)
boto.exception.EC2ResponseError: EC2ResponseError: 401 Unauthorized
<?xml version="1.0" encoding="UTF-8"?>
<Response><Errors><Error><Code>AuthFailure</Code><Message>AWS was not able to validate the provided access credentials</Message></Error></Errors><RequestID>6182f17d-f62e-4d57-b351-3498dc8a53b7</RequestID></Response>
И у меня есть ключ доступа и информация секретного ключа в файле ~/.boto. Просто aws_access_key_id и aws_secret_access_key. Нет информации о роли IAM и т. Д.
Возможно, учетные данные, которые вы используете в ~/.boto, не совпадают с данными в ~/.aws/credentials – helloV
Это то же самое, дважды проверил это сейчас - снова. Я не получаю «401», как только я удалю подсеть из playbook. – Raghu
Хорошо, проверьте различия между моим файлом ~/.aws/credentials и .boto. Это отсутствовало в boto, aws_security_token. Никогда не думал, что это понадобится, поскольку я уже передавал доступ и секретные ключи. Я предполагаю, что это необходимо, мне предоставляется часть доступа к группе организаций? Я добавил это, и теперь он работает. Спасибо @helloV за то, что заставил меня снова проверить различия с вами :-) – Raghu