毎週起動する RDS を毎週停止させる CodeBuild


背景

RDSの停止ができるようになりましたが、停止してから1週間経過すると、ふたたび起動してきます。停止したのは、停止しておきたい理由があるから停止したのに、おまえ何で起動さした?

毎週手作業でやるのも微妙。Lambdaでbotoするのを書くのもダルい。

CodeBuild で毎週実行させて awscli でやるのが究極に簡単でした。

buildspec.yml

コンテナイメージは awscli が入るなら何でも良いです。作例では amazonlinux:2 を使っています。

version: 0.2

env:
  variables:
     RDS_NAME: "RDSインスタンス名"

phases:
  install:
    commands:
      - yum install -y awscli
  build:
    commands:
      - aws rds stop-db-instance --db-instance-identifier ${RDS_NAME}

IAM

CodeBuildに付けてるIAMロールに StopDBInstance 権限を付与します。Resourceの範囲はお好みの塩梅で。ほんとうにStopDBInstanceしてよいものだけに絞るのが安全かと思います。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "rds:StopDBInstance",
            "Resource": "arn:aws:rds:*:*:db:RDSインスタンス名"
        }
    ]
}

CodeBuild内でawscliを実行するので iam:PassRole も付けてください。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "iam:PassRole"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}

実行周期

CodeBuildの「ビルドのトリガー」で実行周期の設定ができますね。毎週1回実行などとしておきます。

参考