【问题标题】:AWS CLI execute a lambda function issueAWS CLI 执行 lambda 函数问题
【发布时间】:2017-09-18 15:22:12
【问题描述】:

我正在尝试从 Windows 10 中的 AWS CLI 调用 lambda 函数。我之前通过 AWS configure 完成了我的客户端配置。

使用的命令是:

aws lambda invoke \
    --function-name arn:aws:lambda:us-east-1:111111111:function:xxx \
    --invocation-type RequestResponse

但是我的系统返回错误aws: error: too few arguments,如下图:

你们能指导我在这次处决中取得成功吗?

谢谢

【问题讨论】:

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


    【解决方案1】:

    您似乎需要提供一个输出文件。所以重新运行如下:

    aws lambda invoke \
        --function-name arn:aws:lambda:us-east-1:111111111:function:xxx \
        --invocation-type RequestResponse \
        outfile.txt
    

    【讨论】:

    • outfile.txt 文件存放在哪里?你知道吗?谢谢
    • 写入当前工作目录,除非您指定显式路径,例如 /tmp/outfile.txt。
    • 你是救星...当我试图在本地测试我的 lambda 时,我正在努力寻找runtime.ImportModuleError cannot find module 'app' 的答案 - 这可能是由于我的旧 Windows 8 和 docker 工具箱
    【解决方案2】:

    除了@jarmod 的回答: 如果想直接将输出发送到标准输出,可以使用-

    aws lambda invoke --function-name my_function --invocation-type RequestResponse --log-type Tail - | grep "LogResult"| awk -F'"' '{print $4}' | base64 --decode

    或者如果你有jq

    aws lambda invoke --function-name my_function --invocation-type RequestResponse --log-type Tail - | jq '.LogResult' -r | base64 --decode

    【讨论】:

    • 我在 Mac-os 上使用此代码,但它会在当前目录中创建一个文件。该文件的名称只是一个破折号-。文件内容为{}。每次运行宏时,我都必须手动删除它。具体来说,我的代码行是AWS_PAGER="" aws lambda invoke --function-name paypal_ipn --invocation-type RequestResponse --payload fileb://"$tmp_dir"/invoke-payload.json --log-type Tail - | grep "LogResult"| awk -F'"' '{print $4}' | base64 --decode
    • 另外,我似乎无法设置 outputfile.txt (就像在 @jarmod 的回答中一样),或者使用您的代码打印出函数的输出。
    【解决方案3】:

    如果您正在与 Jenkins(Windows) 集成并且不想使用 Lambda 插件。 Lambda 插件不知何故没有采用我在 jenkins 绑定中设置的凭据。

    首先准备有效载荷。我已经从用户那里获取了参数。

    @echo off
    @echo {> payload.json
    @echo  "type": "RequestType",>> payload.json
    @echo  "siteCode": "%SiteCode%",>> payload.json
    @echo  "siteDesc": "%SiteDesc%",>> payload.json
    @echo }>> payload.json
    

    使用 aws cli 调用 lambda。

    aws lambda invoke --function-name "FuntionName" --invocation-type RequestResponse --region us-zone-id --log-type Tail --payload file://payload.json response.json
    

    您可以使用 type 命令打印响应。

    type response.json
    

    【讨论】:

      【解决方案4】:

      AWS CLI 版本详情

      aws-cli/2.1.13 Python/3.7.9 Windows/10 exe/AMD64 prompt/off
      

      调用Lambda cmd,Payload需要Base64编码(https://www.base64decode.org/),如果需要也可以安装插件

      aws configure // If applicable perform the aws configure
      aws lambda invoke --function-name test_details:DEV  --payload #yHw response_test.json
      

      成功响应

      {
          "StatusCode": 200,
          "ExecutedVersion": "18"
      }
      

      response_test.json 应该在同一路径下生成。 参考文档https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/invoke.html

      【讨论】:

        猜你喜欢
        • 2018-02-16
        • 1970-01-01
        • 2016-10-16
        • 2019-05-01
        • 1970-01-01
        • 2017-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多