수색…


비고

example-2 : 이것은 예제로 제공되므로 복사 / 지나치지 마십시오. 대신 사용자의 필요에 맞게 변수를 사용자 정의해야합니다. ansible_key, 보안 그룹 규칙 등.

example-1 : ssh strict 호스트 키 검사를 사용하지 않으려면 작업을 자동화 할 때 원하지 않는 동작을 우리는 ansible.cfg 파일에서 noansible.cfg 합니다. 예 : StrictHostKeyChecking=no

ec2.py 파일은 특정 영역, 특정 태그 등으로 프로젝트의 범위를 제한하려는 경우 사용자 정의해야하는 구성 파일 인 ec2.ini 를 기반으로 AWS 자원을 실행하고 반환하는 python 스크립트입니다 ...

공식 Amazon AMI에서 EC2 인스턴스를 시작하여 수정하고 새로운 AMI로 저장하는 방법

AWS EC2 인스턴스를 프로비저닝 할 때 Anatile를 사용할 때 매우 일반적인 워크 플로입니다. 이 게시물은 Anabilities에 대한 기본적인 이해를 전제로하며 가장 중요한 것은 AWS에 연결하도록 올바르게 구성했다고 가정합니다.

Anipal 공식 문서에서 주장하는 것처럼 우리는 다음 네 가지 역할을 수행 할 것입니다.

1- ami_find 를 사용하여 EC2 인스턴스를 시작할 AMID 를 얻습니다.

2- ec2_ami_creation 을 사용하면 EC2 인스턴스를 효과적으로 시작할 수 있습니다.

인스턴스를 수정하기위한 3 - code_deploy ; 이것은 아무것도 될 수 없으므로 파일을 대상 시스템으로 간단히 전송합니다.

4 build_ami 를 사용하여 실행중인 ec2 인스턴스를 기반으로 새 이미지를 빌드하십시오. 이 게시물은 귀하가 Ansible 프로젝트의 최상위 레벨에 있다고 가정합니다 : my_ansible_project

첫 번째 역할 : ami_find

cd my_ansible_project/roles && ansible-galaxy init ami_find

이 역할에서 우리는 ec2_ami_find 모듈을 사용하려고합니다. 예를 들어, 우분투 시스템을 검색하여 ami_id (ami-xxxxxxxx)를 얻습니다. 이제 my_ansible_project/roles/ami_find/tasks/main.yml 파일을 my_ansible_project/roles/ami_find/tasks/main.yml 하십시오.

---
- ec2_ami_find:
    name: "ubuntu/images/hvm-ssd/ubuntu-trusty-14.04-amd64-server-*"
    sort: name
    sort_order: descending
    sort_end: 1
    region: "{{ aws_region }}"
  register: ami_find
- set_fact: ami_ubuntu="{{ ami_find.results[0].ami_id }}"

두 번째 역할 : ec2_ami_creation

여기서는 첫 번째 역할에서 얻은 ami_id 를 사용하고 ami_id 기반으로 새 인스턴스를 시작합니다.

cd my_ansible_project/roles && ansible-galaxy init ec2_ami_creation

이 역할에서 가장 중요한 ec2_module 을 사용하여 인스턴스를 시작합니다. 이제 my_ansible_project/roles/ec2_ami_creation/tasks/main.yml 파일을 my_ansible_project/roles/ec2_ami_creation/tasks/main.yml 하십시오.

---
- ec2_vpc_subnet_facts:
    region: "{{aws_region}}"
  register: vpc
- name: creation of security group of the ec2 instance
  ec2_group:
    name: example
    description: an example EC2 group
    region: "{{ aws_region }}"
    rules:
      - proto: tcp
        from_port: 22
        to_port: 22
        cidr_ip: 0.0.0.0/0
    state: present
  register: ec2_sg

- name: create instance using Ansible
  ec2:
    key_name: "{{ ansible_key }}"
    group: example
    vpc_subnet_id: "{{vpc.subnets[0].id}}"
    instance_type: "{{ instance_type }}"
    ec2_region: "{{ aws_region }}"
    image: "{{ base_image }}"
    assign_public_ip: yes
    wait: yes
  register: ec2

- set_fact: id={{ec2.instances[0].id}}

- name: adding the newly created instance to a temporary group in order to access it later from another play
  add_host: name={{ item.public_ip }} groups=just_created
  with_items: ec2.instances

- name: Wait for SSH to come up
  wait_for: host={{ item.public_dns_name }} port=22 delay=10 timeout=640 state=started
  with_items: ec2.instances

세 번째 역할 : code_deploy

여기서는 just_created 라는 그룹에 추가 된이 인스턴스를 제공합니다.

cd my_ansible_project/roles && ansible-galaxy init code_deploy

이 역할에서는 template_module 을 사용하여 파일 을 전송하고 여기에 시스템 호스트 이름을 씁니다. 이제 my_ansible_project/roles/code_deploy/tasks/main.yml 파일을 my_ansible_project/roles/code_deploy/tasks/main.yml 하십시오.

---
- template: src=my_file.txt.j2 dest=/etc/my_file.txt

당신의 역할 내의 템플릿 폴더로 이동하십시오 :

cd my_ansible_project/roles/templates 다음을 포함하는 my_file.txt.j2 파일을 추가하십시오.

my name is {{ ansible_hostname }}` 

네 번째 역할 : build_ami

이제 ec2_ami 모듈을 사용하여 실행중인 인스턴스의 이미지를 만듭니다. 프로젝트 폴더로 이동하여 다음 작업을 수행하십시오.

 cd my_ansible_project/roles && ansible-galaxy init build_ami

이제 my_ansible_project/roles/build_ami/tasks/main.yml 파일을 my_ansible_project/roles/build_ami/tasks/main.yml 하십시오.

---
- ec2_ami:
    instance_id: "{{ instance_id }}"
    wait: yes
    name: Base_Image

자, 저는이 모든 역할을 어떻게 조정할 것인지 궁금해하신 것 같아요. 내가 맞습니까? 그렇다면 계속 읽으십시오.

우리는 3 개의 연극으로 구성된 플레이 북을 작성합니다 : localhost 적용 가능한 첫 번째 플레이는 just_created 그룹에 적용되는 두 번째 역할을 처음 두 가지 역할로 호출합니다. 마지막 역할은 localhost 적용됩니다. 왜 localhost 인가? 일부 AWS 자원을 관리 하고자 할 때 우리는 로컬 시스템을 사용합니다. 다음으로 변수를 넣을 vars 파일 인 ansible_key , aws_region 등을 사용할 것입니다.

프로젝트 상단에 인프라 폴더를 만들고 aws.yml 이라는 파일을 추가하십시오.

---
aws_region: ap-southeast-2
ansible_key: ansible
instance_type: t2.small

그래서 당신의 프로젝트의 맨 위에 build_base_image.yml 을 만들고 이것을 추가하십시오 :

---
   - hosts: localhost
     connection: local
     gather_facts: False
     vars_files:
       - infrastructure/aws.yml
     roles:
       - ami_find
       - { role: ec2_creation, base_image: "{{ ami_ubuntu }}"}

   - hosts: just_created
     connection: ssh
     gather_facts: True
     become: yes
     become_method: sudo
     roles:
       - code_deploy

   - hosts: localhost
     connection: local
     gather_facts: False
     vars_files:
       - infrastructure/aws.yml
     roles:
       - { role: new_image, instance_id: "{{ id }}"}

그거야, 이것을 테스트 한 후에 자원을 삭제하는 것을 잊어 버리거나 실행중인 인스턴스를 삭제하는 역할을 생성하지 않는 것이 좋습니다 :-)

Amazon Web Services에 연결할 수 있도록 적절하게 구성하는 방법

위아래로 확장되는 AWS 리소스를 관리하면 정적 인벤토리 호스트 파일의 한계에 도달하므로 동적 인 것이 필요합니다. 이것이 동적 재고 목록 입니다. 시작하자:

ec2.iniec2.py 파일을 프로젝트 폴더에 다운로드하십시오.

cd my_ansible_project 
wget https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/ec2.py    
wget https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/ec2.ini

작업이 끝나면 ec2.py 파일을 실행 가능하게 만듭니다.

chmod +x ec2.py

이제 AWS Secret 및 Access 키를 환경 변수로 내 보냅니다.

export AWS_ACCESS_KEY_ID='ABCDEFGHIJKLM'
export AWS_SECRET_ACCESS_KEY='NOPQRSTUVWXYZ'

ec2.py 스크립트를 사용하려면 Python AWS SDK, boto 가 필요하므로 설치해야합니다.

sudo pip install boto

모든 것이 좋은지 테스트하려면 리소스를 나열하여 ec2.py 를 실행 해보십시오.

./ec2.py --list

비슷한 것을 볼 수 있습니다 :

{
  "_meta": {
    "hostvars": {}
  }
}

이제 정적 호스트 파일과 함께 동적 인벤토리를 사용하려고합니다. 먼저 inventory 라는 폴더를 만들고 ec2.py , ec2.inihosts 파일을 추가 한 다음 ec2.py 에 해당 폴더를 인벤토리 파일로 사용하도록 지시합니다.

mkdir inventory 
mv ec2.py inventory/ec2.py
mv ec2.ini inventory/ec2.ini
mv hosts inventory/hosts

다음으로 우리는 프로젝트 폴더에 ansible.cfg 라고 불리는 Ansible 설정 파일을 만들고 이것을 추가하여 ansible.cfg 대한 프로젝트 레벨 설정을 정의해야합니다 :

[defaults]
hostfile = inventory
[ssh_connection]
pipelining = False
ssh_args = -o ControlMaster=auto -o ControlPersist=30m -o StrictHostKeyChecking=no

다음으로 우리는 EC2 인스턴스에 대한 액세스를 인증하기 위해 SSH 키를 사용하도록 Ansible을 구성해야합니다. SSH 에이전트를 사용하면 키를보다 쉽게 ​​관리 할 수 ​​있으므로 리소스를 인증하는 가장 좋은 방법입니다.

ssh-agent bash 
ssh-add ~/.ssh/keypair.pem  

그게 다야! 이것을 따라했다면 ping 모듈 을 사용하여 테스트 한 다음 pong으로 응답하는 키를 사용하도록 실행중인 인스턴스를 볼 수 있습니다.

ansible -m ping all
11.22.33.44 | success >> {
    "changed": false, 
    "ping": "pong"
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow