はじめに
毎週特定の時間帯のみサーバーへのアクセス数が伸びるとわかっている場合、特定の時間帯のみタスク数を増やしたいため、AutoScalingをスケジュール設定します。
CLIを使用する場合、アクセスキーを取り扱うため、IAM権限についても言及します。
単純に、タスク数を増減したい場合、こちらの記事が参考になります。
ただし、autoscalingを使用している場合、タスクを増やしてもスケールインする可能性があります。
前提条件
流れ
- 踏み台サーバーのcli 2をインストール
- IAMポリシーを作成し、作成したIAMユーザーにアタッチ
- ssh接続して、CLI実行
踏み台サーバーのCLI2をインストール
以下のドキュメントのLinuxの手順通り行います。
踏み台サーバーにssh接続後、3つのコマンドを実行すると、cli 2のインストールできます。
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ sudo ./aws/install
$ aws --version
aws-cli/2.1.29 Python/3.7.4 Linux/4.14.133-113.105.amzn2.x86_64 botocore/2.0.0
アクセスキーを発行し、踏み台サーバーに登録します。
$ aws configure
AWS Access Key ID [None]: <アクセスキーを貼り付け>
AWS Secret Access Key [None]: <シークレットキーを貼り付け>
Default region name [None]: ap-northeast-1
Default output format [None]: json
IAMポリシーを作成し、作成したIAMユーザーにアタッチ
アクセスキーを使用しますので、最低限の権限を付与することが重要です。
今回のcliで必要なアクションを以下の3つになります。
また、踏み台サーバーからの実行ですので、送信元IPを絞りましょう。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"application-autoscaling:DeleteScheduledAction",
"application-autoscaling:DescribeScheduledActions",
"application-autoscaling:PutScheduledAction"
],
"Resource": "*",
"Condition": {
"IpAddress": {
"aws:SourceIp": "11.111.111.11/32"
}
}
}
]
}
IAMの権限最小にするための、必要なアクションの確認方法
必要なアクションが3つと判断した理由は、まず、admin権限を付与した状態で、cliで必要なアクションをすべて実行後、
CloudTrail
のイベント履歴
のAWSアクセスキーで検索すると、イベント名
が表示されます。
このイベント名
が必要なアクションになります。
IAMユーザーを作成し、先程のIAMポリシーをアタッチしましょう。
アクセスキーの発行を忘れずに!
必要なアクション
あとから気づきましたが、スケールアウトとスケールインはput-scheduled-action
、スケジュール確認は、describe-scheduled-actions
、スケジュール削除はdelete-scheduled-action
、をcliで実行しているので、このアクション名を権限付与すればよいのですね。
勉強になりました。。
ssh接続して、cli実行
踏み台サーバーからcliを実行しましょう。
コマンドは、下記のコマンドを参考にしてください。
スケジュール名は、かぶらないようにしましょう。
かぶると、スケジュールが上書きされます。
以下のドキュメントを参考にしました。
スケールアウト
設定:19:00に最低タスク数3つにする
スケジュール名:ecs-scale-out
<コンテナ名>、<サービス名>、<スケジュール名>は、自身の設定によって変えましょう
タイムゾーンは東京に設定しています。
aws application-autoscaling put-scheduled-action \
--service-namespace ecs \
--resource-id service/<コンテナ名>/<サービス名> \
--scheduled-action-name <スケジュール名> \
--schedule "cron(00 19 ? * Sat *)" --timezone "Asia/Tokyo" \
--scalable-dimension ecs:service:DesiredCount \
--scalable-target-action MinCapacity=3,MaxCapacity=10
スケールイン
設定:20:00に最低タスク数2つにする
スケジュール名:ecs-scale-in
aws application-autoscaling put-scheduled-action \
--service-namespace ecs \
--resource-id service/<コンテナ名>/<サービス名> \
--scheduled-action-name <スケジュール名> \
--schedule "cron(00 19 ? * Sat *)" --timezone "Asia/Tokyo" \
--scalable-dimension ecs:service:DesiredCount \
--scalable-target-action MinCapacity=2,MaxCapacity=10
スケジュールを確認
aws application-autoscaling describe-scheduled-actions --service-namespace ecs
スケジュール削除(名前指定)
aws application-autoscaling delete-scheduled-action \
--service-namespace ecs \
--scalable-dimension ecs:service:DesiredCount \
--resource-id service/<コンテナ名>/<サービス名> \
--scheduled-action-name <スケジュール名>
アクションの詳細
put-scheduled-action
は、他にもスケジュールを終了する日付が設定できたりします。
詳しくはドキュメントをご確認ください。