이번에는 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를 설치한다.
'AWS > Part 4. Ch02 테라폼을 이용한 인프라 관리' 카테고리의 다른 글
CH02_14. 테라폼 클라우드 사용 및 아틀란티스 소개 (0) | 2022.06.14 |
---|---|
CH02_17. 테라폼 워크스페이스 디렉토리 구성 전략 (0) | 2022.06.04 |
CH02_16. 테라폼 terraform_remote_state 데이터소스 활용 (0) | 2022.06.04 |
CH02_15. 테라폼 모듈 작성 방법 (0) | 2022.06.04 |
CH02_13. 테라폼 워크스페이스 관리 (0) | 2022.06.03 |