[2] 250909~ 클라우드/[b] 12월 : Terraform + Ansible

[30] Github -> Ansible

서버관리자 페페 2026. 1. 12. 20:26

 

[1]

Terraform -> 서버를 만들기까지

Ansible -> 서버 만든 뒤 셋팅

GitHub Actions -> terraform apply / ansible-playbook 실행

 

-

 

[2]

Github Actions


git push
  ↓
GitHub Actions 실행
  ↓
Terraform apply
  ↓
Inventory 자동 생성
  ↓
Ansible 실행
  ↓
EC2 + nginx 완성

 

-

 

[3]

구성

aws-lab/
├─ terraform/
│  ├─ main.tf
│  └─ outputs.tf
├─ ansible/
│  ├─ playbooks/nginx.yml
│  ├─ inventory.ini (자동 생성)
│  └─ ansible.cfg
├─ .github/
│  └─ workflows/
│     └─ deploy.yml   👈 핵심

 

-

 

[4]

name: Deploy (Terraform + Ansible)

on:
  push:
    branches: ["main"]
  workflow_dispatch:

jobs:
  deploy:
    runs-on: ubuntu-latest

    defaults:
      run:
        shell: bash

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      # Terraform 설치
      - name: Setup Terraform
        uses: hashicorp/setup-terraform@v3
        with:
          terraform_version: 1.6.6

      # AWS 인증 (GitHub Secrets 사용)
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ${{ secrets.AWS_REGION }}

      # SSH PEM 키를 runner에 파일로 생성
      # (Secrets에 EC2_PEM_KEY 라는 이름으로 PEM 전체를 저장해둬야 함)
      - name: Create PEM key file
        run: |
          mkdir -p pem
          echo "${{ secrets.EC2_PEM_KEY }}" > pem/lab-key.pem
          chmod 600 pem/lab-key.pem
          ls -al pem

      # Ansible 설치
      - name: Install Ansible
        run: |
          sudo apt-get update
          sudo apt-get install -y ansible
          ansible --version

      # Terraform 실행 (IaC)
      - name: Terraform Init & Apply
        run: |
          cd terraform
          terraform init
          terraform apply -auto-approve

      # (선택) Terraform output 확인용
      - name: Terraform Output (debug)
        run: |
          cd terraform
          terraform output

      # Inventory 생성 스크립트 실행 (CM 준비)
      - name: Build inventory
        run: |
          chmod +x scripts/make_inventory.sh
          bash scripts/make_inventory.sh
          echo "----- inventory.ini -----"
          cat ansible/inventory.ini || cat inventory.ini

      # Ansible 실행 (CM)
      - name: Run Ansible
        run: |
          cd ansible
          # inventory 위치가 ansible/inventory.ini 라고 가정
          if [ -f inventory.ini ]; then
            ansible-playbook -i inventory.ini playbooks/nginx.yml
          else
            ansible-playbook -i ../inventory.ini playbooks/nginx.yml
          fi

 

-

 

[5]

SSH키 / AWS 자격증명

 

(AWS 자격증명)

Github Secrets에 저장

- AWS_ACCES_KEY_ID

- AWS_SECRET_ACCESS_KEY

 

(SSH PEM KEY)

- Secrets에 넣고

- Actions 실행 중 파일로 생성

- name: Create SSH key
  run: |
    echo "${{ secrets.EC2_PEM }}" > key.pem
    chmod 600 key.pem

-> ansible.cfg에서 그 키 사용

 

'[2] 250909~ 클라우드 > [b] 12월 : Terraform + Ansible' 카테고리의 다른 글

[32] RDS Multi-AZ  (0) 2026.01.26
[31] ALB + ASG  (0) 2026.01.22
[29] Ansible  (0) 2026.01.12
[28] 리소스 참조  (0) 2026.01.09
[27] backend 실제 구현  (0) 2026.01.09