AWS Global Accelerator로 Loadbalancer PublicIP 고정

7279 단어 TerraformAWS

비기능 요구 사항 개요


  • 외부 시스템과 데이터 연계하고 있을 때, 외부 시스템측이 DNS명이 아니고, IP를 지정한 접속만이라고 하는 비기능 요건도 있거나 합니다. PublicIP가 있는 EC2 Instance에서 리버스 프록시를 만들거나 Network Loadbalancer를 사용하면 IP를 지정한 연결 요구 사항을 충족할 수 있습니다. 그러나 SSL 가속 기능이 없거나 백엔드 서버의 Inbound를 0.0.0.0/0으로 설정해야 하거나 EC2에 의존하는 여러 설정이 있습니다.
    또한 Direct Connect와 VPC 엔드포인트를 사용하여 외부 시스템과 동일한 폐역 네트워크로 구축할 수도 있습니다.
    그러나 사용하는 컴포넌트도 많아 외부 시스템과의 작업 조정이나 데이터 제공의 가용성을 높이기 위한 비용이 높아지는 경향이 있습니다.
    또한 Application Loadbalancer와 Classic Loadbalancer에는 PublicIP가 두 개 있지만, 이 IP는 동적이며 AWS의 모든 타이밍과 트래픽 수요에 따라 달라집니다. 그 때문에, IP 변경된 것을 검지하기 위해서 폴링 해 변경을 실시하는 구조가 필요하기도 합니다.
  • Global Accelerator를 사용하면 LoadBalancer의 IP를 실질적으로 고정할 수 있습니다. 복잡해지기 쉬운 구성을 단순화할 수 있습니다.


  • Global Accelerator?


  • Global Accerelator를 사용하면 Load Balancer 또는 EC2 Instance에 두 개의 고정 IP 주소를 연결할 수 있습니다. Global Accerelator는 응용 프로그램 서버의 프런트 엔드 인터페이스 역할을하므로 응용 프로그램 서버의 IP 주소를 업데이트하지 않고 Blue Green deployment를 실행할 수 있습니다.
  • 인터넷에 연결된 단일 액세스 포인트로 Global Accerelator를 사용하여 AWS에서 실행 중인 애플리케이션 서버를 분산 서비스 간섭(DDoS) 공격으로부터 보호할 수 있습니다.
    Global Accelerator는 전용 VPC에서 실행됩니다. VPC 간의 피어링 연결에서 Shield Advanced가 작동하여 분산 서비스 간섭(DDoS) 공격으로부터 보호됩니다.
    게다가 애플리케이션까지 홉 수가 적은 NW 경로를 사용할 수 있기 때문에 이론적으로 성능이 향상됩니다.

  • 이미지





    설정 파일



    아래는 terraform의 설정 예입니다.

    multiple_provider.tf
    provider "aws" {
      region  = "ap-northeast-1"
      profile = "terraform-user01"
    }
    
    provider "aws" {
      region  = "us-west-2"
      alias   = "oregon"
      profile = "terraform-user02"
    }
    

    globalaccelerator_accelerator.tf
    resource "aws_globalaccelerator_accelerator" "xxxxxxxxxx_accelerator" {
      provider        = aws.oregon
      name            = "xxxxxxxxxx"
      ip_address_type = "IPV4"
      enabled         = true
    
      attributes {
        flow_logs_enabled   = true
        flow_logs_s3_bucket = "xxxxxxxxxx"
        flow_logs_s3_prefix = "xxxxxxxxxx/"
      }
    }
    

    globalaccelerator_listener.tf
    resource "aws_globalaccelerator_listener" "xxxxxxxxxx_listener" {
      provider        = aws.oregon
      accelerator_arn = aws_globalaccelerator_accelerator.xxxxxxxxxx_accelerator.id
      client_affinity = "SOURCE_IP"
      protocol        = "TCP"
    
      port_range {
        from_port = 80
        to_port   = 80
      }
    }
    

    globalaccelerator_endpoint_group.tf
    resource "aws_globalaccelerator_endpoint_group" "xxxxxxxxxx_endpoint_group" {
      provider                      = aws.oregon
      endpoint_group_region         = "ap-northeast-1"
      health_check_interval_seconds = 30
      health_check_path             = "/"
      health_check_protocol         = "TCP"
      listener_arn                  = aws_globalaccelerator_listener.xxxxxxxxxx_listener.id
      threshold_count               = 3
      traffic_dial_percentage       = 100
    
      endpoint_configuration {
        endpoint_id = "arn:aws:elasticloadbalancing:ap-northeast-1:xxxxxxxxxx:loadbalancer/app/xxxxxxxxxx"
        weight      = 128
      }
    }
    

    확인


  • Global Accelerator 작성 전
  • 대상에 ALB를 지정한 Global Accelerator를 만든 후 다음 2IP가 부여되었습니다.
  • 이 2개의 정적 IP 주소를 임의의 FQDN의 A 레코드로서 정의하면 작업 완료입니다.

  • 수수료


  • 고정 요금: 액셀러레이터가 삭제될 때까지 계정에서 액셀러레이터가 실행되는 1시간(1시간 미만은 위로 올림)마다 0.025 USD 요금이 부과됩니다.
  • 프리미엄 데이터 전송 요금(DT-Premium): AWS 네트워크를 통해 전송되는 데이터의 기가바이트당 요금입니다.

  • 소감


  • 클라이언트로부터 적은 홉수로 어플리케이션에 도달할 수 있다는 것은 IP를 고정하는 운용의 부산물로 해의 레이턴시 저감 등은 임팩트가 있습니다만, 달에 $130 정도 걸리므로 품목과 상담하면서 운용할 필요가 있습니다 .
  • 좋은 웹페이지 즐겨찾기