简体   繁体   English

如何在“aws lambda”函数中运行“AWS CLI”命令?

[英]How to run `AWS CLI` command within `aws lambda` function?

I would like to run aws cli command (actually aws s3 sync ) from within the aws lambda function .我想从aws lambda function中运行aws cli命令(实际上是aws s3 sync )。 How do I do that?我怎么做? Ideally in python , but javascript (or java ) would work too.理想情况下在python中,但javascript (或java )也可以。

Using python I tried achieving this by Creating a Deployment Package where i would have awscli as a python package, so that I can use it later.使用python ,我尝试通过Creating a Deployment Package来实现这一点,我将awscli作为 python 包,以便我以后可以使用它。 However, the aws command is not available during lambda function execution, and only the awscli package is.但是,在 lambda 函数执行期间, aws命令不可用,只有awscli包可用。

How can I:我怎样才能:

  • either: make sure that I have awscli available to be called during lambda function execution?或者:确保在 lambda 函数执行期间可以调用awscli
  • or: construct a aws s3 sync call directly from python awscli library?或者:直接从 python awscli库构造一个aws s3 sync调用?

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

-Install AWS CLI in a local virtual environment - 在本地虚拟环境中安装 AWS CLI

-Package AWS CLI and all its dependencies to a zip file - 将 AWS CLI 及其所有依赖项打包到一个 zip 文件中

-Create a Lambda Layer - 创建 Lambda 层

-Use that layer in your lambda function - 在您的 lambda 函数中使用该层

Step by step guide is at : https://bezdelev.com/hacking/aws-cli-inside-lambda-layer-aws-s3-sync/分步指南位于: https ://bezdelev.com/hacking/aws-cli-inside-lambda-layer-aws-s3-sync/

Or或者

use bash layers as suggested in other stack overflow ans Call aws-cli from AWS Lambda按照其他堆栈溢出中的建议使用 bash 层从 AWS Lambda 调用 aws-cli

Piggybacking on @lucio-veloso's answer, that's a pretty clever way of invoking the CLI from Python.捎带@lucio-veloso 的回答,这是从Python 调用CLI 的一种非常聪明的方式。

Include the awscli in your bundle but shipping the awscli as a dependency using whatever your build process is.awscli包含在您的包中,但使用您的构建过程将awscli作为依赖项发送。

Then you can run something like:然后你可以运行类似的东西:

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}")

Which seems to work for my aws s3 sync use case for using the AWS CLI in Lambda.这似乎适用于我在 Lambda 中使用 AWS CLI 的aws s3 sync用例。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM