🙆

[小ネタ]EventBridge Scheduleをboto3で更新するスニペット

2022/12/10に公開

EventBridgeのスケジュールを更新するCLI/boto3を書いていると、更新するときにデフォルトから変更している全パラメータを再投入しなければならず、面倒です。

以前、こういうヘルパースクリプトを書いたのですが、いまいち使い勝手が悪いです。自分でもあまり使っていないです。。

https://zenn.dev/shimo_s3/articles/df70484bfe4e39

小さめの関数にして使うようになったので共有します。1つのパラメータであればこれで十分かなと。

Code

スケジュール名と変えたいパラメータを受け取って更新する関数です。

  • get_sheduleで現状のパラメータを取り出す
  • 更新時に不要なもの(unnecessaries)を捨ててparamsとして再構成
  • 更新するパラメータは kwargsから読んで上書き
def update_scheduler(client, schedule_name, **kwargs):
    """
    ex. update_scheduler(client, schedule_name, State="DISABLED")
    """

    current_params = client.get_schedule(Name=schedule_name)
    unnecessaries = ["ResponseMetadata", "Arn", "CreationDate", "LastModificationDate"]
    keys = [x for x in current_params if x not in unnecessaries]

    params = {}
    for key in keys:
        params[key] = current_params[key]

    for k, v in kwargs.items():
        params[k] = v

    client.update_schedule(**params)

呼び出し時はこういう感じで。このときは、ENABLEDだけを更新しています。**kwargsなので複数のパラメータを更新しても大丈夫です。

import boto3

client = boto3.client("scheduler")

schedule_name = <name-of-schedule>

update_scheduler(client, schedule_name, State="ENABLED") 

Discussion