我可以创建一个实例,安装并创建一个AMI。当我想将AMI复制到所有可用区域时,我陷入困境。
类似的东西:
forEach (region in regions):
copy-ami to region
done
我拥有什么:
- 创建实例
- 安装东西
- 根据“创建实例”返回的值创建AMI
- 根据“创建AMI”将AMI复制到所有区域 - (不工作!)
这是正确的方法吗? 我该如何正确地做到这一点?
(我知道这不是正确的方法,试图学习如何做到这一点)
剧本示例:
- hosts: local
connection: local
gather_facts: no
roles:
- { role: copy_ami, ec2_region: [ "ap-south-1" ]}
错误消息:
fatal: [localhost]: FAILED! => {"failed": true, "msg": "'dict object' has no attribute 'region'"}
这个角色是什么样的:
- ec2_ami_copy:
source_region: "{{ item.region }}"
region: "{{ ec2_region }}"
source_image_id: "{{ item.image_id }}"
wait: yes
tags:
Name: "{{ item.tags.Name }}"
description: "{{ item.tags.Name }}"
with_items: "{{ec2_storm_ami}}"
register: ec2_ami_copy
谢谢,
答案 0 :(得分:0)
根据ec2_ami_copy模块的文档。
- ec2_ami_copy:
source_region: us-east-1
region: eu-west-1
source_image_id: ami-xxxxxxx
因为您要复制到多个区域。您可以执行set_fact并在剧本中创建区域列表。使用with_items插件将允许您遍历列表或字典。
- set_fact:
aws_regions:
- us-west-1
- us-west-2
- ec2_ami_copy:
source_region: us-east-1
region: "{{ item }}"
source_image_id: ami-xxxxxxx
with_items: "{{ aws_regions }}"
答案 1 :(得分:0)
整个" with_items" &安培; "寄存器"我花了一些时间来完全理解,特别是在使用多个角色时。
解决方案: Playbook - 包含AWS播放(Create_EC2,安装/配置,AMI和AMI_Copy) 角色 - (如上所述)
我是如何遍历区域的?这比我最初的尝试更容易。 关键是要了解"注册"实际上工作并使用生成的JSON。
变量" ec2_instance"注册为创建实例的一部分,您可以只注册" ec2_instance.instances"并节省一些打字。 (如果你没有使用json的其他部分)
使用注册表示该变量在同一个剧本中的游戏中可用。 (起初对这部分非常困惑)
- debug: var=myvariable
您可以使用数组来表示" with_items"这里。这只是快速和脏。
希望这有助于将来有更多的新手。
最终建议: 使用:{{1}}使用不同的变体以确保获得所需内容,使用-vvvv运行也很有帮助。
答案 2 :(得分:0)
度过了一段艰难的时期,因为复制很容易但是输出很难。我正在为amiid使用var_input,然后在此程序中使用它。我想要一个包含region和ami信息的输出文件。粘贴这个有用的工具,可以帮助那些希望输出打印在某个文件中的人
---
- ec2_ami_copy:
source_region: us-east-1
region: "{{ item }}"
source_image_id: "{{ amiid }}"
encrypted: no
wait: yes
name: "image copied from {{ amiid }} of N.Virginia"
description: "This is working"
with_items:
- us-west-1
- eu-west-1
register: imageid
- name: Debug variables
debug:
msg: "{{ imageid }}"
- name: "Write info to Region-Ami.txt "
lineinfile:
dest: "{{ playbook_dir }}/Region-AMI-Info/Region-Ami.txt"
regexp: "^{{ item.key }}"
line: "{{ item.key }}: {{ '\"' + item.value + '\"' }}"
with_items:
- { key: 'aws_region', value: "{{ imageid.results[0].item }}" }
- { key: 'AMI-ID', value: "{{ imageid.results[0].image_id }}" }
- { key: 'aws_region', value: "{{ imageid.results[1].item }}" }
- { key: 'AMI-ID', value: "{{ imageid.results[1].image_id }}" }