[Cloud]/[Terraform]

    [Terraform] 프로비저너와 사용자 데이터

    테라폼을 이용한 리소스 생성 시 몇가지 작업들을 일괄적으로 해주는 방법이 있습니다.   사용자 데이터와 프로비저너를 이용하는 방법인데요 그 둘을 알아보고 차이점에 대해서 설명해 볼까 합니다.  1. 사용자 데이터(user data)  EC2 등의 원격 리소스에서 첫 부팅시 필요한 작업을 하기 위해서 사용됩니다. 부팅이 되면서 필요한 작업들을 일괄적으로 처리해주는 역할입니다.  # main.tf for awsresource "aws_instance" "webserver" { ami = "ami-0edab43b6fa892279" instance_type = "t2.micro" tags = { Name = "webserver" Description = "An Nginx WebServer om ..

    [Terraform] S3에서 상태 파일 업로드, 상태 파일 관리 명령어

    1. 테라폼의 상태 파일  테라폼의 구성 파일(configuration)과 달리 상태 파일(terraform.tfstate)은 버전 제어 시스템(github)에 저장하지 않는 것이 권장됩니다. 왜냐하면 상태 파일은 인프라에 대한 모든 정보를 저장하고 있기 때문에 민감한 세부 정보를 타인이 확인할 수 있어서 그렇습니다.  그래서 테라폼 상태 파일은 안전한 공유 저장소(S3, hashicorp cloud, google cloud storage, terraform cloud)에 저장하는 것이 권장됩니다.   S3는 백엔드 옵션으로 상태 잠금을 지원합니다. 그래서 여러 사용자가 동시에 terraform 상태 파일을 변경하는 것을 방지할 수 있습니다.  여러 사용자가 동시에 같은 상태 파일에 접근해서 변경을 시도..

    [Terraform] 테라폼으로 AWS DynamoDB 생성, 업로드(GSI)

    1. dynamodb 생성 resource "aws_dynamodb_table" "cars" { name = "cars" hash_key = "VIN" billing_mode = "PAY_PER_REQUEST" attribute { name = "VIN" type = "S" }}  dynamoDB 생성하는 리소스는 위와 같이 생겼습니다.   리소스 유형은 "aws_dynamodb_table"이 되고, 리소스 이름은 "cars"입니다. name은 실제로 dynamoDB의 이름이고 hash_key는 기본키(primary key)로서 반드시 있어야 합니다.  그리고 hash_key는 속성(attribute)값이 반드시 있어야 합니다. 여기서는 name = "VIN"으로 하고 type = "..

    [Terraform] 테라폼 라이프 사이클(create_before_destroy, prevent_destroy)

    1. create_before_destroy  테라폼은 리소스를 업데이트 할 때 기본적으로 리소스를 파괴한 뒤 다시 생성합니다.   기존에 3개의 서버를 가진(서버1, 2, 3) 버전 1.17의 엔진엑스를 사용하고 있을 때, 업데이트를 통해 1.17을 1.18로 만들고 싶은 경우 서버1을 업데이트하지 않고, 서버1을 지우고 1.18 버전을 가지는 서버4를 만들어 대체하도록 합니다. 같은 방식으로 서버2, 3도 서버5, 6으로 대체합니다.  테라폼에서 라이프 사이클 조정(create_before_destroy)을 통해 삭제되기 전에 생성하도록 지정하여 서비스가 중단 없이 인프라를 업데이트할 수 있습니다.  resource "local_file" "pet" { filename = "/root/pets...

    [Terraform] 리소스 참조(암묵적 참조, 명시적 참조)

    *유데미에서 진행하는 Terraform for the Absolute Beginners with Labs강의를 바탕으로 제작되었습니다.  테라폼에서 다른 리소스의 값을 참조할 때 기본적으로 다음과 같은 형식을 사용합니다.  ..  참조하는 방법 2가지 방법을 알아보겠습니다  1. 다른 리소스의 값을 참조하는 법(암묵적 참조)  *참조 특성을 이용해 리소스끼리 연결하는 법 첫 번째 테라폼 리소스를 보겠습니다.  variable "filename" { default = "/root/pet-name.txt"}variable "prefix" { default = "Mrs"}variable "separator" { default = "."}variable "length" { default = 1}resou..

    [Terraform] 테라폼 변수 타입 종류

    테라폼은 직접 변수의 유형과 값을 입력하는 대신 variable 타입을 만들어 구성 요소의 값을 채워넣을 수 있습니다.  1. 기본 변수 유형(문자열, 숫자, bool)  테라폼 기본 변수 유형은 문자열, 숫자, bool이 있습니다.   # 문자열 변수variable "prefix" { default = "Mrs" type = string description = "the prefix to be set"}  기본값과, 타입, 그리고 내용을 적어서 사용할 수 있습니다.  # 숫자형 변수variable "length" { default = "1" type = number description = "the path of local file"}  변수의 값을 변경하고 싶을 때에는 defualt = "..