这是设置:
有一个Master-Worker架构,通过Ansible从Master内部进行编排。创建Workers的代码如下:
- name: Provisioning Spot instaces
ec2:
assign_public_ip: no
spot_price: "{{ ondemand4_price }}"
spot_wait_timeout: 300
assign_public_ip: no
aws_access_key: "{{ assumed_role.sts_creds.access_key }}"
aws_secret_key: "{{ assumed_role.sts_creds.secret_key }}"
security_token: "{{ assumed_role.sts_creds.session_token }}"
region: "{{ aws_region }}"
image: "{{ image_instance }}"
instance_type: "{{ large_instance }}"
key_name: "{{ ssh_keyname }}"
count: "{{ ninstances }}"
state: present
group_id: "{{ priv_sg }}"
vpc_subnet_id: "{{ subnet_id }}"
instance_profile_name: 'ML-Ansible'
wait: true
instance_tags:
Name: Worker
#delete_on_termination: yes
register: ec2
ignore_errors: True
因此,使用配置文件名称(/ role)创建了Worker实例' ML-Ansible'其中包含所有必要的权限。
但是,在尝试执行AWS shell命令(aws cloudwatch put-metric-data ...
)时,它会返回以下错误:
"stderr": "\nAn error occurred (InvalidClientTokenId) when calling the PutMetricData operation: The security token included in the request is invalid.",
我们最近轮换了所有凭据。因此,我们有一套新的aws_access_key_id
和aws_secret_access_key
因此,当我查看我的~/.aws/credentials
文件时,即使今天运行Ansible文件,它也包含上一组凭据。
为什么会这样?还需要在相应的IAM配置文件中进行任何更改吗?
答案 0 :(得分:1)
如果您拥有~/.aws/credentials
的凭据,那么很可能是在创建AMI之前将它们放在那里,现在它们被用于启动工作人员的AMI。
如果您使用自己的AMI(而不是AWS提供的AMI),请在删除凭据后尝试重新创建它。