标签: aws-lambda

如何使用 AWS Lambda 函数从 S3 解码 .gz 文件?

我让 AWS Config 每 12 小时将我的 AWS 系统的快照发送到 S3 存储桶。它们是以 .json.gz 格式存储的 JSON 文件,其中包含有关整个 AWS 系统的信息。在存储桶中创建对象时,会触发 Lambda 函数以读取该文件。我的计划是读取函数中的 JSON 信息,解析数据并创建描述 AWS 系统某些元素的报告,并将这些报告推送到另一个 S3 存储桶。

我目前的代码是:

data = s3.get_object(Bucket=bucket, Key=key)
text = data['Body'].read().decode('utf-8')
json_data = json.loads(text)
Run Code Online (Sandbox Code Playgroud)

我目前得到的错误是:“utf-8”编解码器无法解码位置 1 的字节 0x8b:无效起始字节

我的猜测是这个错误是说 data['Body'] 中的某些字节不是 ASCII 字符。显然我无法使用标准 utf-8 进行解码,所以我想解压缩 .gz 文件。有没有办法做到这一点?我已经查看了 zipfile.py,但我无法真正收集有关我的用例的任何信息。谢谢。

python json utf-8 amazon-web-services aws-lambda

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

在 SageMaker 中隐藏密钥(环境变量?)

我曾经在环境变量 (.bash_profile) 中隐藏连接凭据。最近与 SageMaker 合作,我在 SageMaker 中可用的终端上尝试了类似的过程,但出现以下错误,

NameError: name 'DB_USER' is not defined
Run Code Online (Sandbox Code Playgroud)

是否有任何有效的方法可以在 SageMaker 中隐藏凭据?

amazon-ec2 amazon-web-services aws-lambda amazon-sagemaker

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

如何验证消息是否在 AWS SNS 中传递?

这是我的 lambda 函数。只返回消息 ID 和请求 ID。但是如何验证消息是否已传递?

        const AWS = require('aws-sdk');
           AWS.config.update({
                accessKeyId: 'xxxx',
                secretAccessKey: 'xxxx',
                region: 'xxxx'

            });
            const mobile = 'xxxxxxx';
            const sns = new AWS.SNS();
        const confirmUpload =  (callback) => {
          sns.publish({
            Message: 'Test From Admin side',
                Subject: 'Admin',
                MessageStructure: 'string',
                PhoneNumber: mobile
          }, (err, result) => {
            if (err) callback(false, err);
            else callback(true, result);

          });
        };
        exports.handler =  (event,context, callback) => {
            confirmUpload((st, data) =>{
                if(st){
                    let record = {
                        "data": JSON.stringify(data),
                        "event": event,
                        "context": context
                    }; …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services node.js aws-lambda

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

为 AWS Lambda 存储私有 SSH 密钥的标准做法是什么

我的 lambda 函数负责 ssh 连接到我们的一些 EC2 实例。目前我只是将我们的密钥文件存储在 lambda 的部署包中,但这显然不是生产的理想解决方案。我已经研究了几种方法,例如将密钥存储在私有 S3 存储桶中,并将其存储为加密的环境变量。但是,我对一直从 S3 存储桶中提取密钥并不感到兴奋,而且加密的环境变量似乎也不会在未来的 lambda 函数中持续存在。为 lambda 使用存储私钥的其他行业标准方法是什么?

ssh amazon-ec2 amazon-web-services aws-sdk aws-lambda

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

部署 lambda 时 CDK 排除文件

在打字稿中做一些 lambdas 并通过 cdk 部署等。一切正常,但我正在使用:

code: lambda.Code.asset('lambdas'),
Run Code Online (Sandbox Code Playgroud)

本地目录是 lambdas。然而,这会在其中部署 .js、.ts 和 .d.ts 文件,我想知道是否有这样的说法:

code: lambda.Code.asset('lambdas/*.js'),
Run Code Online (Sandbox Code Playgroud)

只需为较小的部署等部署 javascript 文件。

我想过在 tsconfig 文件中使用 outDir 但这也适用于 cdk stack.ts 所以这不起作用。

那么我有什么想法可以从 ts 项目中部署 js 文件吗?

aws-lambda aws-cdk

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

AWS Lambda 函数中的单例实例生命周期 (Python)

如果我在 Lambda 中创建一个单例实例,并将 lambda 超时设置为 30 秒。下次调用时,如果使用相同的容器,我会获得相同的单例实例还是新的单例实例。我正在 lambda 处理程序中创建这个单例,并且使用 python。

python aws-lambda

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

如何从 AWS Lambda 函数访问 YAML 文件中的变量?

我正在使用无服务器框架来测试我的 lamdba 函数,但它要求我访问我的 yaml 文件以获取特定变量。为了清楚起见,我将添加文件和下面的代码:

我需要访问的 YAML 变量是 tableName

environment:
  tableName: notes_project
Run Code Online (Sandbox Code Playgroud)

这是 lambda 函数:

import json
import boto3
import uuid

dynamodb = boto3.resource('dynamodb')

table = dynamodb.Table('notes_project')

def lambda_handler(event, context):

    data = json.loads(event['body'])

    item = {
        'user_id': event['requestContext']['identity']['cognitoIdentityId'],
        'note_id': str(uuid.uuid1()),
        'note_text': data
    }

    table.put_item( Item = item)
Run Code Online (Sandbox Code Playgroud)

目前,您可以看到表名是硬编码的,但我想避免这种情况。

到目前为止我尝试过的:

我已经查看了在 python中获取 yaml 键值和其他涉及 os.environ 的建议,但如果我要将代码部署到 AWS,我不确定这些是否是正确的选项。我对 lambda 代码在部署后如何访问这些 yaml 变量几乎一无所知。一个解释将不胜感激。

python aws-lambda serverless-framework

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

失败的事件没有发送到死信队列?

我在 AWS Lambda 配置中设置了一个死信队列来处理失败的事件。但是当我尝试发送错误记录(大小约为 1KB)时,它没有被发送到 DLQ。

以下是我遵循的步骤:-

  1. 将无效记录从 aws cli 发送到 kinesis 流。

  2. Lambda 函数从流中轮询记录并尝试处理。并且由于格式错误的输入而导致失败。

  3. 检查 Lambda 函数云监视日志以确认处理已导致错误。
  4. 在 Lambda 的云监视日志中检查了死信错误数,但它仍然是 0。还通过 AWS 控制台验证了 DLQ,其中可用消息仍然是 0。

AWS Lambda 中用于异步调用的配置:

  • 事件的最大时长 = 1 分钟,
  • 重试尝试 = 1

DLQ的配置:

  • 传送延迟:0 秒
  • 默认可见性超时:30 秒,
  • 最大消息大小:256 KB

有人能解释一下 SQS 中不可用的错误消息的可能原因是什么吗?

注意:Lambda 具有在 SQS 上执行所有操作所需的权限。并且没有其他 SQS 消费者。

amazon-sqs amazon-web-services amazon-kinesis aws-lambda

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

为什么我的 await lambda.invoke 函数多次调用 lambda?

目前

我有一个lambdaX调用另一个lambdaY。

拉姆达 X:

"use strict";

const AWS = require('aws-sdk');
AWS.config.region = 'ap-southeast-2';
var lambda = new AWS.Lambda();

exports.handler = async (event) => {

  //the final return
  var dataToSave = []

  //data to be added to array
  let returnLoad;

  var params = {
    FunctionName: 'lambdaY', // the lambda function we are going to invoke
    InvocationType: 'RequestResponse',
    LogType: 'Tail', //Set to Tail to include the execution log in the response.
  };

  try {
    await lambda.invoke(params, function(err, data) …
Run Code Online (Sandbox Code Playgroud)

javascript amazon-web-services promise async-await aws-lambda

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

AWS Lambda (.NET) + SQS:将 Lambda 事件 JSON 负载转换为字符串时出错

我使用 AWS Lambda(.NET Core 2.1 环境)+ SQS 作为触发器

问题是我的 lambda 无法解析我的 SQS 消息。

将 Lambda 事件 JSON 负载转换为字符串时出错。必须引用 JSON 字符串,例如“Hello World”才能转换为字符串:解析值时遇到意外字符:{。路径 '',第 1 行,位置 1。:JsonSerializerException

这是我的处理程序的声明:

public async Task<string> FunctionHandler(DummyMessage message, ILambdaContext context)
Run Code Online (Sandbox Code Playgroud)

模型:

public class DummyMessage {
  public string Label { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我尝试过的来自 AWS 控制台的 SQS 输入:{"Label":"qwerty"}, "{"Label":"qwerty"}", "{\"Label\":\"qwerty\"}",但发生了同样的错误。

你能帮忙解决这个问题吗?

.net c# amazon-sqs amazon-web-services aws-lambda

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