Terraform을 사용해서 AWS EC2 만들기

mDev_97·2023년 10월 19일

Terraform

목록 보기
3/4
post-thumbnail

📌 해당 게시글은 Terraform을 사용하여 AWS S3 만들기 에 이어서 진행됩니다.
게시글을 참고하여 IAM 유저를 생성하고 진행해주시기 바랍니다.

IAM 권한 추가

해당 게시글에서 진행하는 실습을 진행하기 위해서는 기존의 IAM에 권한을 추가로 부여해주어야 합니다.
IAM에 권한을 추가해주기 위해서 AWS Console로 들어갑니다.

IAM 사용자에 접속

[권한 추가] 버튼 클릭 -> 직접 정책 연결 클릭

EC2 검색 후 AmazonEC2FullAccess 선택

AMI 검색 후 AWSMarketplaceAmiIngestionAWSDataLifecycleManagerServiceRoleForAMIManagement 선택 후 [다음]

총 3개의 권한을 추가해줍니다.

그럼 아래와 같이 권한들이 모두 잘 추가된 것을 볼 수 있습니다.


Terraform을 사용해서 AWS EC2 만들기

Provider 지정

provider "aws" {
  region = "ap-northeast-2"
}

AWS AMI 지정

AWS AMI에는 여러가지 마켓플레이스가 존재합니다.
그 중에서 Ubuntu 20.04를 필터링해서 어떤 이미지를 사용할 것인지 지정해줍니다.

아래 정보는 Terraform aws_instance Example Usage에서 확인 가능합니다.

data "aws_ami" "ubuntu" {
    most_recent = true

    filter {
      name = "name"
      values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"]
    }

    filter {
      name = "virtualization-type"
      values = [ "hvm" ]
    }

    owners = ["099720109477"]
}

인스턴스 리소스 만들기

이제 EC2 인스턴스 리소스를 만들어봅니다.
리소스의 레이블을 web이라고 정해주고, 이때 AMI를 넣어주어야 하는데
위에서 만든 데이터에서 Ubuntu의 id를 사용해줍니다.

resource "aws_instance" "web" {
  ami           = data.aws_ami.ubuntu.id
  instance_type = "t2.micro"

  tags = {
    Name = "HelloWorld"
  }
}

전체 코드

provider "aws" {
  region = "ap-northeast-2"
}

data "aws_ami" "ubuntu" {
  most_recent = true

  filter {
    name   = "name"
    values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"]
  }

  filter {
    name   = "virtualization-type"
    values = ["hvm"]
  }

  owners = ["099720109477"]
}

resource "aws_instance" "web" {
  ami           = data.aws_ami.ubuntu.id
  instance_type = "t2.micro"

  tags = {
    Name = "HelloWorld"
  }
}

코드 적용

Terraform을 실행해주기 전에 기본적인 Subnet을 지정해주어야 합니다.
지금 우리는 VPC와 Subnet을 지정해주지 않았기 때문에
AWS CLI를 통해서 Availability Zone을 지정해주어야 합니다.

이렇게 지정해주지 않으면 플랜을 진핼할 때와 적용할 때 에러가 발생하게 됩니다.

VPC의 경우 AWS 계정을 생성할 때 자동으로 지정되기 때문에 걱정하지 않으셔도 됩니다.

aws ec2 create-default-subnet --availability-zone ap-northeast-2

그럼 이제 지금까지 작성한 내용을 기반으로 PlanApply를 해보겠습니다.

terraform init

terraform plan

terraform apply

작성한 코드를 다음과 같이 적용하면 1개의 리소스가 추가된다는 메시지를 볼 수 있습니다.


결과 확인

우리가 지금까지 작성한 내용이 잘 적용이 되었는지 확인하기 위해서
AWS Console로 가서 확인해보겠습니다.

AWS Console에서 EC2 인스턴스로 가면 아래에서 보시는 것과 같이
우리가 코드로 작성했던 인스턴스가 잘 생성된 것을 볼 수 있습니다.

profile
안녕하세요. 백엔드, 클라우드, 인프라에 관심과 열정이 있는 김문성입니다. 😊

0개의 댓글