标签: aws-lambda

go中的lambda多部分/文件上传

我需要使用 Go 对通过 AWS Lambda 上传的上传文件的内容进行一些简单的操作,但不确定如何解析接收内容,因为我是 Go 新手。到目前为止我找到的解决方案与http包和MultiPart表单函数有关。

type Request events.APIGatewayProxyRequest

func Handler(ctx context.Context, req Request) (Response, error) {
fmt.Println(req.Body)
....
}
Run Code Online (Sandbox Code Playgroud)

这就是我的请求正文的样子

------WebKitFormBoundaryx0SVDelfa90Fi5Uo
Content-Disposition: form-data; name="file"; filename="upload.txt"
Content-Type: text/plain

this is content

------WebKitFormBoundaryx0SVDelfa90Fi5Uo--
Run Code Online (Sandbox Code Playgroud)

我的请求是 的实例APIGatewayProxyRequest。

我想知道是否可以获得一个自定义结构,我可以从中访问 fe 等数据

customStruct.content => "this is content"
customStruct.fileName => upload.txt
customStruct.fileExtension => txt
Run Code Online (Sandbox Code Playgroud)

file-upload go aws-lambda

1
推荐指数
1
解决办法
2133
查看次数

Go Lambda 的 AWS Step Function 错误处理

我找不到如何根据 Go 处理程序返回的错误在 Step 函数中定义错误条件匹配器的详细说明。

这handler是一个标准的 Go 函数,error如果从上游服务获取 503 则返回:

func HandleHotelBookingRequest(ctx context.Context, booking HotelBookingRequest) (
    confirmation HotelBookingResponse, err error) {
    
    ...
        if statusCode == http.StatusServiceUnavailable {
            err = errors.New("TransientError")
        } else {

Run Code Online (Sandbox Code Playgroud)

我可以控制函数返回的内容以及它如何格式化字符串;我找不到任何关于在这里使用什么的真实信息(或者在一个Catch子句中),所以这与上面的内容相匹配:

      "Retry": [
        {
          "ErrorEquals": [
            "TransientError"
          ],
          "BackoffRate": 1,
          "IntervalSeconds": 1,
          "MaxAttempts": 3,
          "Comment": "Retry for Transient Errors (503)"
        }
      ]
Run Code Online (Sandbox Code Playgroud)

当我在控制台中测试 Lambda 时,当上游返回 503 时,我得到的结果(如预期):

{
  "errorMessage": "TransientError",
  "errorType": "errorString"
}
Run Code Online (Sandbox Code Playgroud)

我有一个明显的印象(但不太确定如何验证这一点),如果我更改为:

          "ErrorEquals": [
            "errorString"
          ],
Run Code Online (Sandbox Code Playgroud)

有效Retry(至少,查看 …

go aws-lambda aws-step-functions aws-serverless

1
推荐指数
1
解决办法
1560
查看次数

即使处理程序返回错误后,Lambda 也不会重新尝试处理 SQS 消息

我正在尝试使用标准 SQS 调用 lambda 函数。我已经使用 try-catch 块处理了错误,每当捕获到错误时,就会返回该错误。否则,将返回 200 OK 响应消息。

我想重新处理返回错误的消息。但 lambda 不会重新处理这些消息。即使保留时间段(5 分钟)> 可见性超时(1 分钟) 为什么会发生这种情况?

const { spawnSync, execSync } = require('child_process');
const fs = require('fs');
const { S3Client, GetObjectCommand, PutObjectCommand } = require("@aws-sdk/client-s3");
const { DynamoDBClient, UpdateItemCommand } = require("@aws-sdk/client-dynamodb");
const { marshall } = require('@aws-sdk/util-dynamodb');

exports.lambdaHandler = async (event) => {

  try {

    const body = JSON.parse(event["Records"][0]['body']);

    try {

      // Code base 1
      // All the above imported dependencies will be used here

      const response = …
Run Code Online (Sandbox Code Playgroud)

error-handling amazon-sqs aws-lambda retry-logic

1
推荐指数
1
解决办法
1316
查看次数

AWS Lambda 函数无法识别我的 Python 依赖层

我的目标是使用存储 python 依赖项的 python 3.7 运行时为 aws lambda 函数上传一个小层,但我似乎无法让它识别模块。

我创建了一个Makefile来生成 zip 文件

create-lambda-layer:
    docker run -dit --name AL amazonlinux:latest
    docker cp requirements.in AL:/root/requirements.in
    docker exec -it AL bash -c "yum update -y \
        && yum install -y python3.7 zip  \ 
        && python3 -m pip install --upgrade pip \
        && pip install wheel \
        && mkdir -p /root/lambda/ \
        && pip install -r /root/requirements.in -t /root/lambda/ \
        && cd /root/lambda/ \
        && zip -r python.zip ."
    docker cp AL:/root/lambda/python.zip …
Run Code Online (Sandbox Code Playgroud)

python amazon-web-services aws-lambda aws-lambda-layers

1
推荐指数
1
解决办法
4858
查看次数

AWS lambda 容器 /bin/sh 错误:运行时退出但未提供原因”

我从 AWS lambda 容器中收到此错误Error: Runtime exited without providing a reason 当我在本地运行此容器时,我得到了exit code 0

但是当我在 Lambda 中运行它时,我收到了上面提到的错误exit code 0。

在这两种情况下,备份都会正确创建S3

我的容器运行此命令:

FROM alpine:3.14.2

ARG BUILD_ID
ARG BUILD_DATE
ARG VERSION=0.0.9

LABEL maintainer="Rostyslav Malenko"
LABEL version="$VERSION"
LABEL description="This is custom Alpine Docker Image for the create SQL dump from RDS to S3 directly."
LABEL org.label-schema.build-date=$BUILD_DATE

ENV BUILD_ID=${BUILD_ID} \
    APPLICATION_VERSION=${VERSION} \
    SERVICE_ROLE=backup \
    NUMPROCS_WORKER=1 \
    INSTALL_PACKAGES="gzip mysql-client aws-cli" \
    WORKSD="/tmp"

RUN apk -v --update add --no-cache ${INSTALL_PACKAGES} && \ …
Run Code Online (Sandbox Code Playgroud)

containers amazon-s3 amazon-web-services docker aws-lambda

1
推荐指数
1
解决办法
3505
查看次数

使用默认 aws/S3 KMS 密钥进行解密对象的跨账户访问

在我的账户 A 中,我有 S3 存储桶,其中对象是加密的默认 AWS 托管密钥 aws/s3。

我想从帐户 B lambda 读取这些对象。但与帐户 A 中的对象一样,对象是使用 AWS 托管密钥 aws/s3 加密的,我无法在此处修改 KMS 密钥策略。

我尝试在帐户 A 中创建一个角色,该角色拥有所有 KMS 和 S3 权限,并信任帐户 B 中的角色。然后从帐户 B 我在 A 中承担此角色。但仍然得到

Access denied error in GetObject

我可以在这里做什么来从帐户 A 读取对象。请指导。

账户 A 中的角色

statement
{
   Action: kms:*
   Resource : "*"
   Effect: allow
}
{
  Action: S3:*
   Resource : 
      arn:aws:s3:::my-s3
      arn:aws:s3:::my-s3/*
   Effect: allow
}
Run Code Online (Sandbox Code Playgroud)

amazon-s3 amazon-web-services amazon-iam aws-lambda amazon-kms

1
推荐指数
1
解决办法
1471
查看次数

如何使用“python:alpine”构建自定义映像以与 AWS Lambda 一起使用?

本页介绍如何使用“python:buster”创建与 Lambda 一起使用的 Docker 映像

https://docs.aws.amazon.com/lambda/latest/dg/images-create.html#images-create-from-alt

我想对“python:alpine”做同样的事情

但在尝试安装“libcurl4-openssl-dev”时遇到问题


有人成功构建了用于 lambda 的“python:alpine”图像吗?

docker dockerfile aws-lambda alpine-linux

1
推荐指数
1
解决办法
2011
查看次数

有没有办法在 terraform 脚本内检索图层的最新版本?

我有引用一个层的 lambda,该层由其他人维护,当发布新版本时,我必须更新我的 terraform 代码以将最新版本放入 arn(此处为 19)。

有没有办法在 terraform 脚本中获取最新版本并使用它?

module "lambda_function" {
  source = "terraform-aws-modules/lambda/aws"

  function_name = "my-lambda1"
  description   = "My awesome lambda function"
  handler       = "index.lambda_handler"
  runtime       = "python3.8"

  source_path = "../src/lambda-function1"

  tags = {
    Name = "my-lambda1"
  }
  
  layers = [
    "arn:aws:lambda:eu-central-1:587522145896:layer:my-layer-name:19"
  ]
}
Run Code Online (Sandbox Code Playgroud)

谢谢。

ps:这意味着该图层的 terraform 脚本不在我的脚本中,它是我无权访问的其他脚本。

aws-lambda terraform aws-lambda-layers

1
推荐指数
1
解决办法
1766
查看次数

无法将文件从 Lambda 上传到 S3

我在本地主机上进行了测试,然后在 s3 上进行了检查,发现创建了一个新文件。但是在Lambda上测试时,虽然没有报错,但是S3上却没有文件。s3.upload(params).promise()的日志也不会显示。

var fs = require('fs');
var AWS = require('aws-sdk');
exports.handler = async (event, context, callback) => {
    context.callbackWaitsForEmptyEventLoop = false
    try {
        AWS.config.update({
            accessKeyId: accessKeyId,
            secretAccessKey: secretAccessKey
        });
        
        var s3 = new AWS.S3();
        var path = 'myfile.txt';
        var file_buffer =  fs.readFileSync(path);

        console.log(file_buffer);
        var params = {
            Bucket: 'bucket-dev',
            Key: '2222.txt',
            Body: file_buffer
        };
        console.log("1111");
        s3.upload(params).promise()
            .then(function(data) {
                console.log("Successfully uploaded to");
                callback(null, "All Good");
            })
            .catch(function(err) {
                console.error(err, err.stack);
                callback(err);
            });
        console.log("2222");
       return context.logStreamName
    } catch (err) {
        console.log(err); …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 amazon-web-services node.js aws-lambda

1
推荐指数
1
解决办法
2003
查看次数

如何使用 Javascript AWS CDK 部署 Python AWS Lambda 及其依赖项?

我有一个使用 JavaScript 构建的 AWS CDK 堆栈。堆栈有多个 lambda。其中大部分是用 JavaScript 编写的。我想在 python 中添加一个 lambda 。当我不导入外部依赖项时,python lambda 工作正常,但在安装它们时不理解。我尝试将软件包安装在一个package文件夹或一个python文件夹中,并按照这些文章的建议进行压缩,但没有成功:

https://docs.aws.amazon.com/lambda/latest/dg/python-package.html https://aws.amazon.com/premiumsupport/knowledge-center/lambda-import-module-error-python/

我收到的错误是"Unable to import module 'py1': No module named 'x'" (x 指我尝试导入的任何包名称)

我的javascript CDK库代码是这样的:

// javascript lambda
new lambda.Function(this, 'lambda-js1', {
  functionName: `js1`,
  code: lambda.Code.fromAsset('assets/lambdajs'),
  handler: 'js1.handler',
  runtime: lambda.Runtime.NODEJS_14_X,
})

// python lambda
new lambda.Function(this, 'lambda-py1', {
  functionName: `py1`,
  code: lambda.Code.fromAsset('assets/lambdapy'),
  handler: 'py1.handler',
  runtime: lambda.Runtime.PYTHON_3_8,
})
Run Code Online (Sandbox Code Playgroud)

assets/lambdapy我在使用中安装了依赖项

pip install x
pip install --target ./package x
pip install -t …
Run Code Online (Sandbox Code Playgroud)

python amazon-web-services aws-lambda aws-cdk

1
推荐指数
1
解决办法
5031
查看次数