테라폼 /
terraform
- terraform 다운로드: Downloads | Terraform by HashiCorp
- 쿠...sal: [컴] Terraform 사용법
장점
위 글에 있는 terraform 장점:
- 인프라를 배포하고 관리하는 동안 사람의 실수 가능성을 줄입니다.
- 동일한 템플릿을 여러 번 배포하여 동일한 개발, 테스트 및 프로덕션 환경을 만듭니다.
- 개발 및 테스트 환경을 요청 시 만들어서 비용을 줄입니다.
- 팀 구성원은 제안된 변경 내용과 그 영향을 이해하여 보다 효과적으로 공동 작업할 수 있습니다.
- 의도하지 않은 변경 내용은 개발 프로세스 초기에 확인할 수 있습니다.
resource 정의 하는 방법
아래처럼 resource 를 정의한다. 저기서 aws_s3_bucket 값은 terraform 에서 지정해 놓은 값이다.(참고)
resource "aws_s3_bucket" "b" {
bucket = "my-tf-test-bucket"
tags = {
Name = "My bucket"
Environment = "Dev"
}
}
resource "aws_s3_bucket_acl" "example" {
bucket = aws_s3_bucket.b.id
acl = "private"
arn = "arn:aws:s3:::myservice-static-files"
}
terraform으로 aws 사용
terraform doc
해당 provider 에 대한 resource, argument, attribute 를 찾는법
provider 를 선택한다. 이 provider 가 cloud 제공자(provider)가 된다.
선택후, 오른쪽에 Documentation
을 누르자. 그러면 왼쪽에
목차가 보이는데, 그것들이 전부 사용할 수 있는 resource로 보면 될 듯
하다.
이제 다시 위의 정의한 resource 를 보자.
resource "aws_vpc" "main" {
cidr_block = "160.0.0.0/16"
# enable_dns_hostnames = true
}
- 여기서
aws_vpc
에 다른 resource 를 넣을 수 있다. main
은 이름?(label) 같은 값이라 보면된다. 우리가 설정하고 싶은 값으로 설정하면 된다.cidr_block
은 aws_vpc 의 Argument 이다. 이 argument 는 필수적인 것도 있고, optional 도 있다.
- ‘Attribute’ 도 넣을 수 있다. 대체로 이 attribute 는 현재 resource가
가지고 있는 값이라 보면 될 듯 하다. argument 로 넘기는 값들은 내가
바꾸고 싶은 값이고, 만약 우리가 terracognita 등을 이용해서 aws 의 infra
내용을 terraform 으로 가져온다면, attribute 가 설정될 것이다. 그래서
enable_dns_hostnames
은 attribute 와 argument 둘다에 들어가 있다.
terraform 사용 명령어
terraform init
: terraform 을 시작하려면terraform init
을 하면 된다. 그런데terraform init
을 위해서는 terraform configuration file (version.tf
) 가 필요하다. 이미 만들어진 tf 가 있는경우 terraform init 을 하면 필요한 plugin 들을 download 하게된다.
terraform plan
: terraform plan 을 실행하면 execution plan 을 생성한다.terraform apply
: 설정(configuration) 파일을 변경한 후 deploy 할 때 사용terraform -v
: terraform 버전 확인
terracognita
terracognita 를 이용해서 aws 등에 이미 설치된 infra 대한 terraform 값을 얻을 수 있다.
terracognita aws --hcl vpc --tfstate terraform.tfstate --aws-default-region ap-northeast-2 -i aws_vpc
--hcl vpc
를 하면 vpc folder 를 만들고 그 안에 .tf file들을 만든다.--tfstate terraform.tfstate
: TFState 을 기록할 파일이름--aws-default-region string
: 검색한 region 을 정해준다.terracognita aws
일 때 쓰이는 flag이다.-i vpc
: 특정 resource에 대한 terraform 을 가져올 때 사용,-i
option 을 하지 않으면 전부 가져온다.
d:\a\prog\terracognita\demo1>d:\a\apps\terracognita\terracognita-windows-amd64.exe --help
Reads from Providers and generates a Terraform configuration, all the flags can be used also with ENV (ex: --aws-access-key == AWS_ACCESS_KEY)
Usage:
terracognita [command]
Available Commands:
aws Terracognita reads from AWS and generates hcl resources and/or terraform state
azurerm Terracognita reads from Azure and generates hcl resources and/or terraform state
google Terracognita reads from GCP and generates hcl resources and/or terraform state
help Help about any command
version Prints the current build version
vsphere Terracognita reads from vSphere and generates hcl resources and/or terraform state
Flags:
-d, --debug Activate the debug mode which includes TF logs via TF_LOG=TRACE|DEBUG|INFO|WARN|ERROR configuration https://www.terraform.io/docs/internals/debugging.html
-e, --exclude strings List of resources to not import, this names are the ones on TF (ex: aws_instance). If not set then means that none the resources will be excluded
--hcl string HCL output file or directory. If it's a directory it'll be emptied before importing
--hcl-provider-block Generate or not the 'provider {}' block for the imported provider (default true)
-h, --help help for terracognita
-i, --include strings List of resources to import, this names are the ones on TF (ex: aws_instance). If not set then means that all the resources will be imported
--interpolate Activate the interpolation for the HCL and the dependencies building for the State file (default true)
--log-file string Write the logs with -v to this destination (default "C:\\Users\\namh\\AppData\\Local\\cache/terracognita/terracognita.log")
--module string Generates the output in module format into the directory specified. With this flag (--module) the --hcl is ignored and will be generated inside of the module
--module-variables string Path to a file containing the list of attributes to use as variables when building the module. The format is a JSON/YAML, more information on https://github.com/cycloidio/terracognita#modules
--target strings List of resources to import via ID, those IDs are the ones documented on Terraform that are needed to Import. The format is 'aws_instance.ID'
--tfstate string TFState output file
-v, --verbose Activate the verbose mode
Use "terracognita [command] --help" for more information about a command.
d:\a\prog\terracognita\demo1>d:\a\apps\terracognita\terracognita-windows-amd64.exe aws --help
Terracognita reads from AWS and generates hcl resources and/or terraform state
Usage:
terracognita aws [flags]
terracognita aws [command]
Available Commands:
resources List of all the AWS supported Resources
Flags:
--aws-access-key string Access Key (required)
--aws-default-region string Region to search in, for now * is not supported (required)
--aws-profile string Name of the Profile to use with the Credentials
--aws-secret-access-key string Secret Key (required)
--aws-session-token string Use to validate the temporary security credentials
--aws-shared-credentials-file string Path to the AWS credential path
-h, --help help for aws
-t, --tags strings List of tags to filter with format 'NAME:VALUE'
Global Flags:
-d, --debug Activate the debug mode which includes TF logs via TF_LOG=TRACE|DEBUG|INFO|WARN|ERROR configuration https://www.terraform.io/docs/internals/debugging.html
-e, --exclude strings List of resources to not import, this names are the ones on TF (ex: aws_instance). If not set then means that none the resources will be excluded
--hcl string HCL output file or directory. If it's a directory it'll be emptied before importing
--hcl-provider-block Generate or not the 'provider {}' block for the imported provider (default true)
-i, --include strings List of resources to import, this names are the ones on TF (ex: aws_instance). If not set then means that all the resources will be imported
--interpolate Activate the interpolation for the HCL and the dependencies building for the State file (default true)
--log-file string Write the logs with -v to this destination (default "C:\\Users\\namh\\AppData\\Local\\cache/terracognita/terracognita.log")
--module string Generates the output in module format into the directory specified. With this flag (--module) the --hcl is ignored and will be generated inside of the module
--module-variables string Path to a file containing the list of attributes to use as variables when building the module. The format is a JSON/YAML, more information on https://github.com/cycloidio/terracognita#modules
--target strings List of resources to import via ID, those IDs are the ones documented on Terraform that are needed to Import. The format is 'aws_instance.ID'
--tfstate string TFState output file
-v, --verbose Activate the verbose mode
Use "terracognita aws [command] --help" for more information about a command.
terraform.tfstate 저장
- terraform - Should I commit .tfstate files to Git? - Stack Overflow
- How to manage Terraform state. A guide to file layout, isolation, and… | by Yevgeniy Brikman | Gruntwork : aws s3 bucket 에 저장하는 법
- https://developer.hashicorp.com/terraform/language/settings/backends/s3
tools
- vscode extension : GitHub - hashicorp/vscode-terraform: HashiCorp Terraform VSCode extension
- Terragrunt | Terraform wrapper : 반복되는 terraform 내역을 .tf 로 만들어 놓은듯, 그래서 download 받아서 변수만 다르게 설정해 주면 되게 해 놓은듯 싶다. 그런데, Terraform 에서 지원하는 Module Sources 도 있는 듯 하다. 이것을 쓰는 것이 나아보인다.
- Brainboard, Terraform Reverse Engineer : https://www.brainboard.co 라는 곳
- tfsec : terraform code에서 보안문제를 찾아준다.
- StreamAlert 3.5.0 documentation, StreamAlert 는 여러 클라우드를 한곳에서 모니터링하게 해준다.
- tflint, GitHub - terraform-linters/tflint at hackernoon.com, terraform 에 대한 lint
- terraform
graph
- terraform graph 를 좀 더 보기좋게 만들어준다. 만들어진 html 는 diagram 의 재배치도 가능하다.
terraform graph | terraform-graph-beautifier --output-type=cyto-html > config1.html
See Also
- GitHub -
shuaibiyy/awesome-terraform: Curated list of resources on HashiCorp's
Terraform : terraform 관련 자료들을 모아놓았다.
- Export your Google Cloud resources into Terraform format : gcp 설정을 terraform 으로 export
- AWS Import/Export infrastructure as code (CloudFormation | Terraform) | by Exequiel Barrirero | binbash | Medium :
- Cloudcraft – Draw AWS diagrams : aws 와 연동해서 현재 구성도를 그려준다.
- Provision Infrastructure As Code – AWS CloudFormation – Amazon Web Services : aws 에서 제공하는 Infrastructure As Code(IAC), AWS CloudFormation
- Import Existing AWS Infrastructure to Terraform | by Melissa Gibson | Oct, 2022 | Towards AWS : aws infra 를 terraform 으로 변경, cycloidio/terracognita 를 사용한다.
- Windows 에서 AWS CLI 사용하기
- Understanding Meta-Arguments in Terraform - Knoldus Blogs : terraform 의 meta-arguments
- Terraform Best
Practices: terraform 을 작성할 때도 modulization 을 고려해서
작성하는 법을 알려준다.(코드 구조등)
- 5 Essential Terraform Tools To Use Everyday | Better Programming
- Tools
to Visualize your Terraform plan - DEV Community 👩💻👨💻 : terraform
graph 에 대한 이야기
댓글 없음:
댓글 쓰기