BESPIN Tech Blog
  • Home
  • Tech
    • CSP

      AWS

      GCP

      NCP

      Cloud

      Migration

      LZ, Control Tower

      Backup

      Monitoring

      Container

      Infra

      OS

      Middleware

      Data

      RDB

      Big Data Platform

      Application

      CI/CD

      BESPICK 구독하기 ㅣ 1668-1280

  • Trend
  • IT
최신 리포트 다운로드 지금 바로 문의하기
BESPIN Tech Blog
  • Home
  • Tech
    • CSP

      AWS

      GCP

      NCP

      Cloud

      Migration

      LZ, Control Tower

      Backup

      Monitoring

      Container

      Infra

      OS

      Middleware

      Data

      RDB

      Big Data Platform

      Application

      CI/CD

      BESPICK 구독하기 ㅣ 1668-1280

  • Trend
  • IT
최신 리포트 다운로드 지금 바로 문의하기
BESPIN Tech Blog
BESPIN Tech Blog
  • Tech
    • CSP
      • AWS
      • GCP
      • NCP
    • Cloud
      • Migration
      • LZ, Control Tower
      • Backup
      • Monitoring
      • Container
    • Infra
      • OS
      • Middleware
    • Data
      • RDB
      • Big Data Platform
    • Application
      • CI/CD
  • Trend
  • IT
  • Contact US
Site Reliability Engineering

Ansible로 AWS EC2 컨트롤하기

by 화란 이 2022년 06월 20일
2022년 06월 20일
10

Ansible은 왜 사용할까?

Ansible은 ssh를 이용하는 프로비저닝 자동화 도구입니다. Ansible은 ssh 접속을 통해 수십대, 수백대의 원격 서버에 접속해서 동일한 프로비저닝 작업을 동시에 수행할 수 있는 훌륭한 도구입니다. Ansible의 대표적인 장점이라면 아래와 같이 꼽을 수 있을 것 같습니다.

  • 에이전트가 필요 없음
  • yaml 언어로 쉽게 작성할 수 있는 플레이북
  • python으로 개발됨

Ansible은 원격 서버에 에이전트를 설치하지 않아도 Ansible에서 제공하는 기본 모듈만으로 정말 많은 작업을 수행할 수 있습니다. 그리고 비교적 쉬운 yaml 언어를 사용하기 때문에 Puppet과 같은 다른 도구에 비해 접근성이 매우 높습니다. 또한 python으로 개발되어 있기 때문에 만약 모듈을 직접 만들어서 사용하고 싶을 경우 python으로 쉽게 개발할 수 있는 것도 큰 장점이라고 할 수 있습니다.

인프라 관리에 필수적인 도구로 자리 잡은 Ansible, 그리고 클라우드 서비스의 대표 주자인 AWS가 만나면 어떻게 될까요? 

오늘 글에서는 인프라 관리에서 필수적인 도구로 자리 잡은 Ansible을 통해, 인프라 자원의 핵심인 AWS의 EC2를 관리할 수 있는 방법에 대해서 알아보겠습니다.

ec2_instance 모듈 사용하기

ec2_instance 모듈은 Ansible에서 기본으로 제공하는 amazon.aws 컬렉션 중의 하나로 ansible-galaxy collection list 명령어를 입력하여 확인해볼 수 있습니다. 혹시 별도로 설치해야 할 경우 ansible-galaxy collection install amazon.aws 명령어를 실행하면 됩니다.

이 모듈을 이용하면 EC2 인스턴스를 생성하고 관리할 수 있습니다. 이 모듈을 사용하려면 Ansible을 수행하는 작업 서버에 아래와 같이 설치되어 있어야 합니다.

  • python >= 3.6 
  • boto3 >= 1.15.0 
  • botocore >= 1.18.0 

환경변수를 가져오는 방식

AWS의 자원을 사용하기 위해서는 액세스 키가 필요합니다. 이러한 액세스 키는 외부에 노출되면 안 되기 때문에 보통은 환경변수로 저장하여 사용합니다. Ansible의 aws 모듈도 특별히 키를 지정하지 않을 경우 환경변수에서 해당 정보를 가져오게 되어 있습니다.

cli나 yaml 파일에 변수를 특별히 지정하지 않을 경우 aws 모듈에서 가져오는 환경변수는 아래와 같습니다.

  • AWS_URL, EC2_URL
  • AWS_PROFILE, AWS_DEFAULT_PROFILE
  • AWS_ACCESS_KEY_ID, AWS_ACCESS_KEY, EC2_ACCESS_KEY
  • AWS_SECRET_ACCESS_KEY, AWS_SECRET_KEY, EC2_SECRET_KEY
  • AWS_SECURITY_TOKEN, EC2_SECURITY_TOKEN
  • AWS_REGION, EC2_REGION
  • AWS_CA_BUNDLE

만약 환경변수에 위와 같은 변수들이 정의되어 있지 않을 경우 아래 경로에 저장되어 있는 AWS SDK 구성 파일에도 접근합니다.

  • ~/.aws/credentials

EC2 컨트롤을 위한 플레이북 작성

그럼 이제 실제 운영 환경에서 사용할 수 있는 예를 통해 Ansible의 ec2_instance 모듈을 사용하는 방법을 알아보겠습니다.

아래 예를 먼저 살펴보겠습니다.

- name: 인스턴스 id로 인스턴스 재시작하기
  amazon.aws.ec2_instance:
    state: started
    instance_ids:
      - i-12345678
      - i-12345679
    filters:
      instance-state-name: stopped

위의 예제는 특정 인스턴스를 지정하여 인스턴스를 스타트해주는 yaml 플레이북입니다. 위의 플레이북이 수행되는 원리를 아래와 같이 표현해보면 플레이북을 이해하는 데 도움이 될 수 있을 것 같습니다.

  1. 인스턴스 id가  ‘i-12345678’, ‘i-12345679’인 인스턴스 중에서
  2. ‘instance-state-name’이 ‘stopped’인 인스턴스를 선택하여
  3. 인스턴스의 ‘state’를 ‘started’로 변경

타겟 인스턴스 지정하기

예제에서는 두 가지 방법을 통해 어떤 인스턴스를 컨트롤할 건지 지정해줬습니다. 첫 번째는 인스턴스 id를 통해, 두 번째는 instance-state-name: stopped 필터링을 통해서입니다.

이와 같이 타겟이 되는 인스턴스를 선택하는 방법으로는 id를 지정하는 방법과 filters 변수를 사용하여 다양한 인스턴스 상태와 정보로 필터링을 하는 방법이 있습니다. 어떠한 상태와 정보를 필터링 조건으로 사용할 수 있는지는 아래 링크에서 확인할 수 있습니다.

  • AWS EC2 – DescribeInstances

인스턴스 상태 변경하기

인스턴스의 작동 상태는 state: started 라인을 추가하여 수행해주었습니다. ec2_instance 모듈을 이용하여 변경할 수 있는 인스턴스의 작동 상태는 아래와 같습니다.

  • state=present
    • 인스턴스가 존재하는지 확인하며, 인스턴스의 상태를 변경하지는 않는다.
  • state=running
    • state=present 기능 + 인스턴스를 running 상태로 변경한다.
  • state=started
    • state=present 기능 + wait=true 조건이 있을 경우 상태 체크가 ok 될 때까지 기다린다.
  • state=stopped
    • 인스턴스를 stopped 상태로 변경한다.
  • state=rebooted
    • 인스턴스를 stopped 상태로 변경 후 즉시 running 상태로 변경한다.
  • state=restarted
    • 인스턴스를 stopped 상태로 변경 후 즉시 started 상태로 변경한다.
  • state=terminated
    • 인스턴스를 terminated 상태로 변경한다.
  • state=absent
    • state=terminated와 동일한 기능을 한다.

마치며

오늘은 간단한 예제를 통해 EC2 인스턴스를 컨트롤하는 방법을 알아봤습니다. 이 모듈을 사용하면 인스턴스 상태 변경 뿐만 아니라 공인 ip 할당, EBS 추가, cpu 옵션 지정 등 상황에 따라 다양한 활용이 가능합니다. 본 모듈 관련 Ansible 공식 문서를 보시면 더 많은 예제를 확인할 수 있습니다.

관련

데브옵스DevOpsaws ec2ansibleec2 instanceansible playbookansible yamlansible awsansible ec2ansible instanceansible moduleaws 환경변수앤서블 데브옵스앤서블 aws

HOT Trend

Recent Posts

  • 딜로이트도, 맥킨지도, 베스핀글로벌도: AI 에이전트로 일 바꾸는 시대

    2025년 07월 04일 클라우드베스핀글로벌clouddata데이터AI인공지능HelpNow AIbespinglobalAI에이전트helpnow업무자동화딜로이트
  • ⚔️데이터센터에서 시작된 전쟁? 요즘 뜨는 AIDC 개념부터 트렌드까지!

    2025년 06월 27일 클라우드clouddata데이터AI데이터센터클라우드 데이터센터bespinglobalAIDCAI 인프라베스핀글로벌
  • 구글부터 엔비디아까지, 빅테크 기업들의 AI 전략 최신본📖

    2025년 06월 20일 cloud베스핀글로벌클라우드data데이터AI구글마이크로소프트엔비디아AI에이전트google I/ONVIDIA GTC 2025Microsoft build 2025
  • AI를 연결한다고? 업계가 주목하는 ‘MCP’ 알아보기🔍

    2025년 06월 13일 베스핀글로벌클라우드cloudAIMCP
  • [WhaTap] RDS Failover/Reboot 관제 2 – RDS Failover

    2025년 05월 30일 RDSRDS FailoverRebootFailoverbespin global

베스핀글로벌은 모든 기업의 AI 혁신을 실현하기 위해, 세상에서 가장 혁신적이고 자동화된 AI 서비스와 솔루션을 만들어갑니다.
상호 : 베스핀글로벌 주식회사 ㅣ 대표자명 : 김써니, 허양호 ㅣ 사업자등록증번호 : 638-87-00223 ㅣ 통신판매번호 : 2019-서울서초-0347 ㅣ 대표전화 : 1668-1280
사업장주소지 : 서울특별시 서초구 강남대로 327, 13,14,15,16층(서초동,대륭서초타워) ㅣ 이메일 : info@bespinglobal.com ㅣ 개인정보 처리방침 ㅣ 개인정보 처리방침 안내

© 2026 BESPIN GLOBAL, All Rights Reserved.

BESPINGLOBAL
패밀리 사이트
China MEA SEA US

BESPIN Tech Blog
  • Home
  • Tech
    • CSP

      AWS

      GCP

      NCP

      Cloud

      Migration

      LZ, Control Tower

      Backup

      Monitoring

      Container

      Infra

      OS

      Middleware

      Data

      RDB

      Big Data Platform

      Application

      CI/CD

      BESPICK 구독하기 ㅣ 1668-1280

  • Trend
  • IT