Atlantis
Terraform Pull Request Automation - Running Terraform Workflows with Ease - Link Github Blog
실습 따라하기
AWS EC2 생성 : atlantis 서버 역할
# CloudFormation yaml 파일 다운로드
# CloudFormation 스택 배포
MYKEYNAME=<각자 자신의 AWS EC2 서울 리전 Keypair 이름>
MYKEYNAME=kp-gasida
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]:
#
terraform version
#
git version
#
ls -l
./atlantis version
공인 IP 혹은 도메인 노출 설정
Atlantis needs to be accessible somewhere that github.com/gitlab.com/bitbucket.org or your GitHub/GitLab Enterprise installation can reach.
One way to accomplish this is with ngrok, a tool that forwards your local port to a random public hostname.
# URL 변수 지정
URL="http://$(curl -s ipinfo.io/ip):4141"
echo $URL
집에서 자신의 PC에 Atlantis 설치 후 사용 시에는, (iptime) 공유기에 tcp 4141 포트 포워딩 설정
Git Repo (Private) 생성
Git Token 생성 - Docs
Github → Settings → Developer settings ⇒ Personal access tokens : Tokens (classic) ← Repo 제한 가능 Fine-grained tokens 사용 권장
Create an access token for Atlantis
We recommend using a dedicated CI user or creating a new user named @atlantis that performs all API actions, however for testing, you can use your own user.
Here we'll create the access token that Atlantis uses to comment on the pull request and set commit statuses.
GitHub or GitHub Enterprise Access Token
- Create a Personal Access Token
- create a token with repo scope
- set the token as an environment variable
TOKEN="{YOUR_TOKEN}"
Create a webhook secret so Atlantis can validate webhooks - See Creating a Webhook Secret
Create a Webhook Secret
# Create a random string of any length (you can use random.org) and set an environment variable:
SECRET="{YOUR_RANDOM_STRING}"
Add Webhook
Take the URL that ngrok output and create a webhook in your GitHub, GitLab or Bitbucket repo:
GitHub or GitHub Enterprise Webhook
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/gasida/t101-cicd"
# ex. REPO_ALLOWLIST="github.com/runatlantis/atlantis"
# If you're using Bitbucket Server, $YOUR_GIT_HOST will be the domain name of your
# server without scheme or port and $YOUR_USERNAME will be the name of the **project** the repo
# is under, **not the key** of the project.
Now you can start Atlantis. The exact command differs depending on your Git host:
#
URL="http://$(curl -s ipinfo.io/ip):4141"
USERNAME=gasida
TOKEN='###'
SECRET='###'
REPO_ALLOWLIST="github.com/gasida/t101-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
짠
작업1: null 프로바이더
Local 에서 Git 코드 작업
# git clone
git clone https://github.com/gasida/t101-cicd && cd t101-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
Github(Create a pull request) → Atlantis 확인
[신규 터미널] 서버 모니터링
watch -d tree .atlantis/
Compare & pull request 클릭
아래와 같이 실행된다
Plan 자동 수행 확인 → 하단 plan Details 클릭 확인
Add a comment
#
atlantis help
# 그냥 해보자 ㅎㅎ
cat /etc/passwd
Add a comment ⇒ apply 결과 화면 확인
# 뻘짓 해보자
atlantis apply -d . && cat /etc/passwd
#
atlantis plan -d .
atlantis apply -d .
Merge pull request → Confirm merge
Local Git
#
git checkout main
ls
git pull
ls
cat main.tf
작업2
: aws iam user 생성
AWS S3 버킷 생성 : Terraform Backend State 저장용도
#
aws s3 ls
#
aws s3 mb s3://<각자 유일한 S3 버킷명 이름> --region ap-northeast-2
aws s3 mb s3://gasida-t101 --region ap-northeast-2
#
aws s3 ls
Local 에서 Git 코드 작업
# 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 = "gasida-t101"
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
Add a comment ⇒ apply 결과 화면 확인
#
atlantis plan -d iam
# 아래 명령???
atlantis destroy -d iam
#
atlantis apply -d iam
확인
작업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 = "<각자 자신의 S3 버킷 이름>"
key = "terraform.tfstate"
region = "ap-northeast-2"
}
}
----------
terraform {
backend "s3" {
bucket = "gasida-t101"
key = "terraform.tfstate"
region = "ap-northeast-2"
}
}
----------
# add commit push
git add main.tf && git commit -m "add main.tf" && git push origin deleteiam
Add a comment ⇒ apply 결과 화면 확인
atlantis apply -d deleteiam
Merge pull request → Confirm merge
# repos 에 디렉터리 삭제
watch -d tree .atlantis/
Local Git
#
git checkout main && git pull && cd .. && tree
'study > T101 4기' 카테고리의 다른 글
T101 4기 7주차 두번째 (0) | 2024.07.27 |
---|---|
T101 4기 7주차 첫번째 (0) | 2024.07.21 |
T101 4기 5주차 첫번째 (0) | 2024.07.07 |
T101 4기 4주차 두번째 (0) | 2024.07.06 |
T101 4기 4주차 첫번째 (0) | 2024.06.30 |