【问题标题】:How to run `AWS CLI` command within `aws lambda` function?如何在“aws lambda”函数中运行“AWS CLI”命令?
【发布时间】:2022-05-19 06:16:32
【问题描述】:

我想在aws lambda function 中运行aws cli 命令(实际上是aws s3 sync)。我怎么做?理想情况下在python 中,但javascript(或java)也可以。

使用python 我尝试通过Creating a Deployment Package 实现这一点,我将awscli 作为python 包,以便我以后可以使用它。 但是,在 lambda 函数执行期间,aws 命令不可用,只有 awscli 包可用。

我该怎么做:

  • 或者:确保我有awscli 可以在 lambda 函数执行期间被调用?
  • 或者:直接从pythonawscli库构造一个aws s3 sync调用?

【问题讨论】:

  • 为什么要从 lambda 调用 aws cli?难道你不能用 sdk 得到同样的结果吗?
  • 我不这么认为(或者至少,我没有找到这样做的方法)。当然,我可以使用 SDK 创建我自己的 sync 例程,但我真的很想使用 aws cli 已经提供的那个(内部使用 SDK (botocore)),但扩展了它有点。

标签: python amazon-web-services aws-lambda


【解决方案1】:

查看项目https://github.com/lucioveloso/cli2cloudformation,您将了解如何将 cli 包装在 lambda 函数中。

【讨论】:

  • 将信息放入您的答案中,因为链接可能会失效。
  • 这实际上是我见过的最干净的解决方案之一
【解决方案2】:

-在本地虚拟环境中安装 AWS CLI

-将 AWS CLI 及其所有依赖项打包到一个 zip 文件中

-创建 Lambda 层

-在你的 lambda 函数中使用该层

分步指南位于: https://bezdelev.com/hacking/aws-cli-inside-lambda-layer-aws-s3-sync/

或者

按照其他堆栈溢出 ans 中的建议使用 bash 层 Call aws-cli from AWS Lambda

【讨论】:

    【解决方案3】:

    借鉴@lucio-veloso 的回答,这是从 Python 调用 CLI 的一种非常聪明的方式。

    在您的捆绑包中包含awscli,但使用您的构建过程将awscli 作为依赖项发送。

    然后你可以运行类似的东西:

    aws_cli_driver = awscli.clidriver.create_clidriver()
    aws_cli_driver.main(["s3", "sync", "--delete", "s3://test-my-bucket", "/tmp/my-path"])
    if exit_code > 0:
        raise RuntimeError(f"awscli exited: {exit_code}")
    

    这似乎适用于我在 Lambda 中使用 AWS CLI 的 aws s3 sync 用例。

    【讨论】:

      猜你喜欢
      • 2021-12-17
      • 2018-02-16
      • 1970-01-01
      • 2020-03-01
      • 2017-01-16
      • 2019-10-30
      • 2017-09-21
      • 2021-12-08
      • 1970-01-01
      相关资源
      最近更新 更多