* AWS Cloud Quest: Cloud Practitioner 과정 Terraform으로 해보기 중입니다.
오늘 할 퀘스트~!
https://juyeonee826.tistory.com/172
[AWS Cloud Quest] Networking Concepts
퀘스트 제목 Networking Concepts 퀘스트 내용 은행이 리소스와 인터넷 간의 통신을 허용하는 안전한 네트워킹 환경을 구축해줘라 퀘스트 목표 - AVPCs, subnets, internet gateways and route tables의 주요 기능을
juyeonee826.tistory.com
TODO
- NAT 게이트웨이 생성
- NAT 게이트웨이 연결한 서브넷 생성
- 위 서브넷 인터넷 게이트웨이 연결로 라우팅 테이블 수정
- 80 포트 허용한 보안그룹 생성
- 퍼블릭 서브넷 연결한 웹 서버 EC2 생성
80 포트 허용한 보안그룹 생성
instance-type-user-data.sh
#!/bin/bash -xe
exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1
echo "nameserver 8.8.8.8" > /etc/resolv.conf
echo "nameserver 168.126.63.1" >> /etc/resolv.conf
echo "nameserver 210.220.163.82" >> /etc/resolv.conf
echo "nameserver 164.124.101.2" >> /etc/resolv.conf
sudo yum update -y
sudo yum install -y httpd.x86_64
sudo systemctl start httpd.service
sudo systemctl enable httpd.service
instance_type=$(curl -s http://169.254.169.254/latest/meta-data/instance-type)
echo "EC2 Instance Type : <span style='color:blue;'>$(echo $instance_type)</span>" > /var/www/html/index.html
EC2 생성
resource "aws_instance" "instance_type_quest_server" {
ami = data.aws_ami.amazon_linux_2_kernel_5.id
instance_type = var.linux_instance_type
subnet_id = data.aws_subnets.default.ids[3]
vpc_security_group_ids = [aws_security_group.aws_linux_sg.id]
user_data = file("instance-type-user-data.sh")
root_block_device {
volume_size = 8
volume_type = var.linux_root_volume_type
delete_on_termination = true
encrypted = true
}
}
인스턴스 유형 변경
기존 정의해둔 variable을 활용하여 변경해준다.
terraform plan -var linux_instance_type=t3.medium
terraform apply -var linux_instance_type=t3.medium

user data 인스턴스 재시작 할 때마다 재실행 되게 하기
user data는 인스턴스 생성 시에만 실행되기 때문에 index 페이지의 메타데이터가 변경되지 않았다.
아래와 같이 user data를 수정하면 인스턴스가 재시작 될 때마다 user data script가 재실행된다.
instance-type-user-data.sh
Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0
--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"
#cloud-config
cloud_final_modules:
- [scripts-user, always]
--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"
#!/bin/bash -xe
exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1
echo "nameserver 8.8.8.8" > /etc/resolv.conf
echo "nameserver 168.126.63.1" >> /etc/resolv.conf
echo "nameserver 210.220.163.82" >> /etc/resolv.conf
echo "nameserver 164.124.101.2" >> /etc/resolv.conf
sudo yum update -y
sudo yum install -y httpd.x86_64
sudo systemctl start httpd.service
sudo systemctl enable httpd.service
instance_type=$(curl -s http://169.254.169.254/latest/meta-data/instance-type)
echo "EC2 Instance Type : <span style='color:blue;'>$(echo $instance_type)</span>" > /var/www/html/index.html
--//--
결과 페이지


참고
https://dev.classmethod.jp/articles/check-the-ec2-instance-metadata/
메타데이터란? EC2 인스턴스 메타데이터 확인해 보기 | DevelopersIO
메타데이터가 무엇인지에 대해서 알아보고, EC2 인스턴스 메타데이터 정보를 확인해 봤습니다.
dev.classmethod.jp
https://kim-dragon.tistory.com/222
[AWS] EC2 Linux 인스턴스 재부팅시에도 UserData 실행하기
Intro 기본적으로 UserData는 EC2생성시에 한 번만 실행되도록 설정되어있습니다. 이는 cloud-init의 cloud_final_modules에서 기본값으로 once로 설정이 되어있기 때문입니다. 실제 EC2에 SSH로 접속하여 아래
kim-dragon.tistory.com
'DevOps > Terraform' 카테고리의 다른 글
[Terraform] AWS EC2 인스턴스 유형 변경(user data 재실행) (0) | 2023.07.15 |
---|---|
[Terraform] AWS EC2 Linux 인스턴스 생성(user data 작성) (0) | 2023.06.24 |
[Terraform] 테라폼 약간 심화 (0) | 2023.06.16 |
[Terraform] AWS S3 정적 웹 호스팅 (0) | 2023.05.29 |
[Terraform] 테라폼 완전 기초 (0) | 2023.05.29 |