【问题标题】:Configure Boto3 to conditionally not execute commands配置 Boto3 有条件地不执行命令
【发布时间】:2020-04-09 16:57:27
【问题描述】:

我正在 Boto3 中构建一个脚本集合,我想要一个 DRY_RUN 选项,当设置为 True 时不会执行 Boto3 命令。我想先进行此试运行,以便在实时运行脚本之前先查看日志。

我知道 EC2 客户端有一个可以传入的 DryRun 参数,但这会引发我不想要的错误。此外,我的脚本也大量处理没有 DryRun 选项的 Cloudformation 客户端。

我首先在我所有的 Boto3 命令前面加上 if not DRY_RUN: ec2_client...,但这不是最优雅的解决方案。我还考虑过将每个 Boto3 命令作为参数传递给实用函数,如果 DRY_RUN 为 False,该实用函数使用 eval() 执行该函数,但这也不理想。

是否有 Boto3 配置设置、中间件、模拟/存根库或一些 Python 元编程技术可能对此有所帮助?

【问题讨论】:

  • 所有 API 调用都在 boto3 clientresource 对象上运行。因此,在将命令传递给超类之前,您可能可以对对象进行子类化以添加您自己的逻辑。

标签: python amazon-web-services metaprogramming boto3


【解决方案1】:

我做了这样的事情只是为了测试:

def create_snapshot(resource, volume_id):
  volume = resource.Volume(volume_id)
  try:
      snap = volume.create_snapshot(
          DryRun=True
      )
  except ClientError as ce:
      print(ce)
      pass
  except Exception as e:
      print(e)
      raise

这样您将看到调用是否成功,但不会中断您的脚本。

【讨论】:

    猜你喜欢
    • 2014-08-29
    • 2022-01-03
    • 2015-10-31
    • 2021-02-23
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 2023-01-20
    • 2020-03-08
    相关资源
    最近更新 更多