###### tags: `AWS`,`CloudWatch`
# EC2の自動化
---
EC2は従量課金。無料枠とは言えども起動しっぱなしはどうかと思うので、システム起動/停止を自動化します。
※ AWSの検証や構築・テストの現場ではかなり使うと思います。
---
### 自動停止をCloud Watchで設定する
1. Cloud Watchダッシュボードから==ルール== → ==ルールの作成==を選択
2. イベントソースは==スケジュール==、==cron式==を選択
3. フィールドに通常のcrontabファイルに書くのと同様、停止したい時間を設定する。ターゲットは==EC2 StopInstances API 呼び出し==、==InstanceID==は自動停止対象のInstanceID、==この特定のリソースに対して新しいロールを作成する==にチェックし、==設定の詳細==をクリック
4. 設定の詳細で==ルール名==と==説明==を入力し、有効化にチェックを付けたまま==ルールの作成==をクリック
---
###### 参考:cronのフィールド
###### 書式: 分 時 日 月 曜日 コマンド
| フィールド| 内容 |
| -------- | -------- |
| 分 | 0〜59までの整数 |
|時|0〜23までの整数|
|日|1〜31までの整数|
|月|1〜12までの整数。もしくはjan〜decまでの文字列|
|曜日|0〜7までの整数(0・7:日曜〜6:土曜。もしくはSun,Monなどの文字列)|
|コマンド|実行すべきコマンド|
|サイクル間隔|例) 分フィールドに ==*/2== で2分おきに実行|
|複数の値を指定する場合|==,== で区切る|
---
### 自動起動をCloud Watchで設定する
**・ 基本は自動停止と同じ手順だがRole作成の際にエラーが出るので事前にRoleを作成する**
1. ==IAMコンソール==から==ロール==→==ロールの作成==を選択
2. ==エンティティ:AWSサービス==→==ユースケース:EC2==を選択→==次のステップ==
3. ==ポリシーのフィルタ==にSSMを入力→==AmazonSSMAutomationRole==→==次のステップ==
4. ==タグの追加==はオプションなので入力は任意。今回はスキップ
5. ==ロール名==と==説明==を入力して==ロールの作成==
6. 作成したロールを再度選択して==信頼関係タブ==→==信頼関係の編集==を選択し以下のJSONを入力し==信頼ポリシーの更新==
```json=
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"",
"Effect":"Allow",
"Principal":{
"Service":[
"ec2.amazonaws.com",
"ssm.amazonaws.com"
]
},
"Action":"sts:AssumeRole"
}
]
}
```
7. 作成したロールの==ロールARN==をコピーして==アクセス権限タブ==の右側にある==インラインポリシーの追加==をクリック
8. ==ビジュアルエディタタブ==のサービスに==IAM==、アクションに==PassRole==、リソースは==ARNの追加==をクリックし、**IAM_role の ARN の指定**にコピーした==ロールARN==をペーストし==追加==。
9. ポリシー名を入力し==ポリシーの作成==
10. あとは自動停止の設定同様、Cloud Watchダッシュボードから==ルールの作成==を行う。ターゲットの設定時に==SSMAutomation==、ドキュメントにAWS_StartEC2Incetance、定数のIncetanceIDに==自動起動対象のEC2インスタンスID==、<span style="color:red;">「AutomationAssumeRole」にはコピーしたロールARNを入力。</span> ルール名と説明を入力し作成すれば完成。
---
自動停止は比較的簡単に設定できます。自動起動はロールとポリシーの設定が必要となるのでわからない場合はユーザーガイドを読みましょう。
[AWS Systems Manager ユーザーガイド](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/automation-permissions.html)