본문 바로가기
INFRA/Operation

AWS Ansible 리소스 구성 및 설치

by BTC_지수 2022. 6. 9.

안녕하세요! 하씨가문의 영광입니다

오늘은 AWS에서 Ansible 리소스 구성 및 설치를 해볼건데요!

바로 한번 시작해볼까요?! 레츠고우~~

1. AWS IAM User 생성

root 계정으로 로그인하여 사용하는것은 간편하고 편리해서 좋지만 그만큼 위험이 따른다는점!! 아시죠??

이를 방지하기위해 IAM User 생성과 적절한 권한 부여를 해줍니다.

 

  • AWS 콘솔로 로그인 하여 IAM 접속 후 User 생성

  • 사용자 계정 권한 설정

  • 엑세스 키 ID 및 비밀 엑세스 키 저장
    • 엑셀파일 또는 메모장에 복사해서 저장

2. Ansible을 사용할 가상 머신(EC2) 생성

멋지게 사용자를 만들었으면 이제 Ansible을 사용할 가상 머신을 생성 해볼까요?

  • 이름 : AnsibleMaster
  • 이미지 : Amazon Linux 2 Kernel 5.10 AMI
  • 인스턴스 : t2.micro
  • 네트워크 : 기존 default 보안 그룹 선택(22포트 생성해야함)
  • SSH : 키페어 생성

위의 스펙에 따른 EC2를 하나생성해줍니다.

 

3. Ansible 환경 구성
  • 만들어진 EC2에 접속해줍니다. (PEM 키를 통해)
  • 원격접속은 mobaxterm 을 사용하였습니다.
  • 환경구성
# aws 엔서블 설치 가능하게 설정
[ec2-user@ip-172-31-41-14 ~]$ sudo amazon-linux-extras enable ansible2
# 메타데이터 삭제
[ec2-user@ip-172-31-41-14 ~]$ sudo yum clean metadata
# 엔서블 설치
[ec2-user@ip-172-31-41-14 ~]$ sudo yum install ansible -y
  • AWS 모듈을 사용하려면 pip와 boto를 설치를 해줍니다.
    • 관리자 모드로 입장하여 "vi install.yml" 생성후 아래 코드 입력
---
- hosts: localhost
  become: yes

  tasks:
    - name: install pip
      yum:
        name:
          - python-pip
          - python3-pip
        state: latest

    - name: install boto
      pip:
        name:
          - boto
          - boto3
  • yml 파일의 생성후 "ansible-playbook install.yml" 을 설치를 해줍니다.

4. Credential 값 입력

먼저 AWS 콘솔내 보안 자격 증명에서 액세스 키비밀 액세스 키를 받아 복사해 둡니다.

그리고 export로 키들을 저장해둡니다.

export AWS_ACCESS_KEY_ID="자신의 엑세스 키 ID"
export AWS_SECRET_ACCESS_KEY="자신의 비밀 엑세스 키"

나중에 다시 접속해서 계속 쓰고 싶다면 vi ~/.bashrc를 열어서 두줄을 맨 밑에 추가해주면 됩니다.

 

5. VPC부터 서브넷, 보안 그룹 EC2 생성

이제 vi createVPC_EC2.yml로  vpc를 구성해 EC2를 yaml 파일로 만들어 보겠습니다.

---
- hosts: localhost
  become: yes

  tasks:
    - name: Create VPC
      ec2_vpc_net:
        name: Test VPC
        cidr_block: 10.1.0.0/16
        region: ap-northeast-2
        state: present
      register: vpc_result

    - name: Create Internet Gateway
      ec2_vpc_igw:
        vpc_id: "{{ vpc_result.vpc.id }}"
        region: ap-northeast-2
        state: present
        tags:
          Name: seoul_igw

    - name: Create Public Subnet
      ec2_vpc_subnet:
        cidr: 10.1.0.0/24
        vpc_id: "{{ vpc_result.vpc.id }}"
        region: ap-northeast-2
        az: ap-northeast-2a
        map_public: yes
        state: present
      register: subnet_result

    - name: Create Routing Table
      ec2_vpc_route_table:
        vpc_id: "{{ vpc_result.vpc.id }}"
        region: ap-northeast-2
        state: present
        subnets: ["{{ subnet_result.subnet.id }}"]

    - name: Create Security Group
      ec2_group:
        name: default sg
        vpc_id: "{{ vpc_result.vpc.id }}"
        region: ap-northeast-2
        state: present
        description: allow 22, 80
        tags:
          Name: default sg
        rules:
        - proto: tcp
          ports:
          - 22
          cidr_ip: 0.0.0.0/0
        - proto: tcp
          ports:
          - 80
          cidr_ip: 0.0.0.0/0

    - name: Create seoul EC2 key
      ec2_key:
        name: Testkey
        region: ap-northeast-2
      register: key_result

    - name: Save Private Key
      copy: 
        content: "{{ key_result.key.private_key }}" 
        dest: "/root/.ssh/testkey.pem" 
        mode: 0600
      when: key_result.changed

    - name: Create EC2
      ec2:
        key_name: Testkey
        instance_tags:
          Name: test EC2
        region: ap-northeast-2
        instance_type: t2.micro
        image: ami-0cbec04a61be382d9
        group: default sg
        wait: yes
        count: 1
        vpc_subnet_id: "{{ subnet_result.subnet.id }}"
        assign_public_ip: yes

파일 yaml 파일을 playbook으로 실행 시켜줍니다.

ansible-playbook createVPC_EC2.yml

성공적으로 배포되는것을 알수있습니다.

6. 생성된 리소스 결과 확인

이제 배포한 리소스들이 잘 만들어졌는지 한번 확인해볼까요?

 

  • VPC

 

  • Internet Gateway

 

  • Public subnet

 

  • Routing Table

 

  • EC2 Key

 

  • SSH 키 저장 위치

 

  • EC2

 

7. 리소스 삭제

추가적인 비용이 흘러나가지 않도록 마지막 삭제작업까지 잘 해줘야겠지요?

 

< 삭제 순서 >

1. EC2

2. Key pair

3. Security group

4. VPC

5. IAM 사용자 제거(사용 안한다면)

 

 

(참고자료 : https://honglab.tistory.com/44 )

 

지금까지 AWS 를 사용하여 Ansible 리소스 구성 및 설치 내용을 다루어보았습니다! 

많은 도움이 되기를 바라며 다음 시간에 보도록 하겠습니다~ 

 

댓글