Amazon S3와 DynamoDB로 Backend 구축
백엔드(Backend)는 각 작업 전에 terraform.tfstate 가 저장된 S3 버킷에 액세스하고 이를 코드와 비교하여 인프라에 적용될 변경 사항을 결정합니다.
DynamoDB는 동시에 같은 파일을 수정하지 못하도록 Lock을 생성합니다.
S3 버킷 생성
DynamoDB 테이블과 terraform.tfstate 파일이 저장될 S3 버킷을 생성합니다.
resource "aws_s3_bucket" "bucket" {
bucket = "angelo-terraform-state-backend"
versioning {
enabled = true
}
server_side_encryption_configuration {
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}
object_lock_configuration {
object_lock_enabled = "Enabled"
}
tags = {
Name = "S3 Remote Terraform State Store"
}
}
- aws_s3_bucket : S3 버킷을 생성합니다.
- versioning enabled : 상태 파일의 모든 변경 사항이 저장되고 문제가 발생하면 롤백할 수 있는 버전 관리를 활성화합니다.
- object_lock_enabled : 민감한 데이터를 일반 텍스트로 저장하므로 버킷 내용 암호화합니다.
DynamoDB 생성
DynamoDB에 terraform_state라는 테이블을 생성합니다.
resource "aws_dynamodb_table" "terraform-lock" {
name = "terraform_state"
read_capacity = 5
write_capacity = 5
hash_key = "LockID"
attribute {
name = "LockID"
type = "S"
}
tags = {
"Name" = "DynamoDB Terraform State Lock Table"
}
}
- hash_key : 상태를 잠그는데 사용하는 기본키를 LockID 으로 지정하고, 타입은 문자열(S)로 지정합니다.
- aws_dynamodb_table : DynamoDB Table을 생성합니다.
- (필수) name: 데이터가 저장되는 테이블 이름으로 각 계정의 지역별로 고유한 값이여야 한다.
- (필수) hash_key : 상태를 잠그는데 사용하는 기본키를 LockID라고 지정하고, type은 Stirng(S)로 지정합니다.
백엔드(Backend) 구성
상태 파일이 저장될 위치를 정의합니다.
terraform {
backend "s3" {
bucket = "angelo-terraform-state-backend"
key = "terraform.tfstate"
region = "ap-northeast-2"
dynamodb_table = "terraform_state"
}
}
테라폼 프로젝트 실행
간단한 VPC를 생성하는 코드를 배포하기 위해 vpc.tf 파일을 구성합니다.
provider "aws" {
version = "~> 2.0"
shared_credentials_file = "~/.aws/credentials"
profile = "terraform"
region = "ap-northeast-2"
}
resource "aws_vpc" "vpc" {
cidr_block = "10.0.0.0/16"
instance_tenancy = "default"
tags = {
Name = "vpc"
}
}
$ terraform init
$ terraform plan
테라폼 백엔드를 위한 S3 버킷과 DynamoDB를 생성 후, terraform plan 명령어를 실행하면 로컬에 상태 파일이 있음을 자동으로 감지합니다.
$ terraform apply
.
.
.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
terraform apply 명령을 입력할 때마다 테라폼은 동시 배포를 방지하고 인프라 상태를 저장합니다. 필요한 경우 롤백할 수 있도록 이전 버전을 생성합니다.
Amazon S3와 DynamoDB로 Backend 구축
백엔드(Backend)는 각 작업 전에 terraform.tfstate 가 저장된 S3 버킷에 액세스하고 이를 코드와 비교하여 인프라에 적용될 변경 사항을 결정합니다.
DynamoDB는 동시에 같은 파일을 수정하지 못하도록 Lock을 생성합니다.
S3 버킷 생성
DynamoDB 테이블과 terraform.tfstate 파일이 저장될 S3 버킷을 생성합니다.
resource "aws_s3_bucket" "bucket" {
bucket = "angelo-terraform-state-backend"
versioning {
enabled = true
}
server_side_encryption_configuration {
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}
object_lock_configuration {
object_lock_enabled = "Enabled"
}
tags = {
Name = "S3 Remote Terraform State Store"
}
}
- aws_s3_bucket : S3 버킷을 생성합니다.
- versioning enabled : 상태 파일의 모든 변경 사항이 저장되고 문제가 발생하면 롤백할 수 있는 버전 관리를 활성화합니다.
- object_lock_enabled : 민감한 데이터를 일반 텍스트로 저장하므로 버킷 내용 암호화합니다.
DynamoDB 생성
DynamoDB에 terraform_state라는 테이블을 생성합니다.
resource "aws_dynamodb_table" "terraform-lock" {
name = "terraform_state"
read_capacity = 5
write_capacity = 5
hash_key = "LockID"
attribute {
name = "LockID"
type = "S"
}
tags = {
"Name" = "DynamoDB Terraform State Lock Table"
}
}
- hash_key : 상태를 잠그는데 사용하는 기본키를 LockID 으로 지정하고, 타입은 문자열(S)로 지정합니다.
- aws_dynamodb_table : DynamoDB Table을 생성합니다.
- (필수) name: 데이터가 저장되는 테이블 이름으로 각 계정의 지역별로 고유한 값이여야 한다.
- (필수) hash_key : 상태를 잠그는데 사용하는 기본키를 LockID라고 지정하고, type은 Stirng(S)로 지정합니다.
백엔드(Backend) 구성
상태 파일이 저장될 위치를 정의합니다.
terraform {
backend "s3" {
bucket = "angelo-terraform-state-backend"
key = "terraform.tfstate"
region = "ap-northeast-2"
dynamodb_table = "terraform_state"
}
}
테라폼 프로젝트 실행
간단한 VPC를 생성하는 코드를 배포하기 위해 vpc.tf 파일을 구성합니다.
provider "aws" {
version = "~> 2.0"
shared_credentials_file = "~/.aws/credentials"
profile = "terraform"
region = "ap-northeast-2"
}
resource "aws_vpc" "vpc" {
cidr_block = "10.0.0.0/16"
instance_tenancy = "default"
tags = {
Name = "vpc"
}
}
$ terraform init
$ terraform plan
테라폼 백엔드를 위한 S3 버킷과 DynamoDB를 생성 후, terraform plan 명령어를 실행하면 로컬에 상태 파일이 있음을 자동으로 감지합니다.
$ terraform apply
.
.
.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
terraform apply 명령을 입력할 때마다 테라폼은 동시 배포를 방지하고 인프라 상태를 저장합니다. 필요한 경우 롤백할 수 있도록 이전 버전을 생성합니다.
Amazon S3와 DynamoDB로 Backend 구축
백엔드(Backend)는 각 작업 전에 terraform.tfstate 가 저장된 S3 버킷에 액세스하고 이를 코드와 비교하여 인프라에 적용될 변경 사항을 결정합니다.
DynamoDB는 동시에 같은 파일을 수정하지 못하도록 Lock을 생성합니다.
S3 버킷 생성
DynamoDB 테이블과 terraform.tfstate 파일이 저장될 S3 버킷을 생성합니다.
resource "aws_s3_bucket" "bucket" {
bucket = "angelo-terraform-state-backend"
versioning {
enabled = true
}
server_side_encryption_configuration {
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}
object_lock_configuration {
object_lock_enabled = "Enabled"
}
tags = {
Name = "S3 Remote Terraform State Store"
}
}
- aws_s3_bucket : S3 버킷을 생성합니다.
- versioning enabled : 상태 파일의 모든 변경 사항이 저장되고 문제가 발생하면 롤백할 수 있는 버전 관리를 활성화합니다.
- object_lock_enabled : 민감한 데이터를 일반 텍스트로 저장하므로 버킷 내용 암호화합니다.
DynamoDB 생성
DynamoDB에 terraform_state라는 테이블을 생성합니다.
resource "aws_dynamodb_table" "terraform-lock" {
name = "terraform_state"
read_capacity = 5
write_capacity = 5
hash_key = "LockID"
attribute {
name = "LockID"
type = "S"
}
tags = {
"Name" = "DynamoDB Terraform State Lock Table"
}
}
- hash_key : 상태를 잠그는데 사용하는 기본키를 LockID 으로 지정하고, 타입은 문자열(S)로 지정합니다.
- aws_dynamodb_table : DynamoDB Table을 생성합니다.
- (필수) name: 데이터가 저장되는 테이블 이름으로 각 계정의 지역별로 고유한 값이여야 한다.
- (필수) hash_key : 상태를 잠그는데 사용하는 기본키를 LockID라고 지정하고, type은 Stirng(S)로 지정합니다.
백엔드(Backend) 구성
상태 파일이 저장될 위치를 정의합니다.
terraform {
backend "s3" {
bucket = "angelo-terraform-state-backend"
key = "terraform.tfstate"
region = "ap-northeast-2"
dynamodb_table = "terraform_state"
}
}
테라폼 프로젝트 실행
간단한 VPC를 생성하는 코드를 배포하기 위해 vpc.tf 파일을 구성합니다.
provider "aws" {
version = "~> 2.0"
shared_credentials_file = "~/.aws/credentials"
profile = "terraform"
region = "ap-northeast-2"
}
resource "aws_vpc" "vpc" {
cidr_block = "10.0.0.0/16"
instance_tenancy = "default"
tags = {
Name = "vpc"
}
}
$ terraform init
$ terraform plan
테라폼 백엔드를 위한 S3 버킷과 DynamoDB를 생성 후, terraform plan 명령어를 실행하면 로컬에 상태 파일이 있음을 자동으로 감지합니다.
$ terraform apply
.
.
.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
terraform apply 명령을 입력할 때마다 테라폼은 동시 배포를 방지하고 인프라 상태를 저장합니다. 필요한 경우 롤백할 수 있도록 이전 버전을 생성합니다.
'DevOps' 카테고리의 다른 글
[Packer] 패커로 AMI(이미지) 만들기 (0) | 2022.11.01 |
---|---|
[Terraform] 기존 리소스 가져오기 terraforming 설치 및 사용 (0) | 2022.10.31 |
[AWS/Terraform] 테라폼으로 EC2 인스턴스 프로비저닝 (0) | 2022.10.29 |
[AWS] CloudWatch Logs 이용하여 로그 수집 (0) | 2022.10.28 |
[EC2/Python] Jenkins로 Flask 프로젝트 배포하기 (0) | 2022.09.30 |