LoginSignup
2
3

More than 1 year has passed since last update.

ECS Fargate の AutoScaling設定をCLIでスケジューリングする

Last updated at Posted at 2021-12-12

はじめに

毎週特定の時間帯のみサーバーへのアクセス数が伸びるとわかっている場合、特定の時間帯のみタスク数を増やしたいため、AutoScalingをスケジュール設定します。
CLIを使用する場合、アクセスキーを取り扱うため、IAM権限についても言及します。

単純に、タスク数を増減したい場合、こちらの記事が参考になります。
ただし、autoscalingを使用している場合、タスクを増やしてもスケールインする可能性があります。

前提条件

  • vpc上にfargate用の踏み台サーバーがありますので、踏み台サーバーでcliを実行できるようにします
  • ECSのサービスで、autoscaling設定済み
    • スクリーンショット 2022-04-26 17.27.31.png

流れ

  1. 踏み台サーバーのcli 2をインストール
  2. IAMポリシーを作成し、作成したIAMユーザーにアタッチ
  3. 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アクセスキーで検索すると、イベント名が表示されます。
このイベント名が必要なアクションになります。
スクリーンショット 2021-12-12 10.23.34.png

IAMユーザーを作成し、先程のIAMポリシーをアタッチしましょう。
アクセスキーの発行を忘れずに!
スクリーンショット 2021-12-12 10.48.59.png

必要なアクション

あとから気づきましたが、スケールアウトとスケールインは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は、他にもスケジュールを終了する日付が設定できたりします。
詳しくはドキュメントをご確認ください。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3