프롤로그
사전 준비 내용이라서 그냥 넘어갈려고 했는데, 나중에 무조건 또 쓸 일 있을까봐 일단 먼저 정리해놓고...천천히 진도 나가볼 생각이다.
ZSH, Oh-my-zsh, AWS, aws version, terraform, AWS IAM 생성
Terraform이란?
테라폼은 인프라를 코드(IaC)의 원칙을 사용하여 관리하는 오픈소스 도구이다. AWS 설정이라던지 아니면 뭐 우리가 만들어놓은 객체들을 그냥 전부 코드로 만들어서 관리하겠다. 이거이다.
2024.12.28 - [DevOps] - [DevOps] 데브옵스란?
여기 글에 간단하게 정리해두었다.
Terraform 주요 용어
1. Provider
테라폼이 리소스를 관리할 수 있게 해주는 클라우드 서비스나 플랫폼이다. AWS, Azure, Google Cloud, VMware 등을 포함한 다양한 프로바이더가 있다.
2. Resource
리소스는 테라폼을 사용해 관리할 수 있는 실제 인프라 구성요소이다. 네트워크, 로드 밸런서, 인스턴스 등 실제로 생성할 인프라 자원을 의미한다.
3. output
인프라를 프로비저닝 한 후에 생성된 자원을 output 부분으로 뽑을 수 있다. 그니까 결과물이라고 보면 된다.
4. backend
테라폼의 상태를 저장할 공간을 지정하는 부분이다. AWS S3가 있다.
5. module
일종의 함수라고 보면 된다. 이게 제일 중요한 개념이다. 재사용 가능한 구성으로 캡슐화 한 것이다.
6. State
테라폼은 terraform.tfstate 파일에 인프라의 현재 상태를 저장한다. 이 상태 파일은 테라폼이 인프라를 어떻게 변경해야하는지 결정하는데 사용되며, 실제 인프라와 설정 파일 간의 동기화를 유지하는 데 필수적이다.
지금 이걸 본다고 하더라도 모른다. 실습하면서 알아야한다.
Terraform 작동원리
1. 코드 작성
로컬에서 코드를 작성한다. HCL(HashiCorp Configuration Language)을 사용하여 인프라를 정의하는 코드를 작성한다. 사용자가 원하는 인프라의 최종 상태를 선언적으로 기술한다.
2. 초기화
terraform init 명령어를 통해 테라폼 프로젝트를 초기화 한다. 이때 필요한 모듈 설정, 백엔드 구성을 초기화 한다. 백엔드는 tf파일을 가지고 저장하고 공유하는데 사용한다.
3. 계획생성
terraform plan 명령을 실행하여 테라폼은 현재 인프라 상태와 사용자가 작성한 코드를 비교한다.
테라폼은 인프라에 어떤 변경이 필요한지 계산하고, 추가, 변경 또는 삭제할 리소스를 사용자에게 보여준다.
4. 번경 적용
사용자가 계획을 검토하고 승인하면 terraform apply 명령을 사용하여 계획된 변경사항을 실제 인프라에 적용한다.
5. 상태 관리
terraform.tfstate 파일을 사용하여 인프라의 상태를 추적한다. 실제 인프라의 현재 구성을 반영하며, 테라폼이 미래의 변경 사항을 계획하고 적용하는데 중요한 역할을 한다.
6. 파괴
이제 안 쓸 때 terraform destory 명령어를 사용하여 제거한다.
정리를 하자면
개발자가 코드를 짜고, terraform plan을 통해서 확인해보고 terraform apply를 적용해서 aws 실제 인프라에 적용을 시키고, 그 상태들이 백엔드에 저장이 되어있는데 백엔드와 aws 실제 인프라를 100^ 일치시키는 것이다.
그래서 이제 테라폼을 직접 써보면서 확인을 해볼것인데 밑에 순서대로 진행한다.
zsh 와 oh-my-zsh 설치하기
Mac
brew install zsh
그 다음
chsh -s /bin/zsh
그리고 테마를 바꿔주자.
sudo nano ~/.zshrc
를 들어가서
저기에 맥북같은 경우에는 ZSH_THEME 부분을
ZSH_THEME="agnoster"
로 설정해주었다.
그러면
맥북 테마는
이렇게 설정 완료
리눅스
일단 aws를 통해서 우분투를 설치하고 진행할 떄, 비밀번호가 설정되어있지 않다.
비밀번호 부터 설정하려면
sudo passwd ubuntu
이를 통해서 비밀번호를 설정한 후에 진행하였다.
sudo apt install zsh
zsh셸을 이용하기 위해서
chsh -s /bin/zsh
그 다음 얘도 테마를 바꿔주기 위해
sudo vim ~/.zshrc
해서
아까 ZSH_THEME를
ys로 바꿔주었다.
최종적으로 source ~/.zshrc하면
테마 설정까지 완료
AWS CLI 설치
AWS CLI (Command Line Interface)는 Amazon Web Services를 관리할 수 있는 도구이다. 사용자는 이 커맨드 라인 도구를 사용하여 AWS 서비스를 프로그래밍 방식으로 제어할 수 있다. 막 EC2 인스턴스 시직, 중지, 이런 것들이 프로그래밍 즉 스크립트로 가능하다.
Mac
https://awscli.amazonaws.com/AWSCLIV2.pkg
맥은 여기서 설치한다.
설치후에
aws --version
하면 설치가 된 것이다.
Linux
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
하고
aws --version
하면
aws cli가 설치가 되었다.
Terraform 설치하기
테라폼(Terraform)은 인프라를 코드로 관리하고 자동화하는 도구이며, HashiCorp에서 개발하였다. Go언어로 개발되었으며 컴파일을 진행시 딱 실행파일 하나만 나온다.
IaC라는 개념 저번에도 얘기했는데, 코드로 저런것들을 관리할 때 테라폼을 많이 사용한다.
Mac
brew install terraform
terraform --version
homebrew로 쉽게 설치가 가능하다.
Linux
wget -O - https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install terraform
하고
terraform --version
하면
최신 버전 설치가 완료되었다.
AWS Configure
여기서부터는 맥, 리눅스 다 똑같다.
AWS API 를 호출하는 형식을 이용해서 코드로 이제 AWS를 관리하고 하는 건데, 그렇기 위해서 AWS의 액세스키랑 시크릿키를 이제 등록을 해야한다.
그렇기에 액세스 키랑 시크릿키를 얻어야한다.
AWS에 로그인을 해서
보안 자격증명에 들어간다
저기 들어가서
밑으로 내리다 보면 액세스 키 만들기 버튼이 있는데, 저거를 누른다
여기서 원래는 IAM을 만들어서 해야하는데, 일단은 루트로 부터 만드는 법을 알아보고 나중에 밑에서 IAM을 만들어서 해보자.
액세스키 만들기를 누르면
생성이 되고 잘 기억하고 있어야한다.
그 다음에
터미널에서
aws configure
을 입력후에
이렇게 액세스키와 시크릿키 입력하고, region name에다가 ap-northeast-2 를 입력, 그 밑에는 Json입력하면 끝!
그러고 나서 연결이 제대로 되었는지 확인하려면
aws s3 ls
를 입력해보자.
그리고 키를 지운 후에 다시 테스트해보자.
아까 그 액세스 키 부분에서 비활성화 하고 삭제 후에 다시
aws s3 ls를 해보면
권한이 없다고 나온다.
내 키가 뚫린 거 같으면 이렇게 삭제하고 다시 생성한 후에 해야한다.
IAM 사용자 생성
루트로 키 설정하고 했다가 뚫려버리는 내 AWS 다 털리는 거다. 그래서 IAM이라고 사용자 만들어서 운영해야한다. 사실 루트 사용자는 그냥 처음 IAM 생성할 때만 쓰고 그 뒤로는 들어가지 말아라 라고 할 정도로 IAM을 만들어서 운영하고 root는 거의 이용하지 않는다.
그래서 IAM 생성부터 해보면
AWS ->IAM -> 사용자 -> 사용자 생성을 클릭한다
그 후에 이름 입력하고, AWS Management Console에 대한 사용자 액세스 권한 제공 클릭 후에
IAM 사용자를 생성하고 싶음 -> 자동 생성된 암호 -> 사용자는 다음 로그인 시 새 암호를 생성해야함 을 누른다
다음을 누르면 그룹 어떻게 할 거냐고 뜨는데
테라폼 그룹 이름 하나 만들어서 AdministratorAccess 저거 권한 하나 주고 사용자 그룹 생성을 해주었다.
그룹 추가해주고 다음을 누르고
한 번더 다음을 누르면
사용자가 생성되었다.
콘솔 로그인 URL, 사용자이름, 콘솔암호는 기억해두었다가 바로
로그인을 하면
비번 바꾸라고 뜨고 바꾸면
비번 성공적으로 바뀌었다고 뜬다.
이 메인페이지에서 아까처럼 보안 및 자격증명 -> 액세스 키 생성에 들어가서
CLI 클릭 후 다음
진행해주면
저 IAM계정만의 액세스키와 비밀 액세스키가 나왔다.
저걸 다시 aws configure로 설정해주면 된다.
해주고 다시 aws s3 ls 해주면
IAM으로 액세스키랑 시크릿키 연결이 완료되었다.
내가 지금 그러면 어떤 권한으로, 누구인가 aws에 연결이 되었는지 확인하려면
cat ~/.aws/credentials
OR
aws sts get-caller-identity
위의 두 가지 명령어로 확인이 가능하다.
Terraform 사용해보기
terraform init
을 실행해보면
지금 아무것도 없어서 아무것도 이루어지지 않는다.
1. 프로바이더 생성하기
프로바이더는 테라폼이 리소스를 관리할 수 있게 해주는 클라우드 서비스나 플랫폼이다. AWS, Azure, Google Cloud, VMware 등을 포함한 다양한 프로바이더가 있다. 라고 했다.
그래서 프로바이터를 먼저 생성해보자. AWS를 사용하기에 AWS Provider를 만들어보자
terraform101 이라는 폴더를 만들고
nano provider.tf
으로 작성하는 거 만들고 서울 리전을 사용할 거기에
provider "aws" {
region = "ap-northeast-2"
}
이렇게 작성해주고 저장한다.
그리고 나서
terraform init
을 실행해주면
이니셜 라이징이 되었다
뭐가 좀 많긴한데, 저기 보면
.terraform 폴더가 새로 만들어졌고 저기로 들어가보면
이런식으로 되어있다.
2. 리소스 만들기
리소스는 테라폼을 사용해 관리할 수 있는 실제 인프라 구성요소이다. 네트워크, 로드 밸런서, 인스턴스 등 실제로 생성할 인프라 자원을 의미한다.
nano s3.tf
하고
resource "aws_s3_bucket" "test" {
bucket = "terraform101-seo"
}
이렇게 생성한 후에 (이떄, bucket 뒤에 있는 저 내용은 유일해야함.)
terraform plan
을 치면
여기서 aws_s3_bucket은 리소스의 정의를 하겠다, test는 리소스의 이름이고, bucket은 필수적으로 인자가 있어야하기 때문에 넣어준 것이다.
plan은 단순히 어떠한 형상에도 변화를 주는 게 아니라 그냥 테스트만 해보는 느낌이다.
그래서
terraform apply
을 넣어 yes을 입력하고 엔터를 누르면
적용이 되었다고 뜬다.
그래서 ls를 하면
이렇게 tfstate파일이 하나 생성된 것을 확인할 수 있다.
이제 저걸 백엔드에 집어넣어줘야한다. 현재는 백엔드를 저장하지 않았기에, 로컬로 된 것이다.
그래서
aws s3 ls
치면
실제로 AWS s3에 들어가서 보면
terraform-seo 방금 만든 게 추가되었다.
terraform state list
를 치면
아까 만든 리소스가 있는 것을 확인할 수 있다.
에필로그
개념을 제대로 이해하지 못해서 , 지금은 그냥 실습 떄려보면서 익히는 게 맞는 거 같다. 강의 보면서 진행할 예정이다.
출처
DevOps Fundamentals : 데브옵스 기본기 완전 정복 인프런 강의
'DevOps' 카테고리의 다른 글
[DevOps] 데브옵스란? (1) | 2024.12.28 |
---|