put_subscription_filter 中的 AWS boto3 append/delete 参数

AWS boto3 append/delete parameter in put_subscription_filter

我正在从 2 个环境(dev 和 prd)订阅 cloudwatch 日志到同一个 firehose (dev)。开发日志订阅开发流水线,prd 日志订阅开发中的目标资源,然后将日志流式传输到同一个流水线。执行此操作的 boto 调用几乎相同。

这是订阅 firehose 的代码:

 boto_client.put_subscription_filter(
        destinationArn=DESTINATION_ARN,
        filterName=" ",
        filterPattern=PATTERN,
        logGroupName=LOG_GROUP_NAME,
        roleArn=IAM_ROLE
 )

这是订阅目的地的代码:

 boto_client.put_subscription_filter(
        destinationArn=DESTINATION_ARN,
        filterName=" ",
        filterPattern=PATTERN,
        logGroupName=LOG_GROUP_NAME
 )

唯一的区别是 roleArn 参数。它不能传递到目的地,必须传递到消防水带。所以我的问题是如何构建调用,以便如果环境是开发的 - 我会附加 roleArn。或相反亦然。如果它是 prd - 我会删除 roleArn 参数。这样我就不必创建 2 个几乎相同的函数。

PS。我试图为 roleArn 传递 None、空字符串和虚拟值 - 但它没有用。

花了几天时间,但想通了。 你可以使用 **kwargs 来传递这样的参数

def create_subscription(**kwargs):
   if isDev:
      kwargs["roleArn"] = ROLE_ARN
   boto_client.put_subscription_filter(**kwargs)

create_subscription(destinationArn=DESTINATION_ARN,
                    filterName=" ",
                    filterPattern=PATTERN,
                    logGroupName=LOG_GROUP_NAME)