테라폼으로 AWS 서비스 구축하기 2장. EC2 RDS S3 구축하기 – 2
시작하며
이전 글에선 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 - 해당 글