cloudNet@ 팀의 가시다 님이 진행하는 테라폼 102 스터디 2주차 정리입니다.
3주차 내용:
테라폼 기본사용법 (3) + 도전과제
- 조건문을 활용하여 (각자 편리한) AWS 리소스를 배포하는 코드를 작성해보자!
- 내장 함수을 활용하여 (각자 편리한) 리소스를 배포하는 코드를 작성해보자!
- AWS EC2 배포 시 remote-exec/file 프로비저너 혹은 terraform-provider-ansible를 활용하는 코드를 작성해보자!
- terraform_data 리소스와 trigger_replace 를 사용한 테라폼 코드를 작성해보자!
1. 조건문 활용 AWS 리소스 배포
- ami 리소스에 instance type을 조건문을 활용하여
- variable 변수를 입력하지 않았을때 자동으로 t2.micro를 입력
provider "aws" {
region = "ap-northeast-2"
}
variable ec2_type {
type = string
default = ""
description = "description"
}
data "aws_ami" "last_ami" {
most_recent = true
filter {
name = "owner-alias"
values = ["amazon"]
}
filter {
name = "name"
values = ["amzn2-ami-hvm-*-x86_64-ebs"]
}
owners = ["amazon"]
}
resource "aws_instance" "server" {
count = 1
ami = data.aws_ami.last_ami.id
instance_type = var.ec2_type != "" ? var.ec2_type : "t2.nano"
tags = {
Name = "Server ${count.index}"
}
}
2. 내장 함수
- 내장함수 timestamp 활용하여 EC2 tag에 생성시간 태깅하기
locals {
timestamp = "${timestamp()}"
timestamp_sanitized = "${replace("${local.timestamp}", "/[- TZ:]/", "")}"
}
resource "aws_instance" "myec2" {
depends_on = [
aws_internet_gateway.myigw
]
count = 4
key_name = "koo-seoul"
ami = "ami-04341a215040f91bb"
associate_public_ip_address = true
instance_type = "t2.medium"
vpc_security_group_ids = ["${aws_security_group.mysg.id}"]
subnet_id = aws_subnet.mysubnet1.id
tags = {
Name = "Koo-kubespray"
Timestamp = "${local.timestamp_sanitized}"
}
}
- 태깅은 유용하게 쓸수 있을것 같다.
3. remote-exec 를 활용
- terraform을 통해 ec2 를 배포하고 그후 remote-exec을 통해 접속하여 스크립트를 실행할것
- remote 접속시 key pair을 로컬 경로에 위치하여 connection을 맺는다.
provider "aws" {
region = "ap-northeast-2"
}
resource "aws_security_group" "instance" {
name = "t101sg"
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
}
resource "aws_instance" "example" {
ami = "ami-0c9c942bd7bf113a2"
instance_type = "t2.micro"
subnet_id = "subnet-6ab23401"
private_ip = "172.31.0.100"
key_name = "koo-seoul" # 각자 자신의 EC2 SSH Keypair 이름 지정
vpc_security_group_ids = [aws_security_group.instance.id]
user_data = <<-EOF
#!/bin/bash
echo "Hello, T101 Study" > index.html
nohup busybox httpd -f -p 80 &
EOF
tags = {
Name = "koo-Web"
}
}
resource "aws_eip" "myeip" {
#vpc = true
instance = aws_instance.example.id
associate_with_private_ip = "172.31.0.100"
}
resource "null_resource" "echomyeip" {
provisioner "remote-exec" {
connection {
host = aws_eip.myeip.public_ip
type = "ssh"
user = "ubuntu"
private_key = file("/Users/mzc01-kook/Downloads/koo-seoul.pem") # 각자 자신의 EC2 SSH Keypair 파일 위치 지정
#password = "qwe123"
}
inline = [
"echo ${aws_eip.myeip.public_ip}"
]
}
}
output "public_ip" {
value = aws_instance.example.public_ip
description = "The public IP of the Instance"
}
output "eip" {
value = aws_eip.myeip.public_ip
description = "The EIP of the Instance"
}
- output으로 eip와 public ip를 출력한다.
eip = "43.200.209.108"
public_ip = "3.38.250.201"
[도전과제 7번] vSphre 프로바이더를 사용하여 인스턴스를 배포해보세요!
다음 게시물에서 확인하세요!
https://themapisto.tistory.com/204
'DevOps > Terraform' 카테고리의 다른 글
[T102 4주차] (12) 테라폼 워크스페이스 (0) | 2023.07.24 |
---|---|
(10) 테라폼으로 vmware 가상리소스 배포 (1) | 2023.07.18 |
[T102 3주차] (8) 테라폼 기본사용법(3) (0) | 2023.07.17 |
[T102 4주차] (11) 테라폼 상태 관리 및 격리 방안 (0) | 2023.07.13 |
[T102 2주차] (7) 도전과제 (1) | 2023.07.11 |