프로필사진

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

 

Install | Terraform | HashiCorp Developer

Explore Terraform product documentation, tutorials, and examples.

developer.hashicorp.com

 

 

 

 

 

 

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 CLI설치 또는 업데이트 - AWS Command Line Interface

이전 버전에서 업데이트하는 경우 unzip 명령을 실행하면 기존 파일을 덮어쓸지 묻는 메시지가 표시됩니다. 스크립트 자동화와 같은 경우에 이러한 프롬프트를 건너뛰려면 unzip에 대한 -u 업데이

docs.aws.amazon.com

 

 

 

설치를 확인하자.

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

 

명령 완성 - AWS Command Line Interface

Amazon Linux를 실행하는 Amazon EC2 인스턴스에서는 기본적으로 명령 완성이 자동으로 구성되고 활성화됩니다.

docs.aws.amazon.com

 

 

 

 

 

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
댓글
반응형
인기글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함