1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Cloud CustodianでEC2を定時で起動、停止を簡単に設定する

Posted at

はじめに

Cloud Custodianで特定のタグがついているEC2を定期的に起動停止することをやってみました。
今回Cloud Custodianで作成するのはLambda、EventBridgeです。

Cloud Custodianとは

CNCFの一つのプロジェクトで、AWS、Azure、Google Cloud Platformなどのクラウドインフラストラクチャ上に存在するリソースの管理と保護を行うオープンソースのツールです。
https://cloudcustodian.io/

まず用意するもの

Lambdaが使用するロールをEC2の操作をできるようにポリシーを含んだ状態で用意する。下記が例

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

EC2に任意のタグを用意する。下記が今回用意したもの
key:autoStartStop
value:true

Cloud Custodianをインストール

pip install c7n

Custodianで使用するポリシーファイルを作成する。

ファイル名:ec2-start-stop.yml

policies:
  - name: ec2-auto-start
    resource: aws.ec2
    mode:
      type: periodic
      schedule: "cron(10 12 * * ? *)"
      role: "arn:aws:iam::xxxxxxxxxxx:role/xxxxxxxxx" # 事前に用意したロールARNを追加
    filters:
      - "tag:autoStartStop": "true"
    actions:
      - start

  - name: ec2-auto-stop
    resource: aws.ec2
    mode:
      type: periodic
      schedule: "cron(0 12 * * ? *)"
      role: "arn:aws:iam::xxxxxxxxx:role/xxxxxxx" # 事前に用意したロールARNを追加
    filters:
      - "tag:autoStartStop": "true"
      - "State.Name": "running"
    actions:
      - stop

コードの解説
resource: aws.ec2はポリシーが適用されるAWSリソースタイプを指定します

type: periodicはperiodicを指定することで、ポリシーが定期的に実行されます

schedule: "cron(0 12 * * ? *)"は実行されるタイミングをcron式で指定します。(0 12 * * ? *の指定はテストのためこの時間にしています。。。)

role: "arn:aws:iam::xxxxxxxxx:role/xxxxxxx"はLambda関数に適用されるIAMロールのARNを指定します

filters:はautoStartStopタグがtrueに設定されたEC2インスタンスに対してのみポリシーが適用されます

actions:はフィルタリングされたリソースに対して実行される操作を定義します

Custodianを実行する

※実行する前にAWSの認証情報の設定を行なってください。

下記コマンドで実行する

custodian run -s output ec2-start-stop.yml

実行すると

こちらのようなLambdaとEventBridgeが作成される。
スクリーンショット 2023-03-31 21.38.26.png
スクリーンショット 2023-03-31 21.38.18.png

このようにポリシーを作成し実行することで簡単にLambdaとEventBridgeが作成されます。

最後に

Cloud Custodianを使用することで簡単にEC2を定時起動と停止を構築することができました。
もうすこしCloud Custodianで難しい処理や複数アカウントでの実装方法を勉強したいと思いました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?