Terraform의remote복습해 주세요.

4248 단어 Terraformtech
Terraform의 terraformremote_state를 사용했기 때문에 머리를 정리했습니다.
* 소스 코드가 여기에 업로드되었으니 자유롭게 사용하십시오.terraform_remote_state_sample

terraform_remote_state is 뭐라고?


Terraform 공식 문서(The terraform_remote_state Data Source:
The terraform_remote_state data source retrieves the root module output values from some other Terraform configuration, using the latest state snapshot from the remote backend.
따라서 다른 자원에서 어떤 자원의output을 참조할 수 있다. (원격 저장의 최신 물건이기도 하다.)
Terraform의 자원은 A와 B로 분리되어 관리되지만 어떤 이유로'B에서 A까지의 xx를 참조하고 싶다'는 상황에 도움이 된다.
절차로서 대체로 다음과 같은 느낌이다.
  • S3에 상태 관리를 위한 통 준비
  • Terraform 및 S3 구간 결합
  • output자원 정의

  • 사용terraform_remote_stateoutput에서 얻은 값 참조
  • 그럼 한번 봅시다.

    물줄기


    관리되는 IAM Role을 독립적으로 관리하는 디렉토리iamiam2, iam 실행 후 실행iam2, 실행 결과와 관련된 정보를 iam2 측면에서 사용하려는 경우를 가정해 봅니다.

    1. S3에서 상태 관리를 위한 물통 준비


    다음 리소스를 적용하여 S3 섹션 만들기
    resource "aws_s3_bucket" "sample_tf" {
      bucket = "sample-tf"
      versioning {
        enabled = true
      }
    }
    

    2. Terraform과 S3 통 협력

    iam측에서 다음과 같은 느낌의 정의를 iam로 제작backend.tf하면.제작된 S3 통은 연합할 수 있다.
    S3 물통을 미리 준비해야 하기 때문에 주의가 필요하다.
    terraform {
      backend "s3" {
        bucket = "sample-tf"
        key    = "terraform.tfstate1"
        region = "ap-northeast-1"
      }
    }
    

    3. output 자원 정의

    terraform init면은 다음과 같이 정의됩니다.
    // main.tf
    data "aws_iam_policy_document" "sample_tf" {
      statement {
        actions = ["sts:AssumeRole"]
    
        principals {
          type        = "Service"
          identifiers = ["ec2.amazonaws.com"]
        }
      }
    }
    
    resource "aws_iam_role" "sample_tf" {
      name                  = "sample_tf"
      assume_role_policy    = data.aws_iam_policy_document.sample_tf.json
      description           = "for terraform example"
      force_detach_policies = false
      tags                  = {}
    }
    
    output "iam_role_name" {
      value = aws_iam_role.sample_tf.name
    }
    
    이 상태에서 iam하면 다음과 같은 느낌으로 만들어집니다terraform plan
    Plan: 1 to add, 0 to change, 0 to destroy.
    
    Changes to Outputs:
      + iam_role_arn = (known after apply)
    
    적용할 때 S3 구간에backend가 지정한 자원을 만듭니다.

    4. output을 사용하여 output을 하는 값을 참조한다

    terraform_remote_state면은 다음과 같이 정의됩니다.
    terraform_remote_state를 사용하여 iam2의name 정의aws_iam_role.sample_tf2측에 정의된name를 참조합니다.
    data "aws_iam_policy_document" "sample_tf2" {
      statement {
        actions = ["sts:AssumeRole"]
    
        principals {
          type        = "Service"
          identifiers = ["ec2.amazonaws.com"]
        }
      }
    }
    
    resource "aws_iam_role" "sample_tf2" {
      // data.terraform_remote_state.${terraform_remote_stateで定義したリソース名}.outputs.${main/iam側のoutputで指定したリソース名}
      name                  = "${data.terraform_remote_state.sample_tf.outputs.iam_role_name}-2"
      assume_role_policy    = data.aws_iam_policy_document.sample_tf2.json
      description           = "for terraform example"
      force_detach_policies = false
      tags                  = {}
    }
    
    aply에 적용하면 IAM Roleiam이 만들어진다.

    참고 자료

  • The terraform_remote_state Data Source
  • 【Terraform】terraform_remote_state 데이터 소스 사용 방법
  • 좋은 웹페이지 즐겨찾기