1. ec2 인스턴스 배포하기
다음 명령어를 수행하면 AWS CLI를 사용하여 Amazon이 소유한 특정 Amazon Linux 2 AMI 이미지에 대한 정보를 검색합니다.
aws ec2 describe-images --owners amazon --filters "Name=name,Values=amzn2-ami-hvm-2.0.*-x86_64-gp2" "Name=state,Values=available" --query 'Images|sort_by(@, &CreationDate)[-1].[ImageId]' --output text
AL2ID=`aws ec2 describe-images --owners amazon --filters "Name=name,Values=amzn2-ami-hvm-2.0.*-x86_64-gp2" "Name=state,Values=available" --query 'Images|sort_by(@, &CreationDate)[-1].[ImageId]' --output text`
해당 내용을 위와 같이 설정하고, 터미널에서 다음의 내용을 입력합니다.
cat <<EOT > main.tf
provider "aws" {
region = "ap-northeast-2"
}
resource "aws_instance" "example" {
ami = "$AL2ID"
instance_type = "t2.micro"
}
EOT
인스턴스 타입은 t2.micro로 아마존 리눅스 2 ami의 인스턴스를 서울 리전에 생성합니다.
위의 명령어를 입력하니 다음의 내용이 확인됩니다.
provider "aws" {
region = "ap-northeast-2"
}
resource "aws_instance" "example" {
ami = "ami-0ebb3f23647161078"
instance_type = "t2.micro"
}
terraform plan 후 이상이 없으면 apply를 실행합니다.
terraform apply 시 리소스 확인 후 yes를 입력하거나, terraform apply --auto-approve를 주어서 리소스를 만들 수 있습니다.
실행 결과 :
신규 생성 리소스는 +로 표기됩니다. 내용을 확인하고 yes 하여 인스턴스를 생성할 수 있습니다!
이로써 첫 ec2를 서울 리전에 t2.micro로 띄우게 됐습니다.
2. 리소스 태깅
provider "aws" {
region = "ap-northeast-2"
}
resource "aws_instance" "example" {
ami = "ami-0ebb3f23647161078"
instance_type = "t2.micro"
tags = {
Name = "chiyoung-test"
}
}
main.tf에 가서 내용을 수정해 봅시다.
tags 구문을 넣어줬습니다.
ec2 콘솔에서 보이는 이름을 넣어줍니다.
terraform plan시 다음과 같이 ~ 표시로 확인되는데,
해당 내용은 신규 생성될 때와 다르게 노란색 물결 표시로 업데이트 되는 내용을 확인할 수 있습니다.
terraform apply 후 화면은 다음과 같습니다.
밋밋하던 인스턴스에 이름이 생겼습니다.
3. data 블록을 통한 리소스 호출
ami를 불러올때 AL2ID와 같이 aws 명령어를 통해서 설정해 줬지만, 이와 같은 방법으로 매번 설정한다면 매우 번거로운 작업이 될 것입니다. 따라서 아래와 같이 설정하여 리소스를 동적으로 호출할 수 있습니다. aws 인스턴스 중 하나를 호출해 올 수도 있지만,
현존하는 리소스를 가져올 때 쓰일 수도 있습니다.
루트 모듈에 data.tf라는 파일을 만들어 줍니다.
루트 모듈에 있는 main.tf에 ami 구문에 다음과 같이 내용을 바꿔줍니다.
마찬가지로 우분투 ami를 가져다가 인스턴스를 만들어준다고 가정할때, 다음과 같이 설정할 수 있겠습니다.
terraform plan시 화면 :
'DevOps > Terraform' 카테고리의 다른 글
[Terraform] 테라폼을 이용한 vpc 배포 (0) | 2024.06.23 |
---|---|
[Terraform] 테라폼으로 서브넷 생성하기 (0) | 2024.06.23 |
[Terraform] 테라폼 lifecycle의 precondition (0) | 2024.06.16 |
[Terraform] 테라폼을 활용한 EC2 웹 서버 배포 (0) | 2024.06.16 |
[Terraform] 테라폼이란 (2) | 2024.06.16 |