테라폼으로 AWS 서비스 구축하기 2장. EC2 RDS S3 구축하기 – 2

테라폼으로 EC2 RDS S3의 구성을 구현해봅시다
2021.04.11

시작하며

이전 글에선 VPC 부분의 설정을 했습니다.
이번엔 나머지 부분을 작성합니다.

작업 환경

  • (Ubuntu)WSL2
  • Visual Studio Code
  • Terraform 0.14.9

구성도

  • VPC x 1 (작성 완료)
  • IAM(Role: AmazonSSMManagedInstanceCore) x 1
  • EC2 x 1
  • RDS x 1
  • S3 x 1

EC2생성

키페어 생성

먼저 인스턴스에 사용할 키 페어를 생성합니다. 기존에 사용하던 키가 AWS 상에 등록되어 있다면 넘어가셔도 됩니다.
키 페어에 사용할 공개키를 생성합니다.

ssh-keygen -t rsa -b 4069 -C {자신의 메일} -f "./testPubkey" -N ""

커맨드가 제대로 완료되었다면 현재 디렉토리에 testPubkey.pub 이라는 파일이 생성됩니다.
이어서 테라폼 파일을 작성하겠습니다.

# ec2.tf
resource "aws_key_pair" "ec2_key" {
  key_name = "terraTest"
  public_key = file("./testPubkey.pub")
}

public_key 의 값을 지정하는 방법은 2가지가 있습니다.

  • 방금 생성한 공개키 내용(ssh-rsa 로 시작하는)을 전부 붙여넣는다.
  • 공개키의 주소를 file()로 지정한다.

인스턴스 생성

aws_instance 리소스를 사용하여 간단한 구성의 인스턴스를 생성합니다.
파일을 작성한 후 plan으로 결과를 확인해주세요.

resource "aws_instance" "test_ec2" {
  ami = "ami-0002b9f51ae640f9a"
  instance_type = "t3.small"
  vpc_security_group_ids = [ 
    aws_security_group.blogPublicSG.id,
   ]
  subnet_id = aws_subnet.blogPublicSubnet.id
  key_name = aws_key_pair.ec2_key.key_name
  root_block_device {
    volume_size = 200
    volume_type = "gp3"
  }
}

사용할 ami id는 구글에서 사용할 플랫폼의 id를 검색하여 공식 문서로 들어가거나 EC2 콘솔에서 검색하기 혹은 테라폼의 ami 조회를 사용하여 알아낼 수 있습니다.
vpc나 security group의 정보는 다른 파일에 작성되어 있어도 참조할 수 있습니다.

RDS / S3 생성

RDS 생성

RDS에 서브넷을 지정하기 위해선 1개의 서브넷만 필요하더라도 서브넷 그룹으로 지정해야합니다.
서브넷 그룹을 작성한 후 aws_db_instance리소스를 이용하여 RDS를 생성합니다.
사용할 엔진과 버전은 이곳에서 확인할 수 있습니다.

마찬가지로 작성 후 plan으로 결과를 확인해봅니다.

resource "aws_db_instance" "test_rds" {
  allocated_storage = 50
  max_allocated_storage = 80
  engine = "postgres"
  engine_version = "13.1"
  instance_class = "db.t3.small"
  name = "testDB"
  username = "guestUser"
  password = "testtest"
  vpc_security_group_ids = [ 
    aws_security_group.blogPrivateSG.id,
   ]
  tags = {
      "name" = "testDB"
    }
}

(아이디나 비밀번호를 그냥 텍스트로 쓰면 불안하지 않나? 라는 생각이 듭니다. 이는 뒤에 다시 설명합니다)

S3 생성

aws_s3_bucket 리소스로 s3 버킷을 생성합니다.
이 글에선 별다른 옵션이 없는 버킷을 생성하지만 테라폼에서 life cycle, versioning, cors, website hosting 등 다양한 패턴에 맞게 설정할 수 있습니다.

resource "aws_s3_bucket" "testBucket" {
  bucket = "must01940-test-bucket" # 고유한 버킷명이 필요합니다
  acl    = "private"

  tags = {
    Name        = "test bucket"
    Environment = "Dev"
  }
}

작성 완료

모든 파일의 작성이 끝났다면 apply를 하여 적용합니다.
적용이 된 것을 확인한 뒤 리소스가 불필요하다면 destroy 하여 요금 낭비를 막습니다.

마치며

간단한 구성을 테라폼을 활용하여 작성하여 보았습니다.
하지만 tfstate라는 파일은 왜 생겼는지 / 아이디나 비밀번호를 그대로 적었는데 보안상 의문이 남는 점 /
변수 등의 능동적인 구축이 안되는 점 등등..아직 신경쓰이는 것이 많습니다.
이런 의문점은 다음 글에서 설명하겠습니다

내용의 피드백 및 오탈자 제보는 언제나 환영합니다! must01940(G메일) 으로 보내주시길 바랍니다.
긴 글 읽어주셔서 감사합니다!

글 목록

0장. 테라폼(terraform)이 뭐야?
1장. 테라폼 설치하기 2장. EC2 RDS S3 구축하기 - 1 2장. EC2 RDS S3 구축하기 - 2 - 해당 글