内部 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
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