我让 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,但我无法真正收集有关我的用例的任何信息。谢谢。
我曾经在环境变量 (.bash_profile) 中隐藏连接凭据。最近与 SageMaker 合作,我在 SageMaker 中可用的终端上尝试了类似的过程,但出现以下错误,
NameError: name 'DB_USER' is not defined
Run Code Online (Sandbox Code Playgroud)
是否有任何有效的方法可以在 SageMaker 中隐藏凭据?
这是我的 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) 我的 lambda 函数负责 ssh 连接到我们的一些 EC2 实例。目前我只是将我们的密钥文件存储在 lambda 的部署包中,但这显然不是生产的理想解决方案。我已经研究了几种方法,例如将密钥存储在私有 S3 存储桶中,并将其存储为加密的环境变量。但是,我对一直从 S3 存储桶中提取密钥并不感到兴奋,而且加密的环境变量似乎也不会在未来的 lambda 函数中持续存在。为 lambda 使用存储私钥的其他行业标准方法是什么?
在打字稿中做一些 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 文件吗?
如果我在 Lambda 中创建一个单例实例,并将 lambda 超时设置为 30 秒。下次调用时,如果使用相同的容器,我会获得相同的单例实例还是新的单例实例。我正在 lambda 处理程序中创建这个单例,并且使用 python。
我正在使用无服务器框架来测试我的 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 变量几乎一无所知。一个解释将不胜感激。
我在 AWS Lambda 配置中设置了一个死信队列来处理失败的事件。但是当我尝试发送错误记录(大小约为 1KB)时,它没有被发送到 DLQ。
以下是我遵循的步骤:-
将无效记录从 aws cli 发送到 kinesis 流。
Lambda 函数从流中轮询记录并尝试处理。并且由于格式错误的输入而导致失败。
AWS Lambda 中用于异步调用的配置:
DLQ的配置:
有人能解释一下 SQS 中不可用的错误消息的可能原因是什么吗?
注意:Lambda 具有在 SQS 上执行所有操作所需的权限。并且没有其他 SQS 消费者。
目前
我有一个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
我使用 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\"}",但发生了同样的错误。
你能帮忙解决这个问题吗?
aws-lambda ×10
python ×3
amazon-ec2 ×2
amazon-sqs ×2
.net ×1
async-await ×1
aws-cdk ×1
aws-sdk ×1
c# ×1
javascript ×1
json ×1
node.js ×1
promise ×1
ssh ×1
utf-8 ×1