AWS CloudWatch EventsでEC2の自動起動・停止ルールをサクッと作って料金を節約する

# EC2を使っていない時は停止させておきたい、特定の時間に起動させたい
個人開発とか勉強のためにawsでEC2を使っていると、起動しっぱなしのEC2があったりして、放っておくと存外に課金されかねない。なので、CloudWatchを使ってEC2の自動停止・起動を設定して、特定の時間に停止させたり、利用したい特定の時間に起動しておくようにする。

# 自動停止の設定
停止の方がサクッとできるのでこちらから。ルール作成のみでサクッとできます。

### ルールの作成（自動停止）
マネジメントコンソールにログインし、上部メニューの「サービス」から「CloudWatch」を検索する。左サイドメニューの「ルール」→「ルールの作成」ボタンを押す。
<img width="700" alt="スクリーンショット 2020-02-23 23.59.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124088/62d2cb34-cb37-380e-7b84-87e9a3342f88.png">


### Cronの設定
Cronを使ってサクッと行う。「スケジュール」を選択し、「Cron式」を選ぶ。

今回はサクッと行きたいので、コピペで済ます。
「毎日午前0時」のCron式
`00 15 ? * * *`
（※必要に応じて時間は変えてください。GMTなので、日本時間から-9時間（24-9=15時）を指定します。）

↑をCron式のところに入力。
<img width="700" alt="スクリーンショット 2020-02-23 20.10.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124088/0f05f985-1bba-8ce0-1360-30cf291e1f5a.png">

### ターゲットの設定
「ターゲット」の欄から「ターゲットの追加」を押す。
そこから「EC2 StopInstances API 呼び出し」を選択する。
「インスタンスID」を入力する。(インスタンスIDは「サービス」→「EC2」からEC2の一覧から見れます。)
<img width="700" alt="スクリーンショット 2020-02-23 20.19.21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124088/966bddd9-0831-79d8-4312-fd26f684579e.png">

### ルールの詳細を設定する
適当に名前をつける。「`ec2-auto-stop`」とか。「説明」も適当に。「ルールの作成」を押下して完了。
<img width="700" alt="スクリーンショット 2020-02-23 20.32.53.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124088/2f72a45d-bd86-7a96-671b-605a62942aa1.png">

# 自動起動の設定
特定の時間にEC2を起動させるルールを作成する。こちらも時間をかけずサクッと作成する。

・流れ
①IAMロールの作成
②ルールの作成
### ロールの作成
EC2起動用のロールを作成する。
上部メニューの「サービス」から「IAM」を検索して遷移する。
左サイドバーから「ロール」を選択し、「ロールの作成」ボタンを押下する。
<img width="700" alt="スクリーンショット 2020-02-23 20.35.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124088/d5cce249-b8aa-7fc7-89f2-b2788ffc7785.png">

「ロールの作成」を押下し、下の方にある「CloudWatch Events」を選択し、「ユースケースの選択」から`CloudWatch Events`を選び、「次のステップ」を押下する。
<img width="700" alt="スクリーンショット 2020-02-23 23.15.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124088/9e8215b7-9c4a-006d-ae1d-fb2ffd1c9780.png">

一旦、ポリシーはそのままで、必要に応じてキー、タグ、ロール名をつけ、「ロールの作成」を押下してロールを作成する。（ここではロール名を`qiita_test`としている）
<img width="700" alt="スクリーンショット 2020-02-23 20.44.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124088/13c46efd-29a2-35f8-62f5-1c59288ea4a7.png">

### ポリシーのアタッチ
「サービス」→「IAM」→「ロール」から先ほど作成したロールを選択する。
<img width="700" alt="スクリーンショット 2020-02-23 23.34.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124088/8502c0c4-3359-07da-08ac-206b3b4af5c2.png">

「ポリシーをアタッチします」を押下し、
<img width="700" alt="スクリーンショット 2020-02-23 23.36.01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124088/9e42b338-690f-0612-b50d-6ba96d0e20e2.png">
検索欄に`SSM`と入力し、`AmazonSSMAutomationRole`を選択して「ポリシーのアタッチ」を押下する。
<img width="700" alt="スクリーンショット 2020-02-23 23.38.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124088/c18785e9-d62c-1564-e590-fcd4b4d2cf59.png">
一旦、ロールはこれでOK(のはず)

### ルールの作成（自動起動）
自動停止のルールを作った時と同様に、「CloudWatch」→「ルール」→「ルールの作成」→「スケジュール」を選択し、「Cron式」を選ぶ。

毎日19時に起動させるようにしてみる。

「毎日19時」のCron式
`00 10 ? * * *`
これをコピペする。

「ターゲット」は`SSM Automation`を選択する。「ドキュメント」に、`AWS-StartEC2Instance`を選ぶ。
（その他設定はそのままで。必要に応じて変更してください。）
<img width="700" alt="スクリーンショット 2020-02-23 23.51.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124088/262ffbf9-d19f-c3fe-1000-b8f5e8806b5a.png">

「定数」を選び、`InstanceId*`に起動させたいEC2インスタンスのIDを入力する。ロールに「既存のロールを使用」を選び、先ほど作成したロールを選ぶ。
<img width="456" alt="スクリーンショット 2020-02-23 23.53.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124088/70565050-685e-4db6-579f-f9cce4086234.png">

「設定の詳細」を押下してルール名、説明を適当に入力すれば自動起動のルールも完了。
<img width="700" alt="スクリーンショット 2020-02-23 23.57.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124088/b32c90a0-e8ee-82cc-363a-4962e129be9c.png">

サクッとできました。