다음은 주말 CloudNet 테라폼 스터디 내용 참고하여 정리한 부분입니다.
https://gasidaseo.notion.site/gasidaseo/CloudNet-Blog-c9dfa44a27ff431dafdd2edacc8a1863
내용은 계속 업데이트 됩니다.
기본 환경은 AWS , 리눅스 서버를 사용합니다.
목표
환경 구축 - 리눅스 서버 1대 설치, 테라폼 설치
EC2 1대 설치
EC2 1대 정보 변경해보기
<1> 아마존 리눅스 EC2 생성, 테라폼 설치
<2> 테라폼으로 EC2 1개 설치 - 실습1
<3> EC2 정보 변경 - 실습2
<1> 아마존 리눅스 EC2 생성, 테라폼 설치
환경 준비?
1
mac, windows 사용시 - 비쥬얼 스튜디오 코드 설치
2
AWS 로그온
AWS 디폴트 VPC사용 요망.
디폴트 VPC를 삭제한 경우
콘솔 - Your VPCs에서 다시 한번에 바로 생성 가능하다.
3
AWS에 ec2 하나를 생성해 사용합니다.
ppk로 만들기
보안 그룹은 디폴트 = ssh만 허용 , http는 허용 안됨.
IAM > Access-key/Secret key 1개 생성.
테스트 환경이라 admin권한 부여
3
(선택)
ec2에서 환경변수로 지정
linux , mac
export AWS_ACCESS_KEY_ID=Axxxxxxxxxx
export AWS_SECRET_ACCESS_KEY=xxxxxxxxxxLEKEY
export AWS_DEFAULT_REGION=ap-northeast-2
Windows
set AWS_ACCESS_KEY_ID=Axxxxxxx
set AWS_SECRET_ACCESS_KEY=xxxxxxxxxxx
set AWS_DEFAULT_REGION=ap-northeast-2
4
// 참고
aws configure 보다 export가 우선이다.
export AWS_DEFAULT_REGION=ap-northeast-2 에 만들어 진다.
aws configure로 설정시 .aws 폴더 아래 , configure에 리전 정보가 있다.
푸티로 새로 로그인 하면 aws configure의 적용을 받는다.
5
aws configure
aws s3 mb s3://dasdadq223
aws s3 ls로 확인
# 페이저 사용 비활성화 = 명령어 사용시 바로 프롬프트가 떨어지도록 한다.
리눅스
export AWS_PAGER=""
windows
set AWS_PAGER=""
명령어 실행 시 편리한 툴 설치
yum install tree jq watch
6
cli로 디폴트 vpc 확인
aws ec2 describe-vpcs --filter 'Name=isDefault,Values=true' | jq '.Vpcs[0].VpcId'
테이블로 보기
aws ec2 describe-subnets --filter 'Name=vpc-id,Values=vpc-<자신의VPC ID>' --output table
aws ec2 describe-subnets --filter 'Name=vpc-id,Values=vpc-00b1f2343611598c2' --output table
7
amazon linux 테라폼 설치
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo
sudo yum -y install terraform
terraform version
8
자동 완성 설치
terraform -install-autocomplete
<2> 테라폼으로 EC2 1개 설치 - 실습1
1
최신 AMI 찾기
콘솔에서 ami 이미지를 확인하거나
또는 cli로 확인한다.
ami-0425f132103cb3ed8
aws ec2 describe-images --owners self amazon --query 'Images[*].[ImageId]' --output text
aws ssm get-parameters-by-path --path /aws/service/ami-amazon-linux-latest
aws ssm get-parameters-by-path --path /aws/service/ami-amazon-linux-latest --query "Parameters[].Name"
// 리전마다 Ami가 다르므로 맞는 ami를 사용하자. 여기서는 아마존 리눅스 이미지를 사용한다.
// 콘솔에서도 이미지 이름을 확인할 수 있다.
2
EC2 생성 모니터링
export AWS_PAGER=""
while true; do aws ec2 describe-instances --query "Reservations[*].Instances[*].{PublicIPAdd:PublicIpAddress,InstanceName:Tags[?Key=='Name']|[0].Value,Status:State.Name}" --filters Name=instance-state-name,Values=running --output text ; echo "------------------------------" ; sleep 1; done
3
aws configure
또는
export AWS_ACCESS_KEY_ID=Axxxxxxxxxx
export AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxMPLEKEY
export AWS_DEFAULT_REGION=ap-northeast-2
4
서울 리전의 경우
cat <<EOT > main.tf
provider "aws" {
region = "ap-northeast-2"
}
resource "aws_instance" "example" {
ami = "ami-0425f132103cb3ed8"
instance_type = "t2.micro"
}
EOT
설명?
// provider : aws 와 같은 공급자
// resource : 만들고자하는 인프라.
// region
// resource Provider_타입_이름
// resource "aws_instance" "example" {
// aws 인스턴스를 만든다. 이름은 example 이다.
5
오레곤에 만드는 경우
cat <<EOT > main.tf
provider "aws" {
region = "us-west-2"
}
resource "aws_instance" "example" {
ami = "ami-08e2d37b6a0129927"
instance_type = "t2.micro"
}
EOT
6
terraform init
프로바이더 플러그인 가져온다.
# tree .terraform
.terraform
└── providers
└── registry.terraform.io
└── hashicorp
└── aws
└── 4.34.0
└── linux_amd64
└── terraform-provider-aws_v4.34.0_x5
7
terraform plan
내가 만든 코드가 어떤 인프라로 변하는지 리스트가 나온다.
8
terraform apply --auto-approve
생성
또는
terraform apply
yes 로 생성한다.
7
모니터링 결과
이름 없이 생성 된다.
------------------------------
None 43.201.8.122 running
<3> EC2 정보 변경 - 실습2
서버명을 넣어보자~ tags
1
서울에서
cat <<EOT > main.tf
provider "aws" {
region = "ap-northeast-2"
}
resource "aws_instance" "example" {
ami = "ami-0425f132103cb3ed8"
instance_type = "t2.micro"
tags = {
Name = "aws-tts-seoul-web01"
}
}
EOT
2
오레곤에 한다면
cat <<EOT > main.tf
provider "aws" {
region = "us-west-2"
}
resource "aws_instance" "example" {
ami = "ami-08e2d37b6a0129927"
instance_type = "t2.micro"
}
tags = {
Name = "t101-study"
}
}
EOT
2
terraform plan
3
terraform apply
yes
4
모니터링
서버명 aws-tts-seoul-web01 로 변경 됨.
------------------------------
None 43.201.8.122 running
------------------------------
None 43.201.8.122 running
------------------------------
aws-tts-seoul-web01 43.201.8.122 running
------------------------------
aws-tts-seoul-web01 43.201.8.122 running
5
삭제 ?
모든 리소스를 삭제 한다. 주의!
terraform destroy --auto-approve
또는
terraform destroy
yes
다음 과정
https://brunch.co.kr/@topasvga/2421
감사합니다.