0. AWS CLI 및 AWS Configure
테라폼으로 aws 리소스를 관리하기 위해서는, 테라폼이 구동되는 동일한 환경 내에서 AWS CLI가 설치되어 있고, AWS CLI를 통해 모든 리소스의 접근 권한을 가진 AWS IAM User와의 연동이 필요하다. AWS 루트사용자와 동일한 권한을 가진 IAM User 설정이 되지 않았다면, 아래 포스팅을 참고하길 바란다.
0.1. AWS CLI 설치
테라폼이 작동할 동일한 환경에서 AWS CLI를 설치해보자!
필자의 경우, 테라폼을 AWS와 전혀 상관 없는 개인 랩탑에서 사용할 것이고, WSL의 Ubuntu22.04 를 이용할 것이므로,
다음과 같이 진행한다.
# aws 공식홈페이지의 awscli-exe-linux-x86_64.zip 파일을 awscliv2.zip 파일로 내려받기
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
# 내려받은 압축 파일 압축 해제
unzip awscliv2.zip
# aws cli 설치
sudo ./aws/install
# aws cli 설치 완료 후, 버전 확인하여 설치 제대로 되었는지 확인
aws --version
0.2. AWS Configure 설정
다음 명령어를 통해, AWS CLI와 연동시키려는 AWS 환경에 대한 'AWS Access Key ID'와 'AWS Secret Access Key' 입력이 필요하다.
참고로, --profile 옵션을 주어, AWS CLI 상에서 해당 키 값을 프로필 config로 설정할 것이고, 이 프로필을 테라폼의 provider 설정에도 사용할 것이다.
리전은 한국에서만 테스트 할테니, 'ap-northeast-2'로 설정해주자. output format은 json으로 설정하여 범용적으로 사용해보자!
aws configure --profile [원하는 profile name]
# 필자의 경우, 'myAWSIAM' 이라고 프로필 이름을 설정
# AWS Access KEY ID [None] : <루트사용자와 동등한 권한의 IAM User 통해 발급받은 액세스 키ID>
# AWS Secret Access Key [None] : <루트사용자와 동등한 권한의 IAM User 통해 발급받은 private 액세스 키>
# Default region name [None] : ap-northeast-2
# Default outpu format [None] : json
# 생성한 프로필 목록 확인
aws configure list-profiles
# 프로필 지정에서 값이 잘 들어갔는지 확인하기 위한 해당 프로필의 region 값 확인하기
aws configure get region --profile [생성한 profile name]
# 생성한 프로필을 AWS CLI의 기본 프로필로 지정
export AWS_DEFAULT_PROFILE=[생성한 profile name]
위 과정을 마친 후, 아래 명령어를 수행하여 AWS CLI와 실제 AWS 환경과 연동이 잘 되었는 지 확인한다.
aws s3 ls
위 명령어는 연동한 AWS 환경에서의 S3에 'ls' 명령어를 날리는 것으로,
해당 AWS 환경에 S3가 셋업되어 있다면, 어떤 결과물이 출력될 것이고, 그게 아니라면 아무것도 나타나지 않을 것이다.
만약 "Invalid Access Key" 와 같은 에러가 나타난다면, 키 값이 잘못 입력되었거나, 유효하지 않은 키 값이므로 상황에 맞춰 이를 해결해야 한다.
1. AWS provider 셋업
테라폼이 AWS 서비스의 api 액세스를 하기 위해서는, 내가 구성한 AWS의 Key 값을 테라폼이 인식하여야 한다.
그 과정을 .tf 파일에 하드코딩으로 넣어두면 보안이 매우 취약해지니,
다음과 같이 테라폼 provider 파일에서 AWS CLI에서 설정한 프로필 네임을 가져오자.
# 테라폼 working 디렉토리로 이동 (필자의 경우, WSL 환경이므로, /mnt/c/Terraform 이라는 디렉토리를 만들었음.)
cd /mnt/c/Terraform
# provider.tf 작성 (vi provider.tf)
provider "aws" {
profile = "myAWSIAM"
region = "ap-northeast-2"
}
# terraform init을 통한 provider 환경 구축
# init 시에 등록되어 있는 'AWS_ACCESS_KEY_ID', 'AWS_SECRET_ACCESS_KEY', 'AWS_DEFAULT_REGION' 환경변수를 읽어옴.
terraform init
2. VPC 생성을 위한 테라폼 resource 파일 작성
# vpc.tf
resource "aws_vpc" "VPC_TEST" {
cidr_block = "10.0.0.0/16"
enable_dns_hostnames = "true"
instance_tenancy = "default"
tags = {
Name = "3-Tier 구성을 위한 테스트 VPC"
}
}
- cidr_block : VPC의 IP주소 대역을 Classless Inter-Domain Routing(CIDR) 표기법을 사용하여 설정하는 것
참고로, AWS에서는 VPC의 10.0.0.0 대역은 10.0.0.0/16 ~ 10.0.0.0/28 까지만 지원한다. - enable_dns_hostnames (Optional) : VPC가 Public IP 주소가 있는 인스턴스에 대해서는 Public DNS hostnam을 할당하는 것에 대한 지원 여부를 결정하는 옵션. Default는 false
- instance_tenancy : VPC 내부에서 동작하는 인스턴스에 대한 테넌시 옵션.
- default : 인스턴스가 기본 테넌시로 배치됨 = 인스턴스가 공유 호스트에 배치됨 = 사용자가 누구인지 상관없이 AWS의 인스턴스가 모두 한 동일한 물리적 하드웨어에 배치된다는 의미
- dedicated : 인스턴스가 전용 테넌시로 배치됨 = 특정 유저별로 인스턴스가 위치하는 물리적 하드웨어가 달라짐
- host : 인스턴스가 전용 호스트 테넌시로 배치됨 = 어떤 인스턴스도 들어갈 수 없는, 한 호스트만을 위한 물리적 하드웨어에 인스턴스가 배치됨
3. resource 파일 작성 후, terraform plan 으로 resource 파일 디버깅 및 apply 준비
resource 파일 작성이 완료되었다면, 아래 명령어를 수행하여 .tf 파일의 문법 오류나 문제가 되는 부분이 없는지 검증한다.
terraform plan
위에서 작성한 vpc.tf의 plan이 성공적으로 이루어졌다면, 아래 이미지와 같은 문구가 출력될 것이다.
트러블슈팅)
필자의 경우, 아래와 같은 "Invalid provider configuration" 에러와 "No valid credential sources found" 에러가 나왔다.
aws configuration 과정을 빼먹어서 그런 듯 하다.
위 에러 해결방법은 0.AWS CLI 및 AWS Configure 과정을 다시 진행해보길 바란다.
4. terraform apply 수행하여 실제 AWS에 VPC 생성하기
위 plna 과정이 정상적으로 되었다면, 아래 명령어를 수행하여 실제 나의 AWS 환경에 VPC를 구축해보자!
terraform apply
명령어를 수행하면 다음과 같은 문구들이 출력되고, 'yes'라는 값을 입력하라고 나올 것이다.
그럼 'yes'라고 입력하고 terraform apply가 성공적으로 수행되었을 때, "Apply complete! Resources: [수] added" 라는 문구가 출력될 것이다!
테라폼을 통해 AWS의 VPC가 성공적으로 구축되었다면, 실제 나의 AWS에 접속하여 VPC가 생성되었는지 다음과 같이 확인해주자.
실제 AWS에서도 VPC가 잘 생성된 것을 확인할 수 있다!
여기까지 하면 테라폼을 통해 VPC를 성공적으로 생성한 것이다.
다음 포스팅을 통해 3-tier 구축을 위한 Subnet, IGW, NAT Gateway, Route Table, Network ACL을 구성해 보자!
참고
https://aws.amazon.com/ko/cli/
https://engmisankim.tistory.com/68
https://cloudbim.tistory.com/14
https://gurumee92.tistory.com/230
https://developer.hashicorp.com/terraform/language/modules/develop/structure
'DevOps > Terraform' 카테고리의 다른 글
[Terraform] AWS 3-tier Achitecture를 구성하기 위한 Terraform 프로젝트 구조 잡기 (1) | 2024.01.10 |
---|---|
[Terraform] Terraform 개념, Architecture, 설치 (1) | 2023.12.28 |
최근댓글