일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- AWS
- DaemonSet
- CodeBuild
- Kubernetes
- ASG
- Kinesis
- server
- CodeCommit
- cloudwatch-agent
- 3AZ
- write back
- istio
- APIGateway
- EKS
- access_log
- write Through
- CodePipeline
- stateful
- 쿠버네티스
- DNS
- CloudWatch
- Round Robin
- 정보처리기능사
- S3
- Lambda
- cbt
- 유나인버거조인트
- SQS
- CloudFormation
- 해킹송
- Today
- Total
cloud bee
[ Terraform ] aws에서 테라폼 사용하기 본문
오늘 기능훈련을 하다가, Terraform을 사용해 보고 싶어서 Terraform에 관한 실습을 해 보았다.
내가 Terraform을 실습하면서 정리한 내용은 다음과 같다.
테라폼 사용
⏺️ 설치 환경 구성하기
⏺️ provider 설정하기
⏺️ vpc 생성하기
⏺️ EC2 web instance 생성하기
⏺️ 테라폼 리소스 삭제
설치 환경 구성
이번 실습은 로컬에서 access key를 부여하여 구성하지 않을 것이다.
amazon console ec2 환경에서 terraform을 설치하고 구성해보려 한다.
1. 먼저 https://console.aws.amazon.com/vpc에 들어가서 기본 VPC 생성을 진행한다.
2. 라우팅 테이블에 서브넷을 모두 연결한다.
3. 보안그룹을 생성해 준다.
4. https://console.aws.amazon.com/iam에 접속하여 ec2에서 사용 가능한 AdministratorAccess 권한을 생성해 준다.
5. 생성한 환경을 기반으로 ec2 instance를 다음과 같이 생성해 준다.
6. 생성된 인스턴스의 터미널을 열어 아래 명령어로 Terraform을 설치해 준다.
#!/bin/bash
sudo yum install -y yum-utils shadow-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo
sudo yum -y install terraform
설치확인
provider 설정하기
인스턴스의 터미널을 열어 다음 명령어로 provider.tf 파일을 생성해 준다.
근데 왜 provider를 설정할까?🤔
-> 이유는 간단하다. 테라폼과 외부 서비스(aws)를 연결해 주기 위해서 사용한다.
다음 명령어를 입력하여 provider.tf를 작성하고 terraform을 실행해 준다.
mkdir demo && cd demo
cat << EOF > provider.tf
provider "aws" {
# access_key = "YOUR-ACCESS-KEY"
# secret_key = "YOUR-SECRETK-KEY"
region = "ap-northeast-2"
}
EOF
terraform init
terraform plan
terraform apply
실행되면 다음과 같이 표시되어야 한다.
VPC 생성하기
테라폼을 통해 퍼블릭 서브넷 2개를 가지는 VPC를 생성해 보도록 할 것이다.
가용영역이 A와 C를 가지는 VPC를 생성하는 코드는 다음과 같다.
#!/bin/bash
cat << EOF > vpc.tf
data "aws_availability_zones" "available" {
state = "available"
}
resource "aws_vpc" "new_vpc" {
cidr_block = "10.0.0.0/16"
enable_dns_hostnames = true
enable_dns_support = true
instance_tenancy = "default"
tags = {
Name = "NEW-VPC"
}
}
resource "aws_subnet" "new_public_subnet_2a" {
vpc_id = aws_vpc.new_vpc.id
cidr_block = "10.0.0.0/24"
map_public_ip_on_launch = true
availability_zone = data.aws_availability_zones.available.names[0]
tags = {
Name = "NEW-PUBLIC-SUBNET-2A"
}
}
resource "aws_subnet" "new_public_subnet_2c" {
vpc_id = aws_vpc.new_vpc.id
cidr_block = "10.0.1.0/24"
map_public_ip_on_launch = true
availability_zone = data.aws_availability_zones.available.names[2]
tags = {
Name = "NEW-PUBLIC-SUBNET-2C"
}
}
resource "aws_internet_gateway" "new_igw" {
vpc_id = aws_vpc.new_vpc.id
tags = {
Name = "NEW-IGW"
}
}
resource "aws_route_table" "new_public_rtb" {
vpc_id = aws_vpc.new_vpc.id
route {
cidr_block = "0.0.0.0/0"
gateway_id = aws_internet_gateway.new_igw.id
}
tags = {
Name = "NEW-PUBLIC-RTB"
}
}
resource "aws_route_table_association" "new_public_subnet_2a_association" {
subnet_id = aws_subnet.new_public_subnet_2a.id
route_table_id = aws_route_table.new_public_rtb.id
}
resource "aws_route_table_association" "new_public_subnet_2c_association" {
subnet_id = aws_subnet.new_public_subnet_2c.id
route_table_id = aws_route_table.new_public_rtb.id
}
EOF
terraform init
terraform plan
terraform apply
위 코드를 실행하면 10.0.0.0 대역의 VPC가 생성된다
EC2 web instance 생성하기
EC2 web instance를 생성하기 전에 WEB-KEY라는 이름을 가진 키페어를 사전에 미리 생성해 준다.
이제 아래 명령어를 실행하여 instance.tf를 작성해 web instance를 생성하도록 해준다.
해당 web instance는 "Hello, web Site!!"라는 페이지가 뜨도록 구성하였다.
#!/bin/bash
cat << EOF > instance.tf
resource "aws_instance" "example" {
ami = "ami-0fd0765afb77bcca7"
instance_type = "t2.micro"
subnet_id = "${aws_subnet.new_public_subnet_2a.id}"
vpc_security_group_ids = [aws_security_group.instance.id]
key_name = "WBE-KEY"
user_data = <<-EOF
#!/bin/bash
yum install -y httpd
systemctl enable --now httpd
echo "Hello, Web Site!!" > /var/www/html/index.html
EOF
tags = {
Name = "demo-webserver"
}
}
resource "aws_security_group" "instance" {
name = var.security_group_name
vpc_id = "${aws_vpc.new_vpc.id}"
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
tags = {
Name = "web-sg"
}
}
variable "security_group_name" {
description = "The name of the security group"
type = string
default = "terraform-example-instance"
}
output "public_ip" {
value = aws_instance.example.public_ip
description = "The public IP of the Instance"
}
output "public_dns" {
value = aws_instance.example.public_dns
description = "The Public dns of the Instance"
}
output "private_ip" {
value = aws_instance.example.private_ip
description = "The Private_ip of the Instance"
}
EOF
terraform init
terraform plan
terraform apply
생성 결과
이제 생성된 인스턴스의 퍼블릭 IP를 복사하여 웹 서버에 접속해 준다.
이제 인스턴스에서 curl 명령어를 써볼 것이다.
테라폼 리소스 삭제
테라폼 리소스를 삭제하는 방법은 다음과 같다.
terraform destroy
이 명령어를 쓸 때 주의할 점이 있는데, 여태까지 생성하였던 리소스 전부가 삭제될 수도 있다는 점을 감안하고 실행하여야 한다.
다음과 같이 리소스가 삭제된 것을 확인할 수 있다.
'AWS > code' 카테고리의 다른 글
sns 메시지 게시할때마다 cloudwatch로 기록하기 (0) | 2023.01.29 |
---|---|
Lambda 볼륨 암호화 (0) | 2023.01.16 |
Serverless Api test (0) | 2022.11.09 |
code pipeline 간단하게 구현 (0) | 2022.10.31 |