LoginSignup
0
3

More than 1 year has passed since last update.

CloudWatchEvents+lambda+boto3でサーバー代を節約する

Last updated at Posted at 2021-05-09

目的→サーバー代の節約

http://myhero2.s3-website-us-west-2.amazonaws.com
Angularのチュートリアルを参考に作成したポートフォリオです。
バックエンドでSpringBoot(EC2)とKeyCloak(FARGATE)とMySQLが動いています。
特にFARGATEは個人で運用する分にはサーバ代が高い為、
CloudWatchEvents+lambdaで決まった時間にタスクをストップさせる構成を実装します。

lambdaの作成と設定

image.png

AWS Lambdaのコンソール画面より関数の作成をクリックします。

image.png

1.lambda関数名を設定します。

2.今回はpythonのAWSSDK(boto3)を使用する為、「Python 3.8」を選択します。

3.関数の作成をクリックします。

これで関数は作成できましたが、デフォルトの実行ロールではECSのサービスの設定をアップデートさせることができません。以下の手順を参考にデフォルトのロールに権限を付与します。

image.png

image.png

image.png

FullAccessのポリシーをアタッチしてしまうのはセキリティ上、ベストプラクティスではない場合がありますが、今回は個人のアカウントなのでFullAccessのポリシーをアタッチします。

lambdaのソースコード

image.png

example.py
def lambda_handler(event, context):

     #desiredcountを0にする
     client = boto3.client('ecs')
     response = client.update_service(
     cluster='myk',
     service='ecs-kck-myk',
     desiredCount=0,
     )

     #停止するために必要なtaskArnを取得
     response = client.list_tasks(
     cluster='myk',
     launchType='FARGATE'
     )

     taskArns=response["taskArns"]

     #タスクを停止
     for task in taskArns:
      response = client.stop_task(
      cluster='myk',
      task=task,
      )

desiredCountを0にすることでECSのサービス内のタスクをストップさせた時、自動でタスクが開始されるのを防ぎます。今回は特にサービスなどを指定せずにクラスター内のtaskArnを全て取得して、クラスター内の全てのタスクを停止させています。

CloudWatchEventsでルールを作成する

image.png

AWSコンソールよりCloudWatchEventsの画面を開き、ルールの作成をクリックします。

CloudWatchEventsの設定

image.png

1.スケジュールをクリック

2.Cron式をクリックしてlambdaを実行したい時間を入力
今回は平日の18:00にlambdaを実行させたい為、
0 3 ? * TUE-SAT *
と入力します。GMTとJSTの9時間の時差を考慮することに注意します。
Cron式についてはこちらに詳しく書いてあります。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/events/ScheduledEvents.html

3.ターゲットの選択より実行したいlambda関数を選択します。

4.設定の詳細をクリックします。後はルールの名前を決めてルールを作成します。

CloudWatchEvents側での設定は以上です。

これで、指定された時間にlambda関数が実行されます。

今回は決まった時間にタスクを停止させる構成を実装をしましたが、同様にしてタスクを開始させる構成を実装することで、決まった時間のみにポートフォリオを公開することができ、サーバー代を節約できます!

0
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
0
3