[Terraform/AWS] for를 사용하여 ALB에 다중 서브넷 할당

2928 단어 AWSTerraformtech

개시하다


ALB(Application Load Balancer)에 할당된 가상 영역(이하 AZ)은 대부분 여러 개라고 생각한다.
이 경우 각 AZ에서 만든 서브넷은 Terraform의 for로 기술된 ALB에 할당됩니다.

컨디션

  • Terraform 0.12 이후
  • 전제 조건


    전제로 서브넷 사용count 등 여러 개를 제작한다.
    subnet.tf
    resource "aws_subnet" "public" {
      count = 3
    
      availability_zone       = var.availability_zones[count.index]
      cidr_block              = cidrsubnet(aws_vpc.vpc.cidr_block, 4, count.index)
      
      // 略
      }
    }
    
    variables.tf
    variable "availability_zones" {
      type    = list(string)
      default = ["ap-northeast-1a", "ap-northeast-1c", "ap-northeast-1d"]
    }
    
    여기에 등장하는count,count.index,cidrsubnet 함수에 대해서는 아래의 글을 참조하십시오.
  • [Terraform/AWS] 여러 개의 서브넷을 동시에 생성 - Zenn
  • for


    ALB(aws lb)에서는 할당된 서브넷을 subnets로 지정할 수 있으며, 여기서 사용for할 수 있습니다.
    alb.tf
    resource "aws_lb" "alb" {
      load_balancer_type = "application"
    
      // 略
    
      subnets = [
        for s in aws_subnet.public :
        s.id
      ]
      
      // 略
    }
    
    aws_subnet.public 전제에 기재된 subnet.tf처럼 서로 다른 AZ로서의 총 3개의 서브넷이 저장되어 있다.
    여기에는 forin를 사용하여 aws_subnet.public에서 서브넷을 꺼내 s에 저장하고s.id로 이 서브넷을 참조한id.
    이 세 차례가 중복되어 aws_subnet.public의 모든 서브넷이 ALB에 분배되고 다중 AZ화되었다.

    끝맺다

    forin:로 구성된 문법은 파이톤과 매우 비슷하다.
    그러나 다음 행이 들여쓰지 않는 것은 Terraform의 올바른 쓰기 방법입니다.terraform fmt 실행 후 다음과 같은 무축소 형식으로 수정됩니다.
    alb.tf
        subnets = [
          for s in aws_subnet.public :
    -       s.id
    +     s.id
        ]
    

    참고 자료


  • For Expressions - Configuration Language - Terraform by HashiCorp

  • Terraform 0.11→0.12에 추가된 새로운 기능입니다.IO
  • 좋은 웹페이지 즐겨찾기