2017-04-26 228 views
0

我正在尝试使用Ansible提供多个AWS EC2计算机。我想使“availabilityZone”和“tag_name”为动态。请找到下面的任务。如果我将计数更改为2,我应该可以在不做任何修改的情况下运行相同的任务来创建两个实例。使用Ansible提供多个EC2实例

- name: Provision an instance 
    ec2: 
    key_name: "{{ keyPairName }}" 
    instance_type: m3.medium 
    image: "{{ amiId }}" 
    region: us-east-1 
    zone: us-east-1{{ item.0 }} 
    group_id: "{{ securityGroup }}" 
    vpc_subnet_id: "{{ subnet }}" 
    wait: true 
    count: 1 
    instance_tags: 
     Name: esl-master{{ item.1 }}-{{ deployenv }} 
    register: ec2_master 
    with_together: 
    - [ 'a', 'b', 'c' ] 
    - [ 1, 2, 3 ] 
    when: isMaster 

通过上面的配置,我得到了下面的错误。

failed: [localhost] (item=[u'b', 2]) => {"failed": true, "item": ["b", 2], "msg": "Instance creation failed => InvalidParameterValue: Value (us-east-1b) for parameter availabilityZone is invalid. Subnet 'subnet-f22551d9' is in the availability zone us-east-1a"} 
failed: [localhost] (item=[u'c', 3]) => {"failed": true, "item": ["c", 3], "msg": "Instance creation failed => InvalidParameterValue: Value (us-east-1c) for parameter availabilityZone is invalid. Subnet 'subnet-f22551d9' is in the availability zone us-east-1a"} 

有没有更好的方法做到这一点,因为我想利用'Zone'参数?

回答

0

对于每次迭代,您尝试设置相同的vpc_subnet_id: "{{ subnet }}",并且在第二个和第三个子网ID中已经使用了错误。

您需要使用不同的子网ID,例如,

vpc_subnet_id: "{{ subnet }}{{ item.0 }}" 
+0

谢谢你的回复。在我的情况下,我只有一个子网ID – Vinil

+0

[每个子网必须完全位于一个可用区内,不能跨区域。](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Subnets.html) - - 你能决定你想要什么吗? – techraf

+0

我所希望的是将所有区域和子网信息作为列表或逗号分隔值传递。看起来这个选项不存在。我将不得不经过一个序列。谢谢 – Vinil