해당 내용은 cloudNet@ 팀의 가시다 님이 진행하는 테라폼 스터디 T101 4기에서 실습한 내용을 정리한 것입니다.
Atlantis
설치가이드
- 테라폼 설정이 Atlantis 요구사항을 충족하는지 확인
https://www.runatlantis.io/docs/requirements
- Git host 에 대한 액세스 자격 증명을 만든다. (Github, Gitlab 등 )
- 개인(또는 회사) 인프라에 Atlantis 서버 배포
- Atlantis가 pull 요청에 응답할 수 있는 Webhook을 git host 에 구성한다.
- Atlantis가 실제로 Terraform Command를 실행할 수 있는 Provider 자격증명을 세팅한다.
- 예제코드
- cloudformation 실행 전 aws ec2 콘솔에서 keypair 생성
- key pair 경로를 ~/.ssh 로 복사
- chmod 600 kp-smlim.pem. --> 권한 변경하지 않으면 에러 발생.
- Atlantis 서버 용 EC2 배포
Cloudformation yaml 파일
# CloudFormation yaml 파일 다운로드 : 위 노션 파일 클릭 후 다운 로드
# CloudFormation 스택 배포
MYKEYNAME=<각자 자신의 AWS EC2 서울 리전 Keypair 이름>
MYKEYNAME=kp-smlim
aws cloudformation deploy --template-file t101-atlantis-ec2.yaml --stack-name t101 --parameter-overrides KeyName=$MYKEYNAME SgIngressSshCidr=$(curl -s ipinfo.io/ip)/32 --region ap-northeast-2
# [모니터링] CloudFormation 스택 상태
while true; do
date
AWS_PAGER="" aws cloudformation list-stacks \
--stack-status-filter CREATE_IN_PROGRESS CREATE_COMPLETE CREATE_FAILED DELETE_IN_PROGRESS DELETE_FAILED \
--query "StackSummaries[*].{StackName:StackName, StackStatus:StackStatus}" \
--output table
sleep 1
done
# EC2 공인 IP 확인
aws cloudformation describe-stacks --stack-name t101 --query 'Stacks[*].Outputs[0].OutputValue' --output text
- AWS EC2 ssh 접속 : 기본정보 확인
# ubuntu EC2에 SSH 접속
ssh -i ~/.ssh/kp-gasida.pem ubuntu@$(aws cloudformation describe-stacks --stack-name t101 --query 'Stacks[*].Outputs[0].OutputValue' --output text)
---------------------------
# 계정 확인
whoami
# aws 자격증명 설정 : (옵션) IAM profile로 설정 -> 단 이경우 tf 파일에 설정 필요
aws --version
aws configure
AWS Access Key ID [None]: ####
AWS Secret Access Key [None]: ####
Default region name [None]: ap-northeast-2
Default output format [None]:
# aws 자격증명 확인
aws s3 ls
# 테라폼 버전 확인
terraform version
#
git version
#
ls -l
./atlantis version
- 실습 Github 레포지토리 생성
- git Token 생성
- profile - setting - develper setting - Personal access tokens - tokens(classic)
- check repo
- Atlantis Server 에서 TOKEN="{Your Token}" 환경변수 설정
- Webhook secret 생성
- 최소 24 characters
- random passwd 생성 기능 사용 ( 실습 시 )
- Atlantis server 환경변수 SECRET="{your_random_string}"
- Webhook 설정
- payload URL = Atlantis Server IP + /path
- ex) http://43.203.232.130:4141/events
- Content type = application/json
- secret 은 위에서 설정한 webhook secret
- SSL verification -> Disable
- webhook trigger -> let me select individual events
- Issue comments
- Pull request reviews
- Pushes
- Pull requests
- payload URL = Atlantis Server IP + /path
- START Atlantis
USERNAME="{the username of your GitHub, GitLab or Bitbucket user}"
REPO_ALLOWLIST="$YOUR_GIT_HOST/$YOUR_USERNAME/$YOUR_REPO"
REPO_ALLOWLIST="github.com/3feet-lim/t1014-cicd"
#
URL="http://$(curl -s ipinfo.io/ip):4141"
USERNAME=3feet-lim
TOKEN='###'
SECRET='###'
REPO_ALLOWLIST="github.com/3feet-lim/t1014-cicd"
# 변수 설정 확인
echo $URL $USERNAME $TOKEN $SECRET $REPO_ALLOWLIST
# Atlantis 서버 실행
./atlantis server \
--atlantis-url="$URL" \
--gh-user="$USERNAME" \
--gh-token="$TOKEN" \
--gh-webhook-secret="$SECRET" \
--repo-allowlist="$REPO_ALLOWLIST"
# [신규 터미널] 기본 tcp 4141 포트 오픈
ss -tnlp
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 *:4141 *:* users:(("atlantis",pid=2089,fd=7))
...
# 웹 접속 확인
URL="http://$(curl -s ipinfo.io/ip):4141"
echo $URL
http://3.38.213.238:4141
- http:{Atlantis Server IP}:4141 로 접속하면 서버가 잘 실행됐는지 확인할 수 있다.
예제 작업1 : null 프로바이더
- local 에서 git 코드 작업
# git clone
git clone https://github.com/3feet-lim/t1014-cicd.git && cd t1014-cicd && tree
# feature branch 생성
git branch test && git checkout test && git branch
# main.tf 파일 작성
echo 'resource "null_resource" "example" {}' > main.tf
# add commit push
git add main.tf && git commit -m "add main.tf" && git push origin test
# 새 탭에서
watch -d tree .atlantis/
예제 작업 2: aws iam user 생성
- aws s3 버킷 생성
AWS S3 버킷 생성 : Terraform Backend State 저장용도
#
aws s3 ls
#
aws s3 mb s3://<각자 유일한 S3 버킷명 이름> --region ap-northeast-2
aws s3 mb s3://smlim-t1014 --region ap-northeast-2
#
aws s3 ls
- local 에서 git 코드 작업 및 push
# feature branch 생성
git branch iam && git checkout iam && git branch
# 디렉터리 생성
mkdir iam && cd iam
# main.tf 파일 작성
vi main.tf
----------
terraform {
backend "s3" {
bucket = "<각자 자신의 S3 버킷 이름>"
key = "terraform.tfstate"
region = "ap-northeast-2"
}
}
resource "aws_iam_user" "myuser" {
name = "t101user"
}
----------
terraform {
backend "s3" {
bucket = "smlim-t1014"
key = "terraform.tfstate"
region = "ap-northeast-2"
}
}
resource "aws_iam_user" "myuser" {
name = "t101user"
}
----------
# add commit push
git add main.tf && git commit -m "add main.tf" && git push origin iam
- Github(Create a pull request) -> Atlantis 확인
- Compare & pull request 클릭
- Create pull request : title ( create iam user )
- Plan 자동 수행 확인 → 하단 plan Details 클릭 확인
- 서버 모니터링
watch -d tree .atlantis/
.atlantis/
.........
└── repos
└── 3feet-lim
└── t1014-cicd
└── 3
└── default
├── README.md
├── default.tfplan
├── iam
│ ├── default.tfplan
│ └── main.tf
├── main.tf
└── variable.tf
# Github Repo 코드를 가져 온 것을 확인
cat .atlantis/repos/$USERNAME/t101-cicd/2/default/iam/main.tf
- aws s3 버킷 확인
aws s3 ls s3://$BUCKET
- add comment
atlantis plan -d iam
# 아래 명령???
atlantis destroy -d iam
#
atlantis apply -d iam
- aws s3 버킷 확인
- (Github에서) Merge pull request → Confirm merge
- Local git
#
git checkout main
git pull
cd ..
tree
작업3: 작업 2에서 생성한 리소스 삭제
- Local 에서 git 코드 작업
# feature branch 생성
git branch deleteiam && git checkout deleteiam && git branch
# 디렉터리 생성
mkdir deleteiam && cd deleteiam
# main.tf 파일 작성
vi main.tf
----------
terraform {
backend "s3" {
bucket = "smlim-t1014"
key = "terraform.tfstate"
region = "ap-northeast-2"
}
}
----------
# add commit push
git add main.tf && git commit -m "add main.tf" && git push origin deleteiam
- Github(Create a pull request) → Atlantis 확인
- Compare & pull request 클릭
- Create pull request : title ( delete iam user )
- Plan 자동 수행 확인 → 하단 plan Details 클릭 확인
- 서버 모니터링
watch -d tree .atlantis/
# Github Repo 코드를 가져 온 것을 확인
cat .atlantis/repos/$USERNAME/t101-cicd/4/default/deleteiam/main.tf
- add comment
atlantis apply -d deleteiam
- aws s3 확인
aws s3 ls s3://smlim-t1014
- Merge pull request → Confirm merge
- Local git
실습 자원 삭제
- CMD 작업
aws cloudformation delete-stack --stack-name t101
aws s3 rm s3://smlim-t1014 --recursive
aws s3 rb s3://smlim-t1014
- github repository 삭제
- github token 삭제
- 로컬 GitHub 코드 삭제
'DevOps' 카테고리의 다른 글
[T1014-실습] Terraform 으로 AWS EKS 배포하기 (0) | 2024.07.24 |
---|---|
[T1014-이론] EKS? Kubernetes? Karpenter? Helm? ArgoCD? (1) | 2024.07.24 |
[T1014-이론] 6장 Module (0) | 2024.07.10 |
[T1014-실습] Terraform Backend: AWS S3 + DynamoDB (0) | 2024.07.07 |
[T1014-이론] 5장 State (0) | 2024.07.07 |