0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

タグ判別でインスタンスを停止するLambda関数

Last updated at Posted at 2019-12-02

EC2インスタンスは起動時のみ料金が加算されます:arrow_heading_up:
つまり使用していないときには停止するだけで、料金を抑えることが可能です。

Reserved InstanceやSpot Instanceを使用する方が安くなりますが、
業務で使用する場合など一部利用パターンでは使用しづらいかもしれません。
なので、一括でインスタンスを停止するLambda関数を作成しました。

Terraformで構築しているので、すぐに使えるかと思います。

説明

  • タグで停止対象の判別をしています
  • 全リージョンが対象です
  • IAM Roleを作成する必要があります

ソースコードとLambda関数のテストコードはgithubで公開しています。

使用方法

githubよりcloneしてください。
https://github.com/Sunochi/stop_ec2_instanses

READMEにデプロイまでの詳細手順を載せてありますが、
以下にも日本語で手順を書きますので、参考にしてください。

Terraformのインストール

hashicorp社が提供しているインフラストラクチャ定義ツールです。
install guide

バージョンは0.12.5以上でお願いします。
0.11.x以下ではおそらく動作しません。

python(pip)の使用準備

pipを使用するため必要になります。
環境ごとにインストール方法が大きく異なるので、申し訳無いですが割愛します。

環境変数の設定

Terraformを使う環境にて、下記の環境変数を設定してください。

TF_VAR_lambda_function_name: Lambdaの関数名
AWS_REGION: デプロイ先(`ap-northeast-1`など)

以下は1か2のどちらかのみ設定してください。

1.
AWS_SDK_LOAD_CONFIG: 1
AWS_PROFILE: ~/.aws/credentialsに設定しているprofile名

2.
export AWS_ACCESS_KEY_ID=<access key>
export AWS_SECRET_ACCESS_KEY=<secret access key>

設定例

$ export TF_VAR_lambda_function_name=set_cloudwatch_expire
$ export AWS_REGION=ap-northeast-1
$ export AWS_SDK_LOAD_CONFIG=1
$ export AWS_PROFILE=test_account

デプロイ

デプロイはディレクトリごとになります。
順番がありますので、必ず守ってください

## IAM
$ cd IAM/
$ terraform init
$ terraform plan
$ terraform apply
## 表示内容に問題なければ yes と入力

## Lambda.
$ cd Lambda/
$ ./lambda_build.sh
$ terraform init
$ terraform plan
$ terraform apply
## 表示内容に問題なければ yes と入力

定期実行する場合は下記のCloudWatch Eventのルールもデプロイして下さい。
デフォルトの設定では毎月1日に実行されます。

$ cd CloudWatch/
$ terraform init
$ terraform plan
$ terraform apply
## 表示内容に問題なければ yes と入力

EC2インスタンスの設定

github上のコードをそのままデプロイした場合は下記設定が必要です。

停止対象から外す方法

EC2インスタンスのタグに下記を追加してください。

Auto-stop: No

このタグがある場合に限り、停止対象から除外されます。

停止対象にする場合

とくに設定は必要ありません。

おわりに

テスト環境や開発環境をEC2インスタンスで構築したまま、停止忘れなどでコストが無駄にかかります。クラウドを使用しているのに柔軟に停止しないのは損です。

本番環境や停止したくない環境のインスタンスにのみタグをつけて、他は毎日22時に停止することで対策を始めましょう:punch:
githubには毎日22時に停止する設定のCloudWatch Eventsのterraformもあるので、ぜひ活用ください。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?