コンテンツにスキップ

内部 Application Load Balancers

デフォルトでは、 Load Balanced Web Service 用に作成された Environment 内の ALB は インターネットからアクセス可能です。プライベート IP アドレスのみを利用する内部ロードバランサーを作るためには、Environment と Workload に幾つかの設定が必要です。

Environment

内部ロードバランサーは Environment レベルのリソースであり、他の許可された Service 間で共有されます。ロードバランサーの HTTPS を有効にするには、既存の証明書の ARN をインポートするように Environment Manifest を変更します。

ロードバランサーに証明書が適用されていない場合、Copilot はロードバランサーを http://{env name}.{app name}.internal エンドポイントに関連付け、個々の Service は http://{service name}.{env name}.{app name}.internal で到達可能な状態にします。

// To reach the "api" service behind the internal load balancer
endpoint := fmt.Sprintf("http://api.%s.%s.internal", os.Getenv("COPILOT_ENVIRONMENT_NAME"), os.Getenv("COPILOT_APPLICATION_NAME"))
resp, err := http.Get(endpoint)

Service

内部ロードバランサーの背後に設置できる唯一の Service タイプは Backend Service です。Service をデプロイした Environment で ALB を作成する様に Copilot に指示をする為に、http フィールドを Backend Service ワークロードの Manifest に追加してください。

# in copilot/{service name}/manifest.yml
http:
  path: '/'
network:
  vpc:
    placement: private
Service をデプロイしようとしている VPC 内に既存の内部 ALB がある場合、 デプロイ前に Manifest 内で ALB を指定して Backend Service 毎にインポートできます。
http:
  path: '/'
  alb: [name or ARN]

高度な設定

サブネット配置

内部 ALB を配置するプライベートサブネットを正確に指定できます。

copilot env init を実行する時に、--internal-alb-subnets フラグを利用し、ALB を配置したいサブネットの ID を指定します。

エイリアス、ヘルスチェックなど

Backend Service で利用する http フィールドには、 Load Balanced Web Services の http フィールドで利用する全てのサブフィールドと機能があります。

http:
  path: '/'
  healthcheck:
    path: '/_healthcheck'
    port: 8080
    success_codes: '200,301'
    healthy_threshold: 3
    unhealthy_threshold: 2
    interval: 15s
    timeout: 10s
    grace_period: 45s
  deregistration_delay: 5s
  stickiness: false
  allowed_source_ips: ["10.24.34.0/23"]
  alias: example.com

alias では、1. 既存のプライベートホストゾーンを持ち込むか、2. デプロイ後に Copilot とは別に独自のエイリアスレコードを追加できます。1 つのエイリアスを追加する場合:

http:
  alias: example.com
  hosted_zone: HostedZoneID1
または、ホストゾーンを共有する複数のエイリアスの場合:
http:
  alias: ["example.com", "www.example.com"]
  hosted_zone: HostedZoneID1

または、複数のエイリアスがあり、そのうちの幾つかは、トップレベルのホストゾーンを使う場合:

http:
  hosted_zone: HostedZoneID1
  alias:
    - name: example.com
    - name: www.example.com
    - name: something-different.com
      hosted_zone: HostedZoneID2