🐕

Amazon EventBridge SchedulerでEC2/RDSの自動停止

2022/11/12に公開

はじめに

2022/11/10に新しく発表された機能です。
以前はLambdaでEC2/RDSの停止処理を少し書く必要ありましたが、ぽちぽち選択するだけで完結できるようです。

今回の目的

Amazon EventBridge Schedulerを利用して、

  1. EC2を自動で停止(または起動)したい。今回の例では定期実行ではなく、ワンタイムとする。
  2. RDSを自動で停止(または起動)したい。今回の例では定期実行ではなく、ワンタイムとする。

事前準備

  1. EC2の停止に使うIAM Roleを作成
    • Permission
      • AmazonEC2FullAccess (本来は権限絞るべきだがテストなので。)
    • Principal
      • scheduler.amazonaws.com
    • Role Name
      • ec2-stop-and-start (任意の名前)
  2. RDSの停止に使うIAM Roleを作成
    • Permission
      • AmazonRDSFullAccess (本来は権限絞るべきだがテストなので。)
    • Principal
      • scheduler.amazonaws.com
    • Role Name
      • rds-stop-and-start (任意の名前)
  3. テストで停止させるEC2/RDSを作成
    • EC2
      • Instance Id:i-0e49c165101ab7f23
    • RDS
      • DB Cluster Id:database-1

EC2の自動停止スケジュールを作成

  1. Amazon EventBridge -> Schedulesから、Create scheduleを押下。
  2. Schedule Name and Description
  3. One-time scheduleを選択(定期実行は、Reccurring scheduleを選択)
  4. Tartget detailで、EC2 StopInstancesを選択
  5. TargetにEC2 Instance Idを設定
    {
        "InstanceIds": [
    	"i-0e49c165101ab7f23"
        ]
    }
    
  6. Retry policy and dead-letter queue
    テスト用なので、全てOFFとした。
  7. Permissionsに事前準備したIAM Roleを設定
  8. 上記以外の項目はデフォルト値とし、作成

RDSの自動停止スケジュールを作成

1~3はEC2と同様。
4. Tartget detailで、RDS StopDBClusterを選択

5. TargetにRDS DbClusterIdentifierを設定

{
    "DbClusterIdentifier": "database-1"
}

6以降も同様だが、IAM Roleはrds-stop-and-startを選択すること。

スケジュールの実行確認

今回はEC2/RDS共にワンタイム実行にしたため、設定時間にEC2及びRDSが停止することを確認
した。

最後に

今回は自動停止のみですが、自動起動も同じ手順で簡単に作成することが可能です。
複数の環境やインスタンスに設定することを考えて、AWS CLIやCloudFormation(2022/11/12現在の対応有無は未確認)で作成も検討してみましょう。

また、クラスメソッドさんの記事
[新機能] タイムゾーン指定でスケジュール起動できるAmazon EventBridge Schedulerがリリースされました
にはタイムゾーン指定ができるなども記載があるため、今回の用途以外の便利な方法も検討してみたいと思います。

Discussion