AWS::ElasticLoadBalancing::LoadBalancer
AWS::ElasticLoadBalancing::LoadBalancer タイプは、LoadBalancer を作成します。
注記
このリソースにパブリック IP アドレスが割り当てられており、同じテンプレートに定義されている VPC が関連付けられている場合は、DependsOn
属性を使用して VPC ゲートウェイのアタッチメントへの依存関係を宣言する必要があります。詳細については、「DependsOn 属性」を参照してください。
構文
AWS CloudFormation テンプレートでこのエンティティを宣言するには、次の構文を使用します。
JSON
{ "Type": "AWS::ElasticLoadBalancing::LoadBalancer", "Properties": { "AccessLoggingPolicy" :
AccessLoggingPolicy
, "AppCookieStickinessPolicy" : [AppCookieStickinessPolicy
, ... ], "AvailabilityZones" : [String
, ... ], "ConnectionDrainingPolicy" :ConnectionDrainingPolicy
, "ConnectionSettings" :ConnectionSettings
, "CrossZone" :Boolean
, "HealthCheck" :HealthCheck
, "Instances" : [String
, ... ], "LBCookieStickinessPolicy" : [LBCookieStickinessPolicy
, ... ], "Listeners" : [Listener
, ... ], "LoadBalancerName" :String
, "Policies" : [ElasticLoadBalancing Policy
, ... ], "Scheme" :String
, "SecurityGroups" : [Security Group
, ... ], "Subnets" : [String
, ... ], "Tags" : [Resource Tag, ...
] } }
YAML
Type: AWS::ElasticLoadBalancing::LoadBalancer Properties: AccessLoggingPolicy:
AccessLoggingPolicy
AppCookieStickinessPolicy: -AppCookieStickinessPolicy
AvailabilityZones: -文字列
ConnectionDrainingPolicy:ConnectionDrainingPolicy
ConnectionSettings:ConnectionSettings
CrossZone:Boolean
HealthCheck:HealthCheck
Instances: -文字列
LBCookieStickinessPolicy: -LBCookieStickinessPolicy
Listeners: -Listener
LoadBalancerName:String
Policies: -ElasticLoadBalancing Policy
Scheme:String
, SecurityGroups: -Security Group
Subnets: -文字列
Tags: -Resource Tag
プロパティ
AccessLoggingPolicy
-
ロードバランサーに対するすべてのリクエストの詳細な情報 (たとえば、リクエストが受信された時刻、クライアントの IP アドレス、レイテンシー、リクエストパス、サーバー応答) をキャプチャします。
Required: No
Type: Elastic Load Balancing AccessLoggingPolicy
更新に伴う要件: 中断はありません。
AppCookieStickinessPolicy
-
アプリケーションによって生成された Cookie に従うスティッキーセッション存続期間を持つ 1 つまたは複数の維持ポリシーを生成します。これらのポリシーは、HTTP/HTTPS リスナーにのみ関連付けることができます。
Required: No
Type: AppCookieStickinessPolicy オブジェクトのリスト。
更新に伴う要件: 中断はありません。
AvailabilityZones
-
ロードバランサーを作成するアベイラビリティーゾーン。
AvailabilityZones
プロパティまたはSubnets
プロパティを指定できますが、両方指定することはできません。注記
ロードバランサーが VPC 内にある場合、
Subnets
プロパティを指定します。Required: No
Type: List of String values
アベイラビリティーゾーンが指定されていないにもかかわらずアベイラビリティーゾーンを追加しようとしている場合、またはすべてのアベイラビリティーゾーンを削除しようとしている場合は更新に伴う要件: 置換。それ以外の場合、更新に伴う中断はありません。
ConnectionDrainingPolicy
-
登録解除されたインスタンスまたは異常なインスタンスがすべての処理中のリクエストを完了できるかどうか。
Required: No
Type: Elastic Load Balancing ConnectionDrainingPolicy
更新に伴う要件: 中断はありません。
ConnectionSettings
-
ロードバランサーのフロントエンド接続とバックエンド接続が、アイドル状態を維持できる期間を指定します。
Required: No
Type: Elastic Load Balancing ConnectionSettings
更新に伴う要件: 中断はありません。
CrossZone
-
ロードバランサーでクロスゾーン負荷分散が有効かどうか。クロスゾーン負荷分散を使用すると、ロードバランサーノードはすべてのアベイラビリティーゾーン間でバックエンドインスタンスへのトラフィックをルーティングします。デフォルトでは、
CrossZone
プロパティはfalse
です。Required: No
タイプ: ブール値
更新に伴う要件: 中断はありません。
HealthCheck
-
インスタンスのアプリケーションのヘルスチェック。
Required: No
タイプ: ElasticLoadBalancing LoadBalancer HealthCheck。
ヘルスチェックが指定されていないにもかかわらずヘルスチェックを追加しようとしている場合、またはヘルスチェックを削除しようとしている場合は更新に伴う要件: 置換。それ以外の場合、更新に伴う中断はありません。
Instances
-
ロードバランサーの EC2 インスタンス ID のリスト。
Required: No
Type: List of String values
更新に伴う要件: 中断はありません。
LBCookieStickinessPolicy
-
ブラウザ (user-agent) の存続期間または指定された有効期間によって制御されるスティッキーセッション存続期間を持つ維持ポリシーを生成します。このポリシーは、HTTP/HTTPS リスナーにのみ関連付けることができます。
Required: No
Type: LBCookieStickinessPolicy オブジェクトのリスト。
更新に伴う要件: 中断はありません。
Listeners
-
このロードバランサーの 1 つ以上のリスナー。各リスナーは特定のポートに登録されている必要があります。1 つのポートに複数のリスナーを登録することはできません。
重要
Listeners
プロパティによって指定されたリスナーのプロパティ値を更新する場合、AWS CloudFormation は既存のリスナーを削除し、更新されたプロパティを使用して新しいリスナーを作成します。AWS CloudFormation がこのアクションを実行している間、クライアントはロードバランサーに接続できません。Required: Yes
Type: ElasticLoadBalancing Listener オブジェクトのリスト。
更新に伴う要件: 中断はありません。
LoadBalancerName
-
ロードバランサーの名前。有効な値については、Elastic Load Balancing API リファレンスバージョン 2012-06-01 の
CreateLoadBalancer
アクションのLoadBalancerName
パラメータを参照してください。名前を指定しない場合、AWS CloudFormation は一意の物理 ID を生成し、その ID をロードバランサー名として使用します。名前は、ロードバランサーのセット内で一意である必要があります。詳細については、「Name タイプ」を参照してください。
重要
名前を指定すると、このリソースの置換が必要な更新はできません。中断が不要であるか、一定の中断が必要な更新であれば、行うことができます。リソースを置き換える必要がある場合は、新しい名前を指定します。
必須: いいえ
タイプ: 文字列
更新に伴う要件: 置換
Policies
-
この Elastic Load Balancing に適用する Elastic Load Balancing ポリシーのリスト。バックエンドサーバーポリシーのみを指定します。詳細については、Elastic Load Balancing API リファレンスバージョン 2012-06-01 の「DescribeLoadBalancerPolicyTypes」を参照してください。
Required: No
Type: ElasticLoadBalancing ポリシーオブジェクトのリスト。
更新に伴う要件: 中断はありません。
Scheme
-
Amazon VPC にアタッチされているロードバランサーに対して、このパラメーターを使用して、使用するロードバランサーのタイプを指定できます。プライベート IP アドレスに解決される DNS 名を持つ内部ロードバランサーを作成するには、
internal
を指定し、パブリック IP アドレスに解決されるパブリックに解決可能な DNS 名を持つロードバランサーを作成するには、internet-facing
を指定します。注記
internal
を指定した場合、アベイラビリティーゾーンではなく、ロードバランサーに関連付けるサブネットを指定する必要があります。Required: No
Type: String
更新に伴う要件: 置換
SecurityGroups
-
Required: No
Type: Virtual Private Cloud (VPC) 内のロードバランサーに割り当てられるセキュリティグループのリスト。
更新に伴う要件: 中断はありません。
Subnets
-
ロードバランサーにアタッチする Virtual Private Cloud (VPC) 内のサブネット ID のリスト。同じアベイラビリティーゾーンにある複数のサブネットを指定しないでください。
AvailabilityZones
プロパティまたはSubnets
プロパティを指定できますが、両方指定することはできません。VPC で Elastic Load Balancing を使用する方法については、Elastic Load Balancing 開発者ガイドの「Amazon VPC で Elastic Load Balancing を使用する方法」を参照してください。
Required: No
Type: List of String values
更新に伴う要件: 置換 サブネットが指定されていないにもかかわらずサブネットを追加しようとしている場合、またはすべてのサブネットを削除しようとしている場合。それ以外の場合、更新に伴う中断はありません。ロードバランサーを更新して同じアベイラビリティーゾーンにある別のサブネットに変更するには、2 段階の更新を実行する必要があります。まず、別のアベイラビリティーゾーンにあるサブネットが使用されるようにロードバランサーを更新する必要があります。この更新が完了したら、元のアベイラビリティーゾーンにある新しいサブネットが使用されるようにロードバランサーを更新します。
Tags
-
このロードバランサーに対する任意のタグのセット (キーと値のペア)。
Required: No
Type: リソースタグ
更新に伴う要件: 中断はありません。
戻り値
参照番号
このリソースの論理 ID が Ref
組み込み関数に提供されると、Ref
によりリソース名が返されます。 例、mystack-myelb-1WQN7BJGDB5YQ
。
Ref
関数の使用方法の詳細については、「Ref」を参照してください。
Fn::GetAtt
Fn::GetAtt
は、このタイプの指定された属性の値を返します。以下には、利用可能な属性とサンプル戻り値のリストが示されます。
CanonicalHostedZoneName
-
ロードバランサーに関連付けられる Route 53 ホストゾーンの名前。
重要
Elastic Load Balancing スキームに対して
internal
を指定する場合は、代わりにDNSName
を使用してください。internal
スキームの場合、ロードバランサーはCanonicalHostedZoneName
値を持ちません。例:
mystack-myelb-15HMABG9ZCN57-1013119603.
us-east-2
.elb.amazonaws.com
CanonicalHostedZoneNameID
-
ロードバランサーに関連付けられる Route 53 ホストゾーン名の ID。
例:
Z3DZXE0Q79N41H
DNSName
-
ロードバランサーの DNS 名。
例:
mystack-myelb-15HMABG9ZCN57-1013119603.
us-east-2
.elb.amazonaws.com
SourceSecurityGroup.GroupName
-
ロードバランサーのバックエンド Amazon EC2 アプリケーションインスタンスのインバウンドルールの一部として使用できるセキュリティグループ。
例:
amazon-elb
SourceSecurityGroup.OwnerAlias
-
ソースセキュリティグループの所有者。
例:
amazon-elb-sg
Fn::GetAtt
の使用の詳細については、「Fn::GetAtt」を参照してください。
例
ヘルスチェックとアクセスログが設定されたロードバランサー
JSON
"ElasticLoadBalancer" : { "Type" : "AWS::ElasticLoadBalancing::LoadBalancer", "Properties" : { "AvailabilityZones" : { "Fn::GetAZs" : "" }, "Instances" : [ { "Ref" : "Ec2Instance1" },{ "Ref" : "Ec2Instance2" } ], "Listeners" : [ { "LoadBalancerPort" : "80", "InstancePort" : { "Ref" : "WebServerPort" }, "Protocol" : "HTTP" } ], "HealthCheck" : { "Target" : { "Fn::Join" : [ "", [ "HTTP:", { "Ref" : "WebServerPort" }, "/" ] ] }, "HealthyThreshold" : "3", "UnhealthyThreshold" : "5", "Interval" : "30", "Timeout" : "5" }, "AccessLoggingPolicy": { "S3BucketName": { "Ref": "S3LoggingBucket" }, "S3BucketPrefix": "MyELBLogs", "Enabled": "true", "EmitInterval" : "60" }, "DependsOn": "S3LoggingBucketPolicy" } }
YAML
ElasticLoadBalancer: Type: AWS::ElasticLoadBalancing::LoadBalancer Properties: AvailabilityZones: Fn::GetAZs: '' Instances: - Ref: Ec2Instance1 - Ref: Ec2Instance2 Listeners: - LoadBalancerPort: '80' InstancePort: Ref: WebServerPort Protocol: HTTP HealthCheck: Target: Fn::Join: - '' - - 'HTTP:' - Ref: WebServerPort - "/" HealthyThreshold: '3' UnhealthyThreshold: '5' Interval: '30' Timeout: '5' AccessLoggingPolicy: S3BucketName: Ref: S3LoggingBucket S3BucketPrefix: MyELBLogs Enabled: 'true' EmitInterval: '60' DependsOn: S3LoggingBucketPolicy
アクセスログが有効なロードバランサー
次のサンプルスニペットでは、ロードバランサーが情報を Logs/AWSLogs/
フォルダに保存することを許可するバケットポリシーを持つ Amazon S3 バケットを作成します。このロードバランサーには、バケットポリシーへの明示的な依存関係も含まれています。ロードバランサーがバケットに書き込むためには、この依存関係をあらかじめ設定しておく必要があります。
AWS
account number
/
JSON
"S3LoggingBucket": { "Type": "AWS::S3::Bucket" }, "S3LoggingBucketPolicy": { "Type": "AWS::S3::BucketPolicy", "Properties": { "Bucket": { "Ref": "S3LoggingBucket" }, "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Sid": "ELBAccessLogs20130930", "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ "arn:aws:s3:::", { "Ref": "S3LoggingBucket" }, "/", "Logs", "/AWSLogs/", { "Ref": "AWS::AccountId" }, "/*" ] ] }, "Principal": { "Ref": "ElasticLoadBalancingAccountID" }, "Action": [ "s3:PutObject" ] } ] } } }, "ElasticLoadBalancer": { "Type": "AWS::ElasticLoadBalancing::LoadBalancer", "Properties": { "AvailabilityZones": { "Fn::GetAZs": "" }, "Listeners": [{ "LoadBalancerPort": "80", "InstancePort": "80", "Protocol": "HTTP" }], "HealthCheck": { "Target": "HTTP:80/", "HealthyThreshold": "3", "UnhealthyThreshold": "5", "Interval": "30", "Timeout": "5" }, "AccessLoggingPolicy": { "S3BucketName": { "Ref": "S3LoggingBucket" }, "S3BucketPrefix": "Logs", "Enabled": "true", "EmitInterval" : "60" } }, "DependsOn": "S3LoggingBucketPolicy" }
YAML
S3LoggingBucket: Type: AWS::S3::Bucket S3LoggingBucketPolicy: Type: AWS::S3::BucketPolicy Properties: Bucket: Ref: S3LoggingBucket PolicyDocument: Version: '2012-10-17' Statement: - Sid: ELBAccessLogs20130930 Effect: Allow Resource: Fn::Join: - '' - - 'arn:aws:s3:::' - Ref: S3LoggingBucket - "/" - Logs - "/AWSLogs/" - Ref: AWS::AccountId - "/*" Principal: Ref: ElasticLoadBalancingAccountID Action: - s3:PutObject ElasticLoadBalancer: Type: AWS::ElasticLoadBalancing::LoadBalancer Properties: AvailabilityZones: Fn::GetAZs: '' Listeners: - LoadBalancerPort: '80' InstancePort: '80' Protocol: HTTP HealthCheck: Target: HTTP:80/ HealthyThreshold: '3' UnhealthyThreshold: '5' Interval: '30' Timeout: '5' AccessLoggingPolicy: S3BucketName: Ref: S3LoggingBucket S3BucketPrefix: Logs Enabled: 'true' EmitInterval: '60' DependsOn: S3LoggingBucketPolicy
接続ストリーミングポリシーを持つロードバランサー
次のスニペットでは、登録解除されたインスタンスまたは異常なインスタンスへの接続を 60 秒後に終了する接続ストリーミングポリシーを有効にしています。
JSON
"ElasticLoadBalancer" : { "Type" : "AWS::ElasticLoadBalancing::LoadBalancer", "Properties" : { "AvailabilityZones" : { "Fn::GetAZs" : "" }, "Instances" : [ { "Ref" : "Ec2Instance1" },{ "Ref" : "Ec2Instance2" } ], "Listeners": [{ "LoadBalancerPort": "80", "InstancePort": "80", "Protocol": "HTTP" }], "HealthCheck": { "Target": "HTTP:80/", "HealthyThreshold": "3", "UnhealthyThreshold": "5", "Interval": "30", "Timeout": "5" }, "ConnectionDrainingPolicy": { "Enabled" : "true", "Timeout" : "60" } } }
YAML
ElasticLoadBalancer: Type: AWS::ElasticLoadBalancing::LoadBalancer Properties: AvailabilityZones: Fn::GetAZs: '' Instances: - Ref: Ec2Instance1 - Ref: Ec2Instance2 Listeners: - LoadBalancerPort: '80' InstancePort: '80' Protocol: HTTP HealthCheck: Target: HTTP:80/ HealthyThreshold: '3' UnhealthyThreshold: '5' Interval: '30' Timeout: '5' ConnectionDrainingPolicy: Enabled: 'true' Timeout: '60'
複数のポリシーを持つロードバランサー
次のスニペットは、ポート 80 と 443 のリスナーでロードバランサーを作成します。このスニペットでは、ポート 80 のプロキシとポート 443 のバックエンドサーバー認証ポリシーが適用されます。
JSON
"ElasticLoadBalancer": { "Type": "AWS::ElasticLoadBalancing::LoadBalancer", "Properties": { "SecurityGroups" : { "Ref" : "SecurityGroups" }, "Scheme" : "internet-facing", "AvailabilityZones": { "Fn::GetAZs": "" }, "Listeners": [ { "LoadBalancerPort": "80", "InstancePort": "80", "Protocol": "TCP", "InstanceProtocol" : "TCP" }, { "LoadBalancerPort": "443", "InstancePort": "443", "Protocol": "HTTPS", "SSLCertificateId" : { "Ref" : "CertARN" }, "PolicyNames" : ["MySSLNegotiationPolicy", "MyAppCookieStickinessPolicy"] } ], "Policies" : [ { "PolicyName" : "MySSLNegotiationPolicy", "PolicyType" : "SSLNegotiationPolicyType", "Attributes" : [ { "Name" : "Protocol-TLSv1", "Value" : "true" }, { "Name" : "Protocol-SSLv2", "Value" : "true" }, { "Name" : "Protocol-SSLv3", "Value" : "false" }, { "Name" : "DHE-RSA-AES256-SHA", "Value" : "true" } ] }, { "PolicyName" : "MyAppCookieStickinessPolicy", "PolicyType" : "AppCookieStickinessPolicyType", "Attributes" : [ { "Name" : "CookieName", "Value" : "MyCookie" } ] }, { "PolicyName" : "MyPublicKeyPolicy", "PolicyType" : "PublicKeyPolicyType", "Attributes" : [ { "Name" : "PublicKey", "Value" : { "Fn::Join" : [ "\n", [ "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDh/51Aohx5VrpmlfGHZCzciMBa", "fkHve+MQYYJcxmNUKMdsWnz9WtVfKxxWUU7Cfor4lorYmENGCG8FWqCoLDMFs7pN", "yGEtpsrlKhzZWtgY1d7eGrUrBil03bI90E2KW0j4qAwGYAC8xixOkNClicojeEz4", "f4rr3sUf+ZBSsuMEuwIDAQAB" ] ] } } ] }, { "PolicyName" : "MyBackendServerAuthenticationPolicy", "PolicyType" : "BackendServerAuthenticationPolicyType", "Attributes" : [ { "Name" : "PublicKeyPolicyName", "Value" : "MyPublicKeyPolicy" } ], "InstancePorts" : [ "443" ] }, { "PolicyName" : "EnableProxyProtocol", "PolicyType" : "ProxyProtocolPolicyType", "Attributes" : [ { "Name" : "ProxyProtocol", "Value" : "true" } ], "InstancePorts" : ["80"] } ] } }
YAML
ElasticLoadBalancer: Type: AWS::ElasticLoadBalancing::LoadBalancer Properties: SecurityGroups: Ref: SecurityGroups Scheme: internet-facing AvailabilityZones: Fn::GetAZs: '' Listeners: - LoadBalancerPort: '80' InstancePort: '80' Protocol: TCP InstanceProtocol: TCP - LoadBalancerPort: '443' InstancePort: '443' Protocol: HTTPS SSLCertificateId: Ref: CertARN PolicyNames: - MySSLNegotiationPolicy - MyAppCookieStickinessPolicy Policies: - PolicyName: MySSLNegotiationPolicy PolicyType: SSLNegotiationPolicyType Attributes: - Name: Protocol-TLSv1 Value: 'true' - Name: Protocol-SSLv2 Value: 'true' - Name: Protocol-SSLv3 Value: 'false' - Name: DHE-RSA-AES256-SHA Value: 'true' - PolicyName: MyAppCookieStickinessPolicy PolicyType: AppCookieStickinessPolicyType Attributes: - Name: CookieName Value: MyCookie - PolicyName: MyPublicKeyPolicy PolicyType: PublicKeyPolicyType Attributes: - Name: PublicKey Value: Fn::Join: - "\n" - - MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDh/51Aohx5VrpmlfGHZCzciMBa - fkHve+MQYYJcxmNUKMdsWnz9WtVfKxxWUU7Cfor4lorYmENGCG8FWqCoLDMFs7pN - yGEtpsrlKhzZWtgY1d7eGrUrBil03bI90E2KW0j4qAwGYAC8xixOkNClicojeEz4 - f4rr3sUf+ZBSsuMEuwIDAQAB - PolicyName: MyBackendServerAuthenticationPolicy PolicyType: BackendServerAuthenticationPolicyType Attributes: - Name: PublicKeyPolicyName Value: MyPublicKeyPolicy InstancePorts: - '443' - PolicyName: EnableProxyProtocol PolicyType: ProxyProtocolPolicyType Attributes: - Name: ProxyProtocol Value: 'true' InstancePorts: - '80'
その他の例
サンプルテンプレートのコレクションからさらに AWS CloudFormation の例を参照することができます: サンプルテンプレート。