2015-10-27 3 views
1

Я пытаюсь создать экземпляр 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 и т. Д.

+0

Возможно, учетные данные, которые вы используете в ~/.boto, не совпадают с данными в ~/.aws/credentials – helloV

+0

Это то же самое, дважды проверил это сейчас - снова. Я не получаю «401», как только я удалю подсеть из playbook. – Raghu

+0

Хорошо, проверьте различия между моим файлом ~/.aws/credentials и .boto. Это отсутствовало в boto, aws_security_token. Никогда не думал, что это понадобится, поскольку я уже передавал доступ и секретные ключи. Я предполагаю, что это необходимо, мне предоставляется часть доступа к группе организаций? Я добавил это, и теперь он работает. Спасибо @helloV за то, что заставил меня снова проверить различия с вами :-) – Raghu

ответ

1

Этого не было в boto, aws_security_token. Никогда не думал, что это понадобится, поскольку я уже передавал доступ и секретные ключи. Думаю, это необходимо, поскольку мне предоставляется часть доступа к группе организаций? Я добавил это, и теперь он работает. Спасибо @helloV за то, что заставил меня снова проверить различия с вами :-)

Смежные вопросы