![Ansible을 사용하여 EC2 인스턴스를 생성할 수 없습니다](https://linux55.com/image/126989/Ansible%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20EC2%20%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4%EB%A5%BC%20%EC%83%9D%EC%84%B1%ED%95%A0%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4.png)
- name: Create VPC
ec2_vpc_net:
name: arunvpc
cidr_block: 10.4.0.0/16
region: ap-northeast-1
aws_access_key: "{{ aws_access_key }}"
aws_secret_key: "{{ aws_secret_key }}"
state: "present"
register: my_vpc
- name: saving vpc id
set_fact:
vpc_id: "{{ my_vpc.vpc.id }}"
- name: creating subnet
ec2_vpc_subnet:
state: present
vpc_id: "{{ vpc_id }}"
cidr: 10.4.0.0/24
region: ap-northeast-1
aws_access_key: "{{ aws_access_key }}"
aws_secret_key: "{{ aws_secret_key }}"
resource_tags:
name: "arun_subnet"
register: my_subnet
- name: saving subnet id
set_fact:
sub_id: "{{ my_subnet.subnet.id }}"
- name: creating security group
ec2_group:
name: my_security_group
description: security
vpc_id: "{{ vpc_id }}"
region: ap-northeast-1
aws_access_key: "{{ aws_access_key }}"
aws_secret_key: "{{ aws_secret_key }}"
rules:
- proto: tcp
from_port: 22
to_port: 22
cidr_ip: 0.0.0.0/0
- name: creating linux vm
ec2:
key_name: my_key
group: my_security_group
instance_type: m1.small
image: ami-775e4f16
instance_tags:
Name: arunlinux
wait: yes
region: ap-northeast-1
count: 1
vpc_subnet_id: "{{ sub_id }}"
assign_public_ip: yes
register: ec2_out
이 플레이북을 실행하는 동안 다음 오류가 발생합니다.
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [vpc : Create VPC] ********************************************************
ok: [localhost]
TASK [vpc : saving vpc id] *****************************************************
ok: [localhost]
TASK [vpc : creating subnet] ***************************************************
ok: [localhost]
TASK [vpc : saving subnet id] **************************************************
ok: [localhost]
TASK [vpc : creating security group] *******************************************
ok: [localhost]
TASK [vpc : creating linux vm] *************************************************
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: AttributeError: 'module' object has no attribute 'ProfileNotFoundError'
fatal: [localhost]: FAILED! => {"changed": false, "module_stderr": "Traceback (most recent call last):\n File \"/tmp/ansible_9UtXSg/ansible_module_ec2.py\", line 1725, in <module>\n main()\n File \"/tmp/ansible_9UtXSg/ansible_module_ec2.py\", line 1673, in main\n ec2 = ec2_connect(module)\n File \"/tmp/ansible_9UtXSg/ansible_modlib.zip/ansible/module_utils/ec2.py\", line 320, in ec2_connect\nAttributeError: 'module' object has no attribute 'ProfileNotFoundError'\n", "module_stdout": "", "msg": "MODULE FAILURE", "rc": 0}
to retry, use: --limit @/playbooks/aws/main.retry
PLAY RECAP *********************************************************************
localhost : ok=6 changed=0 unreachable=0 failed=1
참고: 키 쌍이 이미 존재합니다. 클라이언트는 CentOS 7 시스템입니다.
답변1
"Linux 가상 머신 생성" 작업을 설정하지 않았습니다 aws_access_key
.aws_secret_key
제 생각에는 Ansible Vault가 아닌 Ansible에 자격 증명을 저장하는 것은 좋지 않은 생각입니다. 별도의 셸 파일에 저장하고 플레이북을 실행하기 전에 사용하는 것이 가장 좋습니다. 예를 들면 다음과 같습니다.
자격 증명이 포함된 파일 aws_testing_profile.sh
:
export AWS_ACCESS_KEY_ID=''
export AWS_SECRET_ACCESS_KEY=''
스크립트를 실행합니다:
source aws_testing_profile.sh
ansible-playbook -i inventory/testing/ my_playbook.yml
물론 자격 증명을 에 남겨둘 수 있지만 ~/.aws/credentials
실행하는 모든 명령에는 확인 없이 AWS 권한이 부여되기 때문에 마음에 들지 않습니다.