
[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 |