

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# CodeDeploy と Elastic Load Balancing の統合
<a name="integrations-aws-elastic-load-balancing"></a>

CodeDeploy のデプロイ中、インスタンスが準備完了ではない、現在デプロイ中、または環境の一部として不要になった場合は、ロードバランサーはそのインスタンスへのインターネットトラフィックのルーティングを防止します。ただし、ロードバランサーの正確な役割は、Blue/Green デプロイで使用されるかインプレースデプロイで使用されるかによって異なります。

**注記**  
Elastic Load Balancing ロードバランサーの使用は Blue/Green デプロイでは必須、インプレースデプロイでは任意です。

## Elastic Load Balancing のタイプ
<a name="integrations-aws-elastic-load-balancing-types"></a>

Elastic Load Balancing は、CodeDeploy デプロイで使用可能な、Classic Load Balancer、Application Load Balancer、Network Load Balancer の 3 つのタイプのロードバランサーを提供します。

Classic Load Balancer  
ルーティングおよび負荷分散を、トランスポートレイヤー (TCP/SSL) またはアプリケーションレイヤー (HTTP/HTTPS) のいずれかで行います。VPC がサポートされています。  
Classic Load Balancer は Amazon ECS デプロイではサポートされていません。

Application Load Balancer  
ルーティングと負荷分散をアプリケーションレイヤー (HTTP/HTTPS) で行い、パスベースのルーティングをサポートしています。Virtual Private Cloud (VPC) 内の EC2 の各インスタンスまたはコンテナインスタンスのポートにリクエストをルーティングできます。  
 Application Load Balancer のターゲットグループには、EC2 インスタンスでのデプロイの場合は `instance`、および Fargate デプロイの場合は `IP` のターゲットタイプがなければなりません。詳細については、「[ターゲットタイプ](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#target-type)」を参照してください。

Network Load Balancer  
パケットのコンテンツからではなく、TCP パケットヘッダーから抽出されたアドレス情報に基づいて、トランスポートレイヤー (TCP/UDP Layer-4) でルーティングと負荷分散を行います。Network Load Balancer は、ロードバランサーの有効期間中、トラフィックバーストを処理し、クライアントの出典 IP を保持して、固定 IP を使用します。

Elastic Load Balancing ロードバランサーの詳細は、以下のトピックを参照してください。
+ [Elastic Load Balancing とは?](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html)
+ 「[Classic Load Balancer とは？](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/introduction.html)」
+ [Application Load Balancer とは?](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html)
+ [Network Load Balancer とは?](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html)

## Blue/Green デプロイ
<a name="integrations-aws-elastic-load-balancing-blue-green"></a>

Elastic Load Balancing ロードバランサーの背後でインスタンストラフィックを再ルーティングすることは CodeDeploy Blue/Green デプロイの基本です。

Blue/Green デプロイの場合、ロードバランサーは、最新のアプリケーションリビジョンのデプロイ先であるデプロイグループの新しいインスタンス (置き換え先環境) に対しては、指定したルールに基づくトラフィックのルーティングを許可し、前回のアプリケーションリビジョンの実行元である古いインスタンス (元の環境) からはトラフィックをブロックします。

置き換え先環境のインスタンスが 1 つ以上のロードバランサーに登録されると、置き換え元環境のインスタンスは登録解除され、終了可能になります。

ブルー/グリーンデプロイでは、デプロイグループで 1 つ以上の Classic Load Balancer、Application Load Balancer ターゲットグループ、または Network Load Balancer ターゲットグループを指定できます。CodeDeploy コンソールまたは を使用して AWS CLI 、ロードバランサーをデプロイグループに追加します。

Blue/Green デプロイにおけるロードバランサーの使用に関する詳細については、以下のトピックを参照してください。
+ [CodeDeploy Amazon EC2 デプロイ用の Elastic Load Balancing でロードバランサーをセットアップする](deployment-groups-create-load-balancer.md)
+ [Blue/Green デプロイ (コンソール) のアプリケーションを作成します。](applications-create-blue-green.md)
+ [EC2/オンプレミス Blue/Green デプロイ用のデプロイグループを作成する (コンソール)](deployment-groups-create-blue-green.md)

## インプレースデプロイ
<a name="integrations-aws-elastic-load-balancing-in-place"></a>

インプレースデプロイ中は、ロードバランサーにより、デプロイ先のインスタンスに対するインターネットトラフィックのルーティングがブロックされ、そのインスタンスへのデプロイが完了した時点でインスタンスに対するトラフィックのルーティングが再開されます。

インプレースデプロイ中にロードバランサーが使用されないと、インターネットトラフィックはデプロイプロセス中に依然としてインスタンスにルーティングされる場合があります。その結果、お客様に表示されるウェブアプリケーションが破損していたり、不完全であったり、古いものであったりする可能性があります。インプレースデプロイで Elastic Load Balancing ロードバランサーを使用する場合、デプロイグループのインスタンスはロードバランサーから登録解除され、最新のアプリケーションリビジョンに更新されてから、デプロイが成功した後で同じデプロイグループの一部としてロードバランサーに再登録されます。CodeDeploy は、ロードバランサーのバックグラウンドでインスタンスが正常になるまで最大 1 時間待機します。待機期間中にロードバランサーによってインスタンスが正常とマークされていない場合、CodeDeploy はデプロイ設定に基づいて、次のインスタンスに移動するか、デプロイに失敗します。

インプレースデプロイでは、1 つ以上の Classic Load Balancer、Application Load Balancer ターゲットグループ、または Network Load Balancer ターゲットグループを指定できます。ロードバランサーをデプロイグループの設定の一部として指定できます。または CodeDeploy が提供するスクリプトを使用してロードバランサーを実装できます。

### デプロイグループを使用してインプレースデプロイのロードバランサーを指定する
<a name="integrations-aws-elastic-load-balancing-in-place-deployment-group"></a>

デプロイグループにロードバランサーを追加するには、CodeDeploy コンソールまたは を使用します AWS CLI。インプレースデプロイでロードバランサーをデプロイグループで指定する詳細については、次のトピックを参照してください。
+ [インプレースデプロイ (コンソール) 用のアプリケーションを作成](applications-create-in-place.md)
+ [インプレースデプロイ用のデプロイグループを作成する (コンソール)](deployment-groups-create-in-place.md)
+ [CodeDeploy Amazon EC2 デプロイ用の Elastic Load Balancing でロードバランサーをセットアップする](deployment-groups-create-load-balancer.md)

### スクリプトを使用してインプレースデプロイのロードバランサーを指定する
<a name="integrations-aws-elastic-load-balancing-in-place-script"></a>

次の手順のステップに従ってデプロイライフサイクルスクリプトを使用し、インプレースデプロイのロードバランシングをセットアップします。
**注記**  
CodeDeployDefault.OneAtATime 設定は、スクリプトを使用してインプレイスデプロイ用のロードバランサーを設定するときのみ使用します。同時実行はサポートされておらず、CodeDeployDefault.OneAtATime 設定によりスクリプトの直列実行が確実になります。デプロイ設定の詳細については、[CodeDeploy でデプロイ設定を使用する](deployment-configurations.md) を参照してください。

GitHub の CodeDeploy サンプルリポジトリでは、CodeDeployElastic Load Balancing ロードバランサーの使用に対応できる手順とサンプルを提供します。これらのレポジトリには、開始するのに必要なすべてのコードを提供する 3 つのサンプルスクリプト、`register_with_elb.sh`、`deregister_from_elb.sh`、および `common_functions.sh` が含まれます。これらの 3 つのスクリプトのプレースホルダーを編集して、`appspec.yml` ファイルからこれらのスクリプトを参照します。

Elastic Load Balancing ロードバランサーに登録された Amazon EC2 インスタンスを使用して CodeDeploy でインプレースデプロイをセットアップするには、以下を実行します。

1. インプレースデプロイで使用するロードバランサーのタイプのサンプルをダウンロードします。
   + [Classic Load Balancer](https://github.com/awslabs/aws-codedeploy-samples/tree/master/load-balancing/elb)
   + [Application Load Balancer [または Network Load Balancer](https://github.com/awslabs/aws-codedeploy-samples/tree/master/load-balancing/elb-v2) (同じスクリプトをいずれのタイプにも使用可能)](https://github.com/awslabs/aws-codedeploy-samples/tree/master/load-balancing/elb-v2)

1. ターゲットの各 Amazon EC2 インスタンスに AWS CLI がインストールされていることを確認します。

1. ターゲットの各 Amazon EC2 インスタンスで、IAM インスタンスプロファイルに少なくとも elasticloadbalancing:\$1 および autoscaling:\$1 アクセス許可がアタッチされていることを確認します。

1. アプリケーションのソースコードディレクトリにデプロイライフサイクルイベントのスクリプト (`register_with_elb.sh`、`deregister_from_elb.sh`、および `common_functions.sh`) を含めます。

1. アプリケーションリビジョンの `appspec.yml` で、**ApplicationStart** イベント時に `register_with_elb.sh` スクリプトを、および **ApplicationStop** イベント時に `deregister_from_elb.sh` スクリプトを実行する CodeDeploy の説明を提供します。

1. インスタンスが Amazon EC2 Auto Scaling グループの一部である場合、このステップは省略できます。

   `common_functions.sh` スクリプトで:
   + [Classic Load Balancer](https://github.com/awslabs/aws-codedeploy-samples/tree/master/load-balancing/elb) を使用している場合、`ELB_LIST=""` で Elastic Load Balancing ロードバランサーの名前を指定し、ファイルの他のデプロイ設定に必要な変更を加えます。
   + [Application Load Balancer [または Network Load Balancer](https://github.com/awslabs/aws-codedeploy-samples/tree/master/load-balancing/elb-v2)](https://github.com/awslabs/aws-codedeploy-samples/tree/master/load-balancing/elb-v2) を使用している場合は、`TARGET_GROUP_LIST=""` で Elastic Load Balancing ターゲットグループ名を指定し、ファイルの他のデプロイ設定に必要な変更を加えます。

1. アプリケーションのソースコード `appspec.yml` およびデプロイライフサイクルイベントのスクリプトをアプリケーションリビジョンにバンドルしてから、リビジョンをアップロードします。Amazon EC2 インスタンスにリビジョンをデプロイします。デプロイの間に、デプロイライフサイクルイベントのスクリプトは、Amazon EC2 インスタンスをロードバランサーから登録解除して、接続がドレインするまで待機し、デプロイが完了してから Amazon EC2 インスタンスをロードバランサーに再登録します。