こんにちは。AWS CLIが好きな福島です。
前回は、ALBおよびNLB関連の情報を取得するコマンドをご紹介いたしましが、 今回は、ALBを構築するするコマンドをご紹介いたします。
https://blog.serverworks.co.jp/aws-cli-elbv2blog.serverworks.co.jp
実行環境
今回、コマンドを実行した環境は、以下の通りとなります。
(本記事でご紹介しているコマンドの中には、Linuxのコマンドを利用している箇所があります。)
# uname -a Linux LAPTOP-CNM26HN6 4.4.0-18362-Microsoft #1049-Microsoft Thu Aug 14 12:01:00 PST 2020 x86_64 x86_64 x86_64 GNU/Linux #
流れ
流れは以下の通りです。
①ターゲットグループの作成
②①へターゲットの登録
③ELBの作成
④リスナー設定
構築
⓪事前準備
## ターゲットグループ名 TARGET_GROUP_NAME=fk-test-target-cli ## ターゲットグループのプロトコル TARGET_GROUP_PROTCOL=HTTP ## ターゲットグループのポート TARGET_GROUP_PORT=80 ## ヘルスチェックパス HTALTH_CHECK_PATH=/healthcheck.html ## ヘルスチェックポート HTALTH_CHECK_PORT=80 ## ヘルスチェックプロトコル HTALTH_CHECK_PROTCOL=HTTP ## ヘルスチェックの間隔(秒) HTALTH_CHECK_INTERVAL=30 ## ヘルスチェックのタイムアウト値(秒) HTALTH_CHECK_TIMEOUT=5 ## 正常と判断する閾値 HTALTHY_THRESHOLD_COUNT=5 ## 異常と判断する閾値 UNHTALTHY_THRESHOLD_COUNT=2 ## ターゲットのタイプ(lambdaも指定できるが今回は割愛) TARGET_TYPE=ip or instance ## VPCのID VPCID=vpc-0fee138d3e0deef81 ## ターゲットのIP(ターゲットタイプがipの場合のみ指定) TARGET_IP=10.88.0.59 ## ターゲットのインスタンスID(ターゲットタイプがinsntaceの場合のみ指定) TARGET_ID=i-0808672558492fde8 ## ターゲットのポート TARGET_PORT=80 ## ELBの名前 ELB_NAME=fk-test-elb-cli ## ELBを作成するサブネットID SUBETIDS=subnet-0093d7475de79313b subnet-03fbedc39e6211234 ## ELBにアタッチするSGID SGIDS=sg-00c78fbf089ace674 sg-02df472801a58f25e ## ELBのスキーマ SCHEME=internet-facing or internal ## ELBのタイプ ELB_TYPE=application or network ## IPアドレスタイプ IP_ADDRESS_TYPE=ipv4 ## リスナーのプロトコル(HTTPの場合) LISTENER_PROTCOL_HTTP=HTTP ## リスナーのプロトコル(HTTPの場合) LISTENER_PORT_HTTP=80 ## リスナーのプロトコル(HTTPSの場合) LISTENER_PROTCOL_HTTPS=HTTPS ## リスナーのポート(HTTPSの場合) LISTENER_PORT_HTTPS=443 ## セキュリティポリシー(HTTPSの場合指定) ※1 SSL_POLICY=ELBSecurityPolicy-TLS-1-2-Ext-2018-06 ## ACMに登録した証明書のARN CERTIFICATE_ARN=arn:aws:acm:ap-northeast-1:xxxxxxxxxxxxxx:certificate/68814875-7a52-44db-a1e0-7042ace91ba6
※1 設定できる値の詳細は以下を参照。
Application Load Balancer の HTTPS リスナーを作成する - Elastic Load Balancing
①ターゲットグループの作成
作業前の状態確認
ターゲットグループが存在しない場合、エラーが返ってきます。
aws elbv2 describe-target-groups --names ${TARGET_GROUP_NAME}
ターゲットグループの作成
aws elbv2 create-target-group \ --name ${TARGET_GROUP_NAME} \ --protocol ${TARGET_GROUP_PROTCOL} \ --port ${TARGET_GROUP_PORT} \ --health-check-path ${HTALTH_CHECK_PATH} \ --health-check-protocol ${HTALTH_CHECK_PROTCOL} \ --health-check-port ${HTALTH_CHECK_PORT} \ --health-check-interval-seconds ${HTALTH_CHECK_INTERVAL} \ --health-check-timeout-seconds ${HTALTH_CHECK_TIMEOUT} \ --healthy-threshold-count ${HTALTHY_THRESHOLD_COUNT} \ --unhealthy-threshold-count ${UNHTALTHY_THRESHOLD_COUNT} \ --target-type ${TARGET_TYPE} \ --vpc-id ${VPCID}
作業後の状態確認
aws elbv2 describe-target-groups --names ${TARGET_GROUP_NAME}
②ターゲットの登録
作業前の状態確認
aws elbv2 describe-target-health \ --target-group-arn $(aws elbv2 describe-target-groups --query "TargetGroups[].TargetGroupArn" --output text --name ${TARGET_GROUP_NAME}) \ --query 'TargetHealthDescriptions[].Target' --output table
ターゲットの登録(ターゲットグループのタイプがipの場合)
aws elbv2 register-targets \ --targets AvailabilityZone=all,Id=${TARGET_IP},Port=${TARGET_PORT} \ --target-group-arn $(aws elbv2 describe-target-groups --query "TargetGroups[].TargetGroupArn" --output text --name ${TARGET_GROUP_NAME})
ターゲットの登録(ターゲットグループのタイプがinstanceの場合)
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})
作業後の状態確認
aws elbv2 describe-target-health \ --target-group-arn $(aws elbv2 describe-target-groups --query "TargetGroups[].TargetGroupArn" --output text --name ${TARGET_GROUP_NAME}) \ --query 'TargetHealthDescriptions[].Target' --output table
③ELB構築
ELBが存在しない場合、エラーが返ってきます。
作業前の状態確認
aws elbv2 describe-load-balancers --names ${ELB_NAME}
ELBの作成
aws elbv2 create-load-balancer \ --name ${ELB_NAME} \ --subnets ${SUBETIDS} \ --security-groups ${SGIDS} \ --scheme ${SCHEME} \ --type ${ELB_TYPE} \ --ip-address-type ${IP_ADDRESS_TYPE} \ --tags Key=Name,Value=${ELB_NAME}
作業後の状態確認
aws elbv2 describe-load-balancers --names ${ELB_NAME}
④リスナー設定
作業前の状態確認
aws elbv2 describe-listeners \ --load-balancer-arn $(aws elbv2 describe-load-balancers --query "LoadBalancers[].LoadBalancerArn" --output text --names ${ELB_NAME})
リスナーの設定(HTTPの場合)
aws elbv2 create-listener \ --load-balancer-arn $(aws elbv2 describe-load-balancers --query "LoadBalancers[].LoadBalancerArn" --output text --names ${ELB_NAME}) \ --protocol ${LISTENER_PROTCOL_HTTP} \ --port ${LISTENER_PORT_HTTP} \ --default-actions Type=forward,TargetGroupArn=$(aws elbv2 describe-target-groups --query "TargetGroups[].TargetGroupArn" \ --output text \ --name ${TARGET_GROUP_NAME})
リスナーの設定(HTTPSの場合)
aws elbv2 create-listener \ --load-balancer-arn $(aws elbv2 describe-load-balancers --query "LoadBalancers[].LoadBalancerArn" --output text --names ${ELB_NAME}) \ --protocol ${LISTENER_PROTCOL_HTTPS} \ --port ${LISTENER_PORT_HTTPS} \ --default-actions Type=forward,TargetGroupArn=$(aws elbv2 describe-target-groups --query "TargetGroups[].TargetGroupArn" --output text --name ${TARGET_GROUP_NAME}) \ --ssl-policy ${SSL_POLICY} \ --certificates CertificateArn=${CERTIFICATE_ARN}
作業後の状態確認
aws elbv2 describe-listeners \ --load-balancer-arn $(aws elbv2 describe-load-balancers --query "LoadBalancers[].LoadBalancerArn" --output text --names ${ELB_NAME})
おまけ
S3のアクセスログ設定
S3_BUCKET=awslogs-elb-xxxxxxxxxxxxxx S3_PREFIX=${ELB_NAME}
作業前の状態確認
aws elbv2 describe-load-balancer-attributes \ --output text \ --load-balancer-arn $(aws elbv2 describe-load-balancers --query "LoadBalancers[].LoadBalancerArn" \ --output text \ --names ${ELB_NAME}) | grep access_logs
アクセスログの設定
aws elbv2 modify-load-balancer-attributes \ --load-balancer-arn $(aws elbv2 describe-load-balancers --query "LoadBalancers[].LoadBalancerArn" --output text --names ${ELB_NAME}) --attributes Key=access_logs.s3.enabled,Value=true \ Key=access_logs.s3.bucket,Value=${S3_BUCKET} \ Key=access_logs.s3.prefix,Value=${S3_PREFIX} \
作業後の状態確認
aws elbv2 describe-load-balancer-attributes \ --output text \ --load-balancer-arn $(aws elbv2 describe-load-balancers --query "LoadBalancers[].LoadBalancerArn" \ --output text \ --names ${ELB_NAME}) | grep access_logs
テストファイルの確認
ACCOUNTID=$(aws sts get-caller-identity --query "Account" --output text) aws s3 ls ${S3_BUCKET}/${S3_PREFIX}/AWSLogs/${ACCOUNTID}/
ELBの削除
aws elbv2 delete-load-balancer \ --load-balancer-arn $(aws elbv2 describe-load-balancers --query "LoadBalancers[].LoadBalancerArn" --output text --names ${ELB_NAME})
ターゲットグループの削除
aws elbv2 delete-target-group \ --target-group-arn $(aws elbv2 describe-target-groups --query "TargetGroups[].TargetGroupArn" \--output text --name ${TARGET_GROUP_NAME})
福島 和弥 (記事一覧)
2019/10 入社
AWS CLIが好きです。
AWS資格12冠。2023 Japan AWS Partner Ambassador/APN ALL AWS Certifications Engineer。