EC2インスタンスは起動時のみ料金が加算されます
つまり使用していないときには停止するだけで、料金を抑えることが可能です。
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時に停止することで対策を始めましょう
githubには毎日22時に停止する設定のCloudWatch Eventsのterraformもあるので、ぜひ活用ください。