Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/
티스토리 뷰
Terraform
IaC는 코드가 인프라, 인프라가 코드가 된다.
이 두 개 사이를 변환시켜 줄 도구가 IaC도구, 테라폼이다.
인프라를 빠르게 세팅하는 데에 장점이 있지만, 한번에 세팅하기 때문에 코드상에 문제가 있다면 다시 다 부수고 만들어야 한다.
테라폼은 오픈소스 도구로, 어떤 클라우드 프로바이더라도 코드로 인프라를 배포할 수 있는 호환성을 제공한다.
하지만 테라폼은 인프라 자원들의 프로비저닝을 중점으로 해주기 때문에, OS Level의 구성을 위해서 Ansible과 같은 툴과 함께 사용된다.
Virtual Box를 사용해 VM에서 AWS CLI와 Terraform을 설치해서 AWS EC2를 배포할 것이다.
(cloud shell이나 cloud9 혹은 본인의 PC에서 진행해도 무방하다.)
이때 Terraform이 AWS 자원을 배포하기 위해서는 권한을 가져야 하므로 IAM user를 사용할 것이다.
Terraform 설치하기
테스트를 할 OS는 VM Unbuntu이기 때문에 Linux 명령어로 설치해준다.
Window에 설치 후, CMD를 통해 진행해도 무방하다.
https://developer.hashicorp.com/terraform/install?product_intent=terraform#linux
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [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
wget으로 다운로드하고 /etc/apt/sources.list.d 디렉터리에 terraform 다운로드 경로를 넣는다.
ubuntu에서 /etc/apt/sources.list.d 는 APT 저장소 관련 파일을 저장하는 곳으로, Terraform의 설치 경로를 넣어주게 된다.
설치가 완료되면 아래의 명령어로 버전을 확인한다.
terraform –version
자동 완성기능도 추가해 주자.
terraform -install-autocomplete
아래에서 정보가 확인이 된다.
cat ~/.bashrc
bashrc는 Bash 셸의 초기화 파일이다. 우분투는 기본 쉘이 Bash로 세팅되어 있다.
bashrc 파일은 Bash 셸이 시작될 때 실행되어, 정의된 환경 변수, 별칭, 함수 및 다른 초기화 코드가 포함될 수 있습니다.
여기서는 맨 아래 부분에 complete -C /usr/bin/terraform terrform이 존재한다.
즉, 재시작되더라고 항상 자동완성 기능이 실행된다.
AWS IAM user 생성
AWS의 IAM에서 사용자 생성을 진행한다.
Console 액세스 권한은 선택할 필요는 없다.
권한은 일단 admin을 주는데, 보안상 좋지 않으므로 최소 권한만 주는 것이 권장된다.
완료되었으면 사용자의 엑세스 키를 만들자.
액세스 키는 주의해서 사용하자.
이 키를 가져다가 사용하자.
AWS CLI 세팅
다시 CLI로 돌아오자.
Sudo apt update
압축 해제를 위해서 unzip 다운로드한다.
sudo apt install unzip -y
이후 CLI2 zip을 다운로드 후, 집적 설치한다.
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
AWS CLI 설치 가이드
https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/getting-started-install.html
설치를 확인하자.
aws --version
AWS 구성 정보, 자격 증명을 확인한다.
aws configure list
여기에 우리가 만들어준 Access key를 넣어주자.
단, 위험도가 높은 방식이므로 테스트를 위해서만 사용하자.
aws configure
자격 증명을 넣어준다.
우리가 위에서 만들어준 액세스 키를 사용한다.
명령 완성 활성화
complete -C '/usr/local/bin/aws_completer' aws
https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/cli-configure-completion.html
Default VPC를 조회해 보자.
aws ec2 describe-vpcs --filter 'Name=isDefault,Values=true' | jq '.Vpcs[0].VpcId'
aws ec2 describe-vpcs --filter 'Name=vpc-id,Values=<vpc id>' --output table
Terraform으로 AWS EC2 배포
terraform 파일을 관리하기 위해 폴더 하나 만들어서 이동하자.
mkdir terra
cd terra/
AWS EC2 하나를 배포하자.
우리는 프리티어의 OS를 사용하기 위해서, 프리티어를 지원하는 ami-id 값을 지정할 것이다.
main.tf 작성
provider는 원하는 클라우드 사를 넣어주면 된다.
resource는 클라우드의 서비스 리소스를 정의한다.
우리는 "aws_instance" 리소스를 정의하고, 그 이름을 "example"로 설정하였다.
이제. tf를 통해서 이 파일로 프로바이더에 프로비저닝을 할 수 있게 된다.
terraform init
.tf 파일을 통한 terraform 실행 준비
설정 관련 정보가 확인이 된다.
tree .terraform
terraform plan
위의 명령어로 인프라에 어떤 변화가 발생할지 미리 확인할 수 있다.
terraform apply
변경 사항을 적용한다.
근데 이름이 없다;;
이를 추가하고 싶다면 tf 코드를 수정해서 tag 값을 넣어주자.
tags = {
Name = "AWS-Terraform"
}
이제 다시 apply를 하면 수정될 내용만 출력된다.
즉, 서버의 재시작이 필요 없는 세팅은 modify만 된다.
만약 태그 변경만으로도 재시작이 된다면 정상적이 서비스에 문제가 발생할 것이다.
terraform destroy -auto-approve
자동으로 yes까지 하도록, .tf 파일의 인프라를 모두 삭제한다.
AMI의 최신 버전으로 EC2 생성하기
그런데 항상 AMI-id를 확인해서 명시하기는 귀찮을 수 있다.
이를 위해서 특정 os의 최신 AMI를 자동으로 선택하게 만들어보자.
mkdir ec2
cd ec2
touch latest.tf
nano latest.tf
data는 Terraform에서 다른 인프라 리소스의 정보를 가져오는 데 사용되는 기능이다.
terraform init
terraform apply
인스턴스 강제 종료하기
테라폼으로 생성된 인스턴스는 종료하면, 다시 재시작될까?
테라폼이 상태 체크를 하고 리소스를 재시작하는 기능을 제공하는 것이 아니기 때문에 그냥 종료된다.
이 상태에서 destroy 하면 그냥 삭제된 것이 없는 것으로 확인된다.
'Cloud > Terraform' 카테고리의 다른 글
Terraform으로 AWS VPC와 웹 서비스 배포하기 (0) | 2024.04.18 |
---|