今回はAWS ALB経由でAPサーバ上のWEBサービスを一定時間だけ開局、それ以外は閉局する場合、これをAWS CLIコマンドを使って自動化する方法を考えてみました。
使用するコマンドaws elbv2の詳細はここを参照
前提
・既にALB、ターゲットグループは設定されている。
・既に以下の様な画面が表示されている。
・以下のコマンドをcron等に設定して自動化させる。
1.リスナールール作成
➀ aws elbv2 create-ruleコマンドでルールを作成
コマンド仕様は以下となります。
awss elbv2 create-rule
--listener-arn <リスナーARN>
--conditions <コンディションファイル>
--priority <プライオリティ 1>
--actions <アクションファイル>
➁ コンディションファイル作成
# cond.json
[
{
"Field": "path-pattern", # FieldはURLのパス形式を指定
"PathPatternConfig": {
"Values": ["/*"] # リクエストURLのパス ルートパス全て対象
}
}
]
➂ アクションファイル作成
[
{
"Type": "fixed-response",
"FixedResponseConfig": {
"MessageBody": "<html><body><h1>closed right now</body></html>",
"StatusCode": "503",
"ContentType": "text/html"
}
}
]
➃ コマンド実行しルールを追加します。
ここでは固定レスポンスを503で返し本文に閉局した旨を表示させます。
aws elbv2 create-rule --listener-arn arn:aws:elasticloadbalancing:ap-northeast-1:773181940404:listener/app/bipro/9f3425e854e7525f/6ec0638ed3d93aba --conditions file://cond.json --priority 1 --actions file://action.json
➅ 画面を確認してルールが反映されている事を確認。
固定レスポンスが返され、最初の画面が閉局しClosed right nowと変わりました。
2.リスナールールの削除
➀ aws elbv2 delete-rule コマンドで今度は1のルールを削除します。
aws elbv2 delete-rule --rule-arn <ルール ARN>
ここで問題となるのはルールARNはcreate_ruleコマンドで自動的に割り当てられるので
ルールARNを取得してこなければなりません。
➁ describe-rules コマンドでルールARNの取得。
aws elbv2 describe-rules --listener-arn <リスナーARN>
このコマンドコマンド結果を以下の様にgrepで"Priority": "1"の上の行のルールARNの部分を
抽出します。
grep '"Priority": "1"' -B 1 | grep -o 'arn:aws:[^"]*'`
この抽出結果を delete-rule --rule-arn オプションにに組み込みます。
➂ delete-rule --rule-arn コマンドでルールの削除
aws elbv2 delete-rule --rule-arn `aws elbv2 describe-rules --listener-arn  arn:aws:elasticloadbalancing:ap-northeast-1:773181940404:listener/app/***(マスクしてます)/9f3425e854e7525f/6ec0638ed3d93aba | grep '"Priority": "1"' -B 1 | grep -o 'arn:aws:[^"]*'`