Basic Issues¶
secgroup is only available for vpc
vpc or subnetid is necessary to create ec2 instance
‘{{secgroup.name}}’ doesn’t work even though it is defined from http://docs.ansible.com/ansible/ec2_group_module.html Did I something wrong?
group_id works!:
31 group_id: "{{secgroup_first.group_id}}"
VPC & Subnet¶
- manually added from portal website for those
Additional Files e.g. ec2.ini or ec2.py for dynamic inventory¶
aws_access_key_id
and aws_secret_key
need to be defined in the ec2.ini
file.
additionally, rds
and elasticache
need to be set False:
rds = False
elasticache = False
Performance Measurement¶
Time lapse can be measured by callback functions defined in ansible.cfg
[defaults]
callback_whitelist = profile_tasks
Sample results:
$ ansible-playbook play.yml -i ec2.py -vvv
Using /home/lee212/git/aws-cloudformation-by-ansible/ansible.cfg as config file
PLAYBOOK: play.yml *************************************************************
1 plays in play.yml
PLAY [create a test instance] **************************************************
TASK [Create security group] ***************************************************
task path: /home/lee212/git/aws-cloudformation-by-ansible/play.yml:5
Wednesday 14 September 2016 00:22:33 -0400 (0:00:00.019) 0:00:00.019 ***
<127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: lee212
<127.0.0.1> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo $HOME/.ansible/tmp/ansible-tmp-1473826953.12-47283165924615 `" && echo ansible-tmp-1473826953.12-47283165924615="` echo $HOME/.ansible/tmp/ansible-tmp-1473826953.12-47283165924615 `" ) && sleep 0'
<127.0.0.1> PUT /tmp/tmpvNc7Ff TO /home/lee212/.ansible/tmp/ansible-tmp-1473826953.12-47283165924615/ec2_group
<127.0.0.1> EXEC /bin/sh -c 'LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 /home/lee212/venv/ansible/bin/python /home/lee212/.ansible/tmp/ansible-tmp-1473826953.12-47283165924615/ec2_group; rm -rf "/home/lee212/.ansible/tmp/ansible-tmp-1473826953.12-47283165924615/" > /dev/null 2>&1 && sleep 0'
ok: [localhost] => {"changed": false, "group_id": "sg-692c4d13", "invocation": {"module_args": {"aws_access_key": null, "aws_secret_key": null, "description": "A Security group", "ec2_url": null, "name": "security-group-test", "profile": null, "purge_rules": true, "purge_rules_egress": true, "region": "us-east-1", "rules": [{"cidr_ip": "0.0.0.0/0", "from_port": 22, "proto": "tcp", "to_port": 22}], "rules_egress": [{"cidr_ip": "0.0.0.0/0", "from_port": null, "group_desc": "example of ec2 secgroup", "proto": -1, "to_port": null}], "security_token": null, "state": "present", "validate_certs": true, "vpc_id": "vpc-e6c17c83"}, "module_name": "ec2_group"}}
TASK [ec2 launch test] *********************************************************
task path: /home/lee212/git/aws-cloudformation-by-ansible/play.yml:22
Wednesday 14 September 2016 00:22:33 -0400 (0:00:00.552) 0:00:00.571 ***
<127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: lee212
<127.0.0.1> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo $HOME/.ansible/tmp/ansible-tmp-1473826953.7-216570325713589 `" && echo ansible-tmp-1473826953.7-216570325713589="` echo $HOME/.ansible/tmp/ansible-tmp-1473826953.7-216570325713589 `" ) && sleep 0'
<127.0.0.1> PUT /tmp/tmpnwiErZ TO /home/lee212/.ansible/tmp/ansible-tmp-1473826953.7-216570325713589/ec2
<127.0.0.1> EXEC /bin/sh -c 'LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 /home/lee212/venv/ansible/bin/python /home/lee212/.ansible/tmp/ansible-tmp-1473826953.7-216570325713589/ec2; rm -rf "/home/lee212/.ansible/tmp/ansible-tmp-1473826953.7-216570325713589/" > /dev/null 2>&1 && sleep 0'
changed: [localhost] => {"changed": true, "instance_ids": ["i-f7364c0f"], "instances": [{"ami_launch_index": "0", "architecture": "x86_64", "block_device_mapping": {"/dev/sda1": {"delete_on_termination": true, "status": "attached", "volume_id": "vol-f678e477"}}, "dns_name": "", "ebs_optimized": false, "groups": {"sg-692c4d13": "security-group-test"}, "hypervisor": "xen", "id": "i-f7364c0f", "image_id": "ami-2d39803a", "instance_type": "t2.micro", "kernel": null, "key_name": "hrlee", "launch_time": "2016-09-14T04:22:34.000Z", "placement": "us-east-1a", "private_dns_name": "ip-172-30-3-157.ec2.internal", "private_ip": "172.30.3.157", "public_dns_name": "", "public_ip": "54.197.111.173", "ramdisk": null, "region": "us-east-1", "root_device_name": "/dev/sda1", "root_device_type": "ebs", "state": "running", "state_code": 16, "tags": {}, "tenancy": "default", "virtualization_type": "hvm"}], "invocation": {"module_args": {"assign_public_ip": true, "aws_access_key": null, "aws_secret_key": null, "count": 1, "count_tag": null, "ebs_optimized": false, "ec2_url": null, "exact_count": null, "group": null, "group_id": ["sg-692c4d13"], "id": null, "image": "ami-2d39803a", "instance_ids": null, "instance_profile_name": null, "instance_tags": null, "instance_type": "t2.micro", "kernel": null, "key_name": "hrlee", "monitoring": false, "network_interfaces": null, "placement_group": null, "private_ip": null, "profile": null, "ramdisk": null, "region": "us-east-1", "security_token": null, "source_dest_check": true, "spot_launch_group": null, "spot_price": null, "spot_type": "one-time", "spot_wait_timeout": "600", "state": "present", "tenancy": "default", "termination_protection": false, "user_data": null, "validate_certs": true, "volumes": null, "vpc_subnet_id": "subnet-719a774d", "wait": true, "wait_timeout": "300", "zone": null}, "module_name": "ec2"}, "tagged_instances": []}
TASK [Add new instance to host group] ******************************************
task path: /home/lee212/git/aws-cloudformation-by-ansible/play.yml:35
Wednesday 14 September 2016 00:22:55 -0400 (0:00:22.170) 0:00:22.741 ***
creating host via 'add_host': hostname=54.197.111.173
changed: [localhost] => (item={u'kernel': None, u'root_device_type': u'ebs', u'private_dns_name': u'ip-172-30-3-157.ec2.internal', u'public_ip': u'54.197.111.173', u'private_ip': u'172.30.3.157', u'id': u'i-f7364c0f', u'ebs_optimized': False, u'state': u'running', u'virtualization_type': u'hvm', u'architecture': u'x86_64', u'ramdisk': None, u'block_device_mapping': {u'/dev/sda1': {u'status': u'attached', u'delete_on_termination': True, u'volume_id': u'vol-f678e477'}}, u'key_name': u'hrlee', u'image_id': u'ami-2d39803a', u'tenancy': u'default', u'groups': {u'sg-692c4d13': u'security-group-test'}, u'public_dns_name': u'', u'state_code': 16, u'tags': {}, u'placement': u'us-east-1a', u'ami_launch_index': u'0', u'dns_name': u'', u'region': u'us-east-1', u'launch_time': u'2016-09-14T04:22:34.000Z', u'instance_type': u't2.micro', u'root_device_name': u'/dev/sda1', u'hypervisor': u'xen'}) => {"add_host": {"groups": ["launched"], "host_name": "54.197.111.173", "host_vars": {}}, "changed": true, "invocation": {"module_args": {"groupname": "launched", "hostname": "54.197.111.173"}, "module_name": "add_host"}, "item": {"ami_launch_index": "0", "architecture": "x86_64", "block_device_mapping": {"/dev/sda1": {"delete_on_termination": true, "status": "attached", "volume_id": "vol-f678e477"}}, "dns_name": "", "ebs_optimized": false, "groups": {"sg-692c4d13": "security-group-test"}, "hypervisor": "xen", "id": "i-f7364c0f", "image_id": "ami-2d39803a", "instance_type": "t2.micro", "kernel": null, "key_name": "hrlee", "launch_time": "2016-09-14T04:22:34.000Z", "placement": "us-east-1a", "private_dns_name": "ip-172-30-3-157.ec2.internal", "private_ip": "172.30.3.157", "public_dns_name": "", "public_ip": "54.197.111.173", "ramdisk": null, "region": "us-east-1", "root_device_name": "/dev/sda1", "root_device_type": "ebs", "state": "running", "state_code": 16, "tags": {}, "tenancy": "default", "virtualization_type": "hvm"}}
TASK [Wait for SSH to come up] *************************************************
task path: /home/lee212/git/aws-cloudformation-by-ansible/play.yml:38
Wednesday 14 September 2016 00:22:55 -0400 (0:00:00.035) 0:00:22.776 ***
<127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: lee212
<127.0.0.1> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo $HOME/.ansible/tmp/ansible-tmp-1473826975.89-214245185864373 `" && echo ansible-tmp-1473826975.89-214245185864373="` echo $HOME/.ansible/tmp/ansible-tmp-1473826975.89-214245185864373 `" ) && sleep 0'
<127.0.0.1> PUT /tmp/tmp2vGL53 TO /home/lee212/.ansible/tmp/ansible-tmp-1473826975.89-214245185864373/wait_for
<127.0.0.1> EXEC /bin/sh -c 'LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 /home/lee212/venv/ansible/bin/python /home/lee212/.ansible/tmp/ansible-tmp-1473826975.89-214245185864373/wait_for; rm -rf "/home/lee212/.ansible/tmp/ansible-tmp-1473826975.89-214245185864373/" > /dev/null 2>&1 && sleep 0'
ok: [localhost] => (item={u'kernel': None, u'root_device_type': u'ebs', u'private_dns_name': u'ip-172-30-3-157.ec2.internal', u'public_ip': u'54.197.111.173', u'private_ip': u'172.30.3.157', u'id': u'i-f7364c0f', u'ebs_optimized': False, u'state': u'running', u'virtualization_type': u'hvm', u'architecture': u'x86_64', u'ramdisk': None, u'block_device_mapping': {u'/dev/sda1': {u'status': u'attached', u'delete_on_termination': True, u'volume_id': u'vol-f678e477'}}, u'key_name': u'hrlee', u'image_id': u'ami-2d39803a', u'tenancy': u'default', u'groups': {u'sg-692c4d13': u'security-group-test'}, u'public_dns_name': u'', u'state_code': 16, u'tags': {}, u'placement': u'us-east-1a', u'ami_launch_index': u'0', u'dns_name': u'', u'region': u'us-east-1', u'launch_time': u'2016-09-14T04:22:34.000Z', u'instance_type': u't2.micro', u'root_device_name': u'/dev/sda1', u'hypervisor': u'xen'}) => {"changed": false, "elapsed": 60, "invocation": {"module_args": {"connect_timeout": 5, "delay": 60, "exclude_hosts": null, "host": "54.197.111.173", "path": null, "port": 22, "search_regex": null, "state": "started", "timeout": 320}, "module_name": "wait_for"}, "item": {"ami_launch_index": "0", "architecture": "x86_64", "block_device_mapping": {"/dev/sda1": {"delete_on_termination": true, "status": "attached", "volume_id": "vol-f678e477"}}, "dns_name": "", "ebs_optimized": false, "groups": {"sg-692c4d13": "security-group-test"}, "hypervisor": "xen", "id": "i-f7364c0f", "image_id": "ami-2d39803a", "instance_type": "t2.micro", "kernel": null, "key_name": "hrlee", "launch_time": "2016-09-14T04:22:34.000Z", "placement": "us-east-1a", "private_dns_name": "ip-172-30-3-157.ec2.internal", "private_ip": "172.30.3.157", "public_dns_name": "", "public_ip": "54.197.111.173", "ramdisk": null, "region": "us-east-1", "root_device_name": "/dev/sda1", "root_device_type": "ebs", "state": "running", "state_code": 16, "tags": {}, "tenancy": "default", "virtualization_type": "hvm"}, "path": null, "port": 22, "search_regex": null, "state": "started"}
PLAY RECAP *********************************************************************
localhost : ok=4 changed=2 unreachable=0 failed=0
Wednesday 14 September 2016 00:23:56 -0400 (0:01:00.194) 0:01:22.971 ***
===============================================================================
Wait for SSH to come up ------------------------------------------------ 60.19s
/home/lee212/git/aws-cloudformation-by-ansible/play.yml:38 --------------------
ec2 launch test -------------------------------------------------------- 22.17s
/home/lee212/git/aws-cloudformation-by-ansible/play.yml:22 --------------------
Create security group --------------------------------------------------- 0.55s
/home/lee212/git/aws-cloudformation-by-ansible/play.yml:5 ---------------------
Add new instance to host group ------------------------------------------ 0.04s
/home/lee212/git/aws-cloudformation-by-ansible/play.yml:35 --------------------
ec2.py¶
ec2.py --list
option displays cached data. Try with --refresh
for update.
$ ./ec2.py --list
{
"_meta": {
"hostvars": {
"54.197.206.131": {
"ansible_ssh_host": "54.197.206.131",
"ec2__in_monitoring_element": false,
"ec2_ami_launch_index": "0",
"ec2_architecture": "x86_64",
"ec2_client_token": "",
"ec2_dns_name": "",
"ec2_ebs_optimized": false,
"ec2_eventsSet": "",
"ec2_group_name": "",
"ec2_hypervisor": "xen",
"ec2_id": "i-b4a8d24c",
"ec2_image_id": "ami-2d39803a",
"ec2_instance_profile": "",
"ec2_instance_type": "t2.micro",
"ec2_ip_address": "54.197.206.131",
"ec2_item": "",
"ec2_kernel": "",
"ec2_key_name": "hrlee",
"ec2_launch_time": "2016-09-14T14:52:55.000Z",
"ec2_monitored": false,
"ec2_monitoring": "",
"ec2_monitoring_state": "disabled",
"ec2_persistent": false,
"ec2_placement": "us-east-1a",
"ec2_platform": "",
"ec2_previous_state": "",
"ec2_previous_state_code": 0,
"ec2_private_dns_name": "ip-172-30-3-230.ec2.internal",
"ec2_private_ip_address": "172.30.3.230",
"ec2_public_dns_name": "",
"ec2_ramdisk": "",
"ec2_reason": "",
"ec2_region": "us-east-1",
"ec2_requester_id": "",
"ec2_root_device_name": "/dev/sda1",
"ec2_root_device_type": "ebs",
"ec2_security_group_ids": "sg-692c4d13",
"ec2_security_group_names": "security-group-test",
"ec2_sourceDestCheck": "true",
"ec2_spot_instance_request_id": "",
"ec2_state": "running",
"ec2_state_code": 16,
"ec2_state_reason": "",
"ec2_subnet_id": "subnet-719a774d",
"ec2_virtualization_type": "hvm",
"ec2_vpc_id": "vpc-e6c17c83"
}
}
},
"ami_2d39803a": [
"54.197.206.131"
],
"ec2": [
"54.197.206.131"
],
"i-b4a8d24c": [
"54.197.206.131"
],
"key_hrlee": [
"54.197.206.131"
],
"security_group_security_group_test": [
"54.197.206.131"
],
"tag_none": [
"54.197.206.131"
],
"type_t2_micro": [
"54.197.206.131"
],
"us-east-1": [
"54.197.206.131"
],
"us-east-1a": [
"54.197.206.131"
],
"vpc_id_vpc_e6c17c83": [
"54.197.206.131"
]
}
You can compare with aws ec2 results:
$ aws ec2 describe-instances
{
"Reservations": [
{
"OwnerId": "461335111454",
"ReservationId": "r-233f22da",
"Groups": [],
"Instances": [
{
"Monitoring": {
"State": "disabled"
},
"PublicDnsName": "",
"State": {
"Code": 16,
"Name": "running"
},
"EbsOptimized": false,
"LaunchTime": "2016-09-14T14:52:55.000Z",
"PublicIpAddress": "54.197.206.131",
"PrivateIpAddress": "172.30.3.230",
"ProductCodes": [],
"VpcId": "vpc-e6c17c83",
"StateTransitionReason": "",
"InstanceId": "i-b4a8d24c",
"ImageId": "ami-2d39803a",
"PrivateDnsName": "ip-172-30-3-230.ec2.internal",
"KeyName": "hrlee",
"SecurityGroups": [
{
"GroupName": "security-group-test",
"GroupId": "sg-692c4d13"
}
],
"ClientToken": "",
"SubnetId": "subnet-719a774d",
"InstanceType": "t2.micro",
"NetworkInterfaces": [
{
"Status": "in-use",
"MacAddress": "06:a5:49:cf:87:a1",
"SourceDestCheck": true,
"VpcId": "vpc-e6c17c83",
"Description": "",
"Association": {
"PublicIp": "54.197.206.131",
"PublicDnsName": "",
"IpOwnerId": "amazon"
},
"NetworkInterfaceId": "eni-8ae97085",
"PrivateIpAddresses": [
{
"Association": {
"PublicIp": "54.197.206.131",
"PublicDnsName": "",
"IpOwnerId": "amazon"
},
"Primary": true,
"PrivateIpAddress": "172.30.3.230"
}
],
"Attachment": {
"Status": "attached",
"DeviceIndex": 0,
"DeleteOnTermination": true,
"AttachmentId": "eni-attach-4243efba",
"AttachTime": "2016-09-14T14:52:55.000Z"
},
"Groups": [
{
"GroupName": "security-group-test",
"GroupId": "sg-692c4d13"
}
],
"SubnetId": "subnet-719a774d",
"OwnerId": "461335111454",
"PrivateIpAddress": "172.30.3.230"
}
],
"SourceDestCheck": true,
"Placement": {
"Tenancy": "default",
"GroupName": "",
"AvailabilityZone": "us-east-1a"
},
"Hypervisor": "xen",
"BlockDeviceMappings": [
{
"DeviceName": "/dev/sda1",
"Ebs": {
"Status": "attached",
"DeleteOnTermination": true,
"VolumeId": "vol-21e37ca0",
"AttachTime": "2016-09-14T14:52:56.000Z"
}
}
],
"Architecture": "x86_64",
"RootDeviceType": "ebs",
"RootDeviceName": "/dev/sda1",
"VirtualizationType": "hvm",
"AmiLaunchIndex": 0
}
]
}
]
}