インスタンスの停止を自動化してみる

## 設定してみる

### 概要

- 目次
	- IAM
	- lambda
	- (Cloudwatch Events)
	- (EC2)

### IAM

#### lambda用のIAMロール作成

- ロールの作成

ロールの作成をしていきます

![1IAM Management Console - Google Chrome 2021-04-23 16.22.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/dc35dfcd-ddd2-405a-082c-33e21a281e9c.png)


- ロールの詳細を選択

![2IAM Management Console - Google Chrome 2021-04-23 16.22.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/ad521a68-7a9c-12d8-e5c4-4db8f8ea95f2.png)


- ポリシーを選択

AmazonEC2ReadOnlyAccess

![3IAM Management Console - Google Chrome 2021-04-23 16.26.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/20567bd0-de18-6762-d368-52622c77e011.png)

- タグの設定

タグの設定は今回はしません

- ロールの名前

ロールの名前を `start_stop_ec2` にし、ほかはそのままでロールを作成しました。

![1IAM Management Console - Google Chrome 2021-04-24 16.16.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/e266f48c-051f-2662-0c9e-f31a0429a55f.png)

- ロールの作成完了

ロールが作成されました。

![2IAM Management Console - Google Chrome 2021-04-24 16.17.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/22a204d1-9bae-c418-c0cb-0e6249a2b21f.png)

- インラインポリシーの追加

start_stop_ec2 の概要を確認し、インラインポリシーの追加を行います。

![3IAM Management Console - Google Chrome 2021-04-24 16.19.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/e047fea4-9344-ad09-f50e-34f69dbcdb12.png)


ポリシーをJSONにし、以下のポリシーを追加します。

![4IAM Management Console - Google Chrome 2021-04-24 16.20.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/8ba3170b-61bf-0b53-bd11-543955f24ab8.png)


```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:StartInstances",
                "ec2:StopInstances"
            ],
            "Resource": "*"
        }
    ]
}
```

- ポリシーの作成

概要を確認し、名前を記載します。

![5IAM Management Console - Google Chrome 2021-04-24 16.21.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/0fd3003d-b307-911c-8125-b28f5ab5c84b.png)


- ポリシーの追加完了

ポリシーが追加されました

![5IAM Management Console - Google Chrome 2021-04-24 16.22.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/032dcbf8-210e-635f-77e5-9de3d1aa3d88.png)


### lambda

- lambda関数を作成

コンソール > lambdaへ行き、関数を作成します。

![1関数 - Lambda - Google Chrome 2021-04-24 16.23.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/93fde5e7-e332-7de4-b389-ba0d98dc421e.png)


- 関数の詳細を設定

`一から作成` を行い、
関数名 : start_stop_ec2
ランタイム(言語) : Python3.6 で設定を行います。

実行ロールは先ほど作成した `start_stop_ec2` ロールを使用します。

![2Lambda - Google Chrome 2021-04-24 16.25.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/44721e5a-9b92-bf40-ff09-abad723b57ab.png)


- 関数の完了

関数が作成されました

![3start_stop_ec2 - Lambda - Google Chrome 2021-04-24 16.27.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/a2e664e7-7e7d-fe51-296b-717378799a66.png)


- ソースコードの追加

参考にさせていただきました (こちらのサイト)[https://techblog.forgevision.com/entry/2018/06/25/112507] をご確認ください

![4start_stop_ec2 - Lambda - Google Chrome 2021-04-24 16.35.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/a7f30a7c-ad26-45fc-3751-69adfe955ca3.png)


- 環境変数の変更

タイムゾーン変更のため、環境変数を変更します

![5start_stop_ec2 - Lambda - Google Chrome 2021-04-24 16.36.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/c2429743-e8df-c34c-8ccc-b376f5b3741c.png)


タイムゾーン(TZ)を Asia/Tokyo にしました

![6環境変数の編集 (start_stop_ec2) - Lambda - Google Chrome 2021-04-24 16.38.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/5f7d97b5-c190-0674-96f7-528dfdc71265.png)



- トリガーを設定

設定 > トリガー > トリガーを追加します

![7start_stop_ec2 - Lambda - Google Chrome 2021-04-24 16.38.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/72da3920-3939-43ca-0563-5fb37640f81a.png)


トリガーの設定をします。

![8Lambda - Google Chrome 2021-04-24 16.40.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/955fdc94-9b8b-a93c-f40b-07620417baea.png)


スケジュール式のcronのタイプを記載して、追加します。

![22Lambda - Google Chrome 2021-04-24 17.11.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/5c88b481-7b77-9c73-05e7-bde06b80a7ac.png)


トリガーが設定されました

![10start_stop_ec2 - Lambda - Google Chrome 2021-04-24 16.43.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/1fa9e428-113c-247a-6b69-c183cb3eaf20.png)


- タイムゾーンの変更

![12start_stop_ec2 - Lambda - Google Chrome 2021-04-24 16.56.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/929fa6a0-35ee-a7c1-1082-59c3b944b894.png)


編集を行う

![13Amazon EventBridge - Google Chrome 2021-04-24 16.57.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/60af2529-2f70-fd5e-0760-85b7098f023b.png)


ローカルタイムゾーンを変更して、保存します

![14Amazon EventBridge - Google Chrome 2021-04-24 16.58.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/a0b4ed29-25db-8b4e-363f-62dc27c1f74d.png)


### 動作確認

- EC2のタグを設定

インスタンスのタグを以下のように設定しました。
start に 開始時間、
stop に 終了時間を設定します。

![11インスタンス _ EC2 Management Console - Google Chrome 2021-04-24 16.45.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/aef162c3-f560-fd3d-60ab-ffa68481d3ba.png)

- 確認

実行されました！

![111インスタンス _ EC2 Management Console - Google Chrome 2021-04-24 17.26.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/f8123897-9671-359b-9f02-4390841058f7.png)


## 参考

- [AWS LambdaとCloudWatchでEC2インスタンスをスケジュール起動停止する](https://techblog.forgevision.com/entry/2018/06/25/112507)