본문 바로가기
AWS/Part 4. Ch02 테라폼을 이용한 인프라 관리

CH02_18. 테라폼 Provisioner와 EC2 Userdata

by Engineer-Lee 2022. 6. 14.
반응형

이번에는 AWS에서 제공하는 EC2 Userdata와 Terraform에서 제공하는 Provisioner에 대해 알아보자

 

 

먼저 terraform Provisioner는 테라폼에서 지원해주는 syntax이다.

테라폼에서 지원하는 provisioner 블록은 기본적으로 file, local_exec, remote_exec로 3가지가 있다.

file provisioner는 local에서 remote로 파일 복사 기능을 제공한다.

local_exec는 local pc(테라폼 cli 실행머신)에서 명령어를 수행한다. 

remote_exec는 remote머신에서 명령어를 수행하고 이를 위해 SSH(Linux)와 Win_rm(Windows) 프로토콜을 지원해준다.

terraform Provisioner는 첫 리소스 생성시점에 실행할 수 있고 여러 옵션을 통해 삭제 시점이나 또는 매번 수행하도록 커스터마이징을 할 수 있다. 

 

 

EC2 Userdata란 EC2가 생성되면서 실행되는 일종의 script 이다.

EC2의 대부분의 리눅스 운영체제에는 cloud-init이라는 패키지가 있는데

EC2 Userdata는 첫 부팅시점만 userdata를 가지고 부트스트래핑(사용자 생성, 파일 구성, 소프트웨어 설치 등)을 한다.

 

 

이제 실습코드를 보자

https://github.com/tedilabs/fastcampus-devops/tree/main/2-terraform/16-provisioner-userdata

 

GitHub - tedilabs/fastcampus-devops: 🚀 패스트캠퍼스 데브옵스 초격차 코스 자료

🚀 패스트캠퍼스 데브옵스 초격차 코스 자료. Contribute to tedilabs/fastcampus-devops development by creating an account on GitHub.

github.com

 

 

먼저 version.tf에는 테라폼 버전과 provider의 의존성이 명시되어 있다.

 

 

files 디렉토리 안에는 index.html 파일과 install-nginx.sh라는 nginx를 다운로드하기 위한 쉘 스크립트 파일이 있다.

 

 

outputs.tf에는 provisioner_instance와 userdata_instance의 public_ip, public_dns, private_ip, private_dns의 output를 출력한다.

 

 

 

main.tf에는 provider 구성이 있고

 

data블록에 이전 실습에서 사용했던 우분투 ami가 설정되어 있다.

 

locals 블록에는 vpc_name를 "default"로 설정하고 common_tags로 "Project"라는 태그를 생성했다.

 

이번 실습에서는 vpc를 따로 구성하지 않고 aws에서 기본적으로 제공해주는 default vpc에 ec2 인스턴스를 실행 시킬 것이다. resource 블록에서 "aws_default_vpc" 레이블은 aws 계정에서 default vpc를 찾아서 동작을 수행한다.

 

security group에서는 22번 포트와 80번 포트의 접속을 하도록 구성했다.

 

 

ec2 userdata에는 apt-get을 update하고nginx를 설치하도록 설정했다.

 

 

provisioner를 이용해서 userdata와 동일한 작업을 한다.

remote-exec로 리모트 머신에서 ubuntu계정으로 ssh접속을 해서 apt-get을 updata하고 nginx를 설치한다.

 

반응형