[컴] terraform

테라폼 /

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로 보면 될 듯 하다.

terraform documentation page

이제 다시 위의 정의한 resource 를 보자.

resource "aws_vpc" "main" {
  cidr_block = "160.0.0.0/16"
  # enable_dns_hostnames = true
}
  • 여기서 aws_vpc 에 다른 resource 를 넣을 수 있다.
  • main은 이름?(label) 같은 값이라 보면된다. 우리가 설정하고 싶은 값으로 설정하면 된다.
  • cidr_blockaws_vpc 의 Argument 이다. 이 argument 는 필수적인 것도 있고, optional 도 있다.
  • ‘Attribute’ 도 넣을 수 있다. 대체로 이 attribute 는 현재 resource가 가지고 있는 값이라 보면 될 듯 하다. argument 로 넘기는 값들은 내가 바꾸고 싶은 값이고, 만약 우리가 terracognita 등을 이용해서 aws 의 infra 내용을 terraform 으로 가져온다면, attribute 가 설정될 것이다. 그래서 enable_dns_hostnamesattributeargument 둘다에 들어가 있다.

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 저장

tools

See Also

  1. GitHub - shuaibiyy/awesome-terraform: Curated list of resources on HashiCorp's Terraform : terraform 관련 자료들을 모아놓았다.
  2. Export your Google Cloud resources into Terraform format : gcp 설정을 terraform 으로 export
  3. AWS Import/Export infrastructure as code (CloudFormation | Terraform) | by Exequiel Barrirero | binbash | Medium :
  4. Cloudcraft – Draw AWS diagrams : aws 와 연동해서 현재 구성도를 그려준다.
  5. Provision Infrastructure As Code – AWS CloudFormation – Amazon Web Services : aws 에서 제공하는 Infrastructure As Code(IAC), AWS CloudFormation
  6. Import Existing AWS Infrastructure to Terraform | by Melissa Gibson | Oct, 2022 | Towards AWS : aws infra 를 terraform 으로 변경, cycloidio/terracognita 를 사용한다.
  7. Windows 에서 AWS CLI 사용하기
  8. Understanding Meta-Arguments in Terraform - Knoldus Blogs : terraform 의 meta-arguments 
  9. Terraform Best Practices: terraform 을 작성할 때도 modulization 을 고려해서 작성하는 법을 알려준다.(코드 구조등)
  10. 5 Essential Terraform Tools To Use Everyday | Better Programming
  11. Tools to Visualize your Terraform plan - DEV Community 👩‍💻👨‍💻 : terraform graph 에 대한 이야기

댓글 없음:

댓글 쓰기