首页 > 解决方案 > 配置 Boto3 有条件地不执行命令

问题描述

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

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

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

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

标签: pythonamazon-web-servicesmetaprogrammingboto3

解决方案


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

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

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


推荐阅读