#4 AWS CLIでELBを作成する

# はじめに
AWS CLIでELBを構築する手順です。構成図は以下の通りです。
![elb.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3501605/a5dc9891-37d2-73dd-9bee-24db6b87121f.png)

# 手順
## 1.ターゲットグループの作成
### 設定値の指定
（今回は手順3までの設定値をまとめて定義しています）
```
## ターゲットグループ名
TARGET_GROUP_NAME="target-cli"
## ターゲットグループのプロトコル
TARGET_GROUP_PROTCOL="HTTP"
## ターゲットグループのポート
TARGET_GROUP_PORT="80"

## ヘルスチェックパス
HEALTH_CHECK_PATH="/wp-includes/images/blank.gif"
## ヘルスチェックポート
HEALTH_CHECK_PORT="80"
## ヘルスチェックプロトコル
HEALTH_CHECK_PROTCOL="HTTP"
## ヘルスチェックの間隔(秒)
HEALTH_CHECK_INTERVAL="30"
## ヘルスチェックのタイムアウト値(秒)
HEALTH_CHECK_TIMEOUT="5"

## 正常と判断する閾値
HEALTHY_THRESHOLD_COUNT="5"
## 異常と判断する閾値
UNHEALTHY_THRESHOLD_COUNT="2"

## ターゲットのタイプ
TARGET_TYPE="instance"
## VPCのID
VPCID="vpc-xxxx "
## ターゲットのインスタンスID
TARGET_ID="i-xxxx"
## ターゲットのポート
TARGET_PORT="80"

## ELBの名前
ELB_NAME="test-elb-cli"

## ELBを作成するサブネットID
SUBNETIDS="subnet-xxxx subnet-xxxx"
## ELBにアタッチするSGID
SGIDS="sg-xxxx"

## ELBのタイプ
ELB_TYPE="application"

## IPアドレスタイプ
IP_ADDRESS_TYPE="ipv4"
```
### 処理の実行
* `create-target-group`コマンドを使います。
```
aws elbv2 create-target-group \
--name ${TARGET_GROUP_NAME} \
--protocol ${TARGET_GROUP_PROTCOL} \
--port ${TARGET_GROUP_PORT} \
--health-check-path ${HEALTH_CHECK_PATH} \
--health-check-protocol  ${HEALTH_CHECK_PROTCOL} \
--health-check-port ${HEALTH_CHECK_PORT} \
--health-check-interval-seconds ${HEALTH_CHECK_INTERVAL} \
--health-check-timeout-seconds ${HEALTH_CHECK_TIMEOUT} \
--healthy-threshold-count ${HEALTHY_THRESHOLD_COUNT} \
--unhealthy-threshold-count ${UNHEALTHY_THRESHOLD_COUNT} \
--target-type ${TARGET_TYPE} \
--vpc-id ${VPCID}
```
実行するオプションコマンドを整理します。
* `--name`
ターゲットグループの名前
* `--protocol`
トラフィックをターゲットにルーティングする時に使用されるプロトコル設定
ALBの場合、`HTTP`と`HTTPS`をサポート
* `--port`
ターゲットがトラフィックを受信するポート設定
* `--health-check-path`
ターゲットのヘルスチェックの宛先
* `--health-check-protocol`
ロードバランサーがターゲットのヘルスチェックを実行するときに使用するプロトコル
* `--health-check-port`
ロードバランサーがターゲットのヘルスチェックを実行するときに使用するポート
* `--health-check-interval-seconds`
個々のターゲットのヘルスチェック間のおおよその時間 (秒単位)
範囲は 5 ～ 300 秒
* `--health-check-timeout-seconds`
ターゲットからの応答がない期間 (秒単位) 。ヘルスチェックが失敗したことを表す
範囲は 2 ～ 120 秒
* `--healthy-threshold-count`
ターゲットが正常であるとみなされる前に必要な、連続したヘルスチェックの成功回数
範囲は 2 ～ 10 
* `--unhealthy-threshold-count`
ターゲットが異常であるとみなされるまでに必要な連続ヘルスチェック失敗の回数
範囲は 2 ～ 10 
* `--target-type`
ターゲット グループにターゲットを登録するときに指定する必要があるターゲットのタイプ
複数のタイプは指定できない
▼`instance` インスタンスIDごとにターゲットを登録する※デフォルト値
▼`ip` ターゲットをIPアドレスで登録する。
▼`lambda` 単一の Lambda 関数をターゲットとして登録する
▼`alb` ターゲットとしてApplication Load Balancerを1つ登録する
* `--vpc-id`
VPCの識別子（VPC ID）

## 2.ターゲットの登録
`register-targets`コマンドを使います。
```
aws elbv2 register-targets \
--targets Id=${TARGET_ID},Port=${TARGET_PORT} \
--target-group-arn $(aws elbv2 describe-target-groups --query "TargetGroups[].TargetGroupArn" --output text --name ${TARGET_GROUP_NAME})
```
## 3.ELBの作成

* `create-load-balancer`コマンドを使います。
`--ip-address-type`でロード バランサーのサブネットによって使用される IP アドレスのタイプを指定します。指定できる設定値は、`ipv4`または`dualstack` (IPv4 および IPv6 アドレスの場合) 
```
aws elbv2 create-load-balancer \
--name ${ELB_NAME} \
--subnets ${SUBETIDS} \
--security-groups ${SGIDS} \
--type ${ELB_TYPE} \
--ip-address-type ${IP_ADDRESS_TYPE} \
--tags Key=Name,Value=${ELB_NAME}
```

# 参考ドキュメント
* [AWS CLI Command Reference](https://docs.aws.amazon.com/ja_jp/cli/latest/reference/elbv2/index.html)

# #5 WordPressの初期設定
* [AWS CLIでスケーラブルウェブサイトを構築する](https://qiita.com/kokichi8/items/fedb84896a286b70cc23)
* #5 WordPressの初期設定