所以我试图在aws上的ec2实例上运行ansible,这是第一次在一个新的实例上,但每次我尝试运行一个游戏时我都无法解决这个错误信息:
PLAY [localhost]
**************************************************************
TASK: [make one instance]
*****************************************************
failed: [localhost] => {"failed": true} msg: No handler was ready to
authenticate. 1 handlers were checked. ['HmacAuthV4Handler'] Check
your credentials
FATAL: all hosts have already failed -- aborting
PLAY RECAP
********************************************************************
to retry, use: --limit @/home/ubuntu/ans_test.retry
localhost : ok=0 changed=0 unreachable=0
failed=1
我认为我的IAM用户和群组中的权限可能有问题。我已经给了我的IAM用户和组ReadOnlyAccess,AdministratorAccess和PowerUserAccess。我有一个访问ID和秘密访问密钥,我使用命令设置为环境变量:
export AWS_ACCESS_KEY_ID='AK123'
export AWS_SECRET_ACCESS_KEY='abc123'
用'AK123'和'abc123'替换为我的实际ID和键值。为了让ansible ec2任务有效,还需要做些什么呢?
更新:
我解决了这个问题,我想我并没有真正了解环境变量是什么。我通过在ec2任务中设置我的aws_access_key和aws_secret_key来修复它,下面是我的工作剧本
- hosts: localhost
connection: local
gather_facts: False
tasks:
#this task creates 5 ec2 instances that are all named demo and are copies of the image specified
- name: Provision a set of instances
ec2:
aws_access_key: .....
aws_secret_key: ....
key_name: .....
group: .....
instance_type: t2.micro
image: ......
region: us-east-1
ec2_url: .......
wait: true
exact_count: 5
count_tag:
Name: Demo
instance_tags:
Name: Demo
register: ec2
我想现在我需要开始使用ansible保险库来保存我的密钥和ID。
答案 0 :(得分:11)
对于遇到此问题的人,您可以通过在剧本中设置become/sudo: False
和connection: local
来解决此问题。
---
- hosts: localhost
connection: local
become: False
tasks:
...
...
希望这会有所帮助。
答案 1 :(得分:3)
我解决了这个问题,我想我并没有真正了解环境变量是什么。我通过在ec2任务中设置我的aws_access_key和aws_secret_key来修复它,下面是我的工作剧本
- hosts: localhost
connection: local
gather_facts: False
tasks:
#this task creates 5 ec2 instances that are all named demo and are copies of the image specified
- name: Provision a set of instances
ec2:
aws_access_key: .....
aws_secret_key: ....
key_name: .....
group: .....
instance_type: t2.micro
image: ......
region: us-east-1
ec2_url: .......
wait: true
exact_count: 5
count_tag:
Name: Demo
instance_tags:
Name: Demo
register: ec2
我想现在我需要开始使用ansible保险库来保存我的密钥和ID。
答案 2 :(得分:2)
在我的情况下,变量必须是引号(单引号或双引号无关紧要)。
BAD:
export AWS_ACCESS_KEY_ID=AK123
export AWS_SECRET_ACCESS_KEY=abc123
GOOD:
export AWS_ACCESS_KEY_ID='AK123'
export AWS_SECRET_ACCESS_KEY='abc123'
GOOD:
export AWS_ACCESS_KEY_ID="AK123"
export AWS_SECRET_ACCESS_KEY="abc123"
答案 3 :(得分:0)
值得一提的是,ec2 模块使用了包 True
,而有一个更新的模块 ec2_instance,它使用了 boto
。
显然,这两个包/版本检测凭据或其环境的方式存在差异。我还没有找到使 boto3
模块在 ECS 容器内工作的解决方案,很可能是因为在 boto 的最后一个版本发布时 ECS 并不存在,因此它没有检测“实例”的能力配置文件”的 ECS 容器。使用 ec2
即可开箱即用,无需任何额外配置。
答案 4 :(得分:-2)
该解决方案在Ansible doc上有详细记录 http://docs.ansible.com/ansible/guide_aws.html