编辑 x1:用完整文件替换片段
我目前正在 DynamoDB 中播种 1.8K 行。创建用户时,需要生成并插入这些行。它们不需要立即读取(比方说,在不到 3 - 5 秒的时间内)。我目前正在使用 AWS Lambda,但遇到了超时异常(可能是因为消耗的 WCU 多于配置的 WCU,我禁用了 5 个自动缩放)。
我试过在 Google 和 StackOverflow 上搜索,这似乎是一个灰色区域(这有点奇怪,考虑到 DynamoDB 被宣传为一种令人难以置信的每秒处理大量数据的解决方案),其中不存在明确的路径。
我们知道 DynamoDB 限制每批25 个项目的插入,以防止 HTTP 开销。这意味着我们可以调用无限数量的 batchWrite 并增加 WCU。
我已经尝试通过触发它而不是等待它们来调用无限数量的 batchWrite(这会算数吗?我已经读过,因为 JS 是单线程的,所以请求将被一一处理,除了我不会如果我不使用承诺,就等待响应......目前使用 Node 10 和 Lambda),但似乎什么也没发生。如果我承诺调用并等待它,我会收到 Lambda 超时异常(可能是因为它用完了 WCU)。
我目前有 5 个 WCU 和 5 个 RCU(对于这些随机尖峰操作来说,这些是否太小了?)。
我有点卡住了,因为我不想在短时间内随机增加 WCU。此外,我读到 Auto-Scaling 不会自动启动,亚马逊每天只会调整容量单位的大小 4 次。
我该怎么办?
这是我用来插入 DynamoDB 的完整文件
const aws = require("aws-sdk");
export async function batchWrite(
data: …Run Code Online (Sandbox Code Playgroud) 我想在我的 AWS 账户上的 SQS 事件上本地执行 lambda 函数。我已经定义了所需的事件,但这没有被触发。
如何做到这一点?
我可以使用本地的 cron 事件将消息发送到同一个队列。
以下是我尝试过的几件事……但对我不起作用。
functions:
account-data-delta-test:
handler: functions/test/data/dataDeltatestGenerator.handler
name: ${self:provider.stage}-account-data-delta-test
description: account delta update - ${self:provider.stage}-account-data-delta-test
tags:
Name: ${self:provider.stage}-account-data-delta-test
# keeping 5 minute function timeout just in case large volume of data.
timeout: 300
events:
- sqs:
arn:
Fn::GetAtt: [ testGenerationQueue, Arn ]
batchSize: 10
----------
Policies:
- PolicyName: ${self:provider.stage}-test-sqs-policy
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- sqs:ReceiveMessage
- sqs:DeleteMessage
- sqs:GetQueueAttributes
- sqs:ChangeMessageVisibility
- sqs:SendMessage
- sqs:GetQueueUrl
- sqs:ListQueues …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过 Laravel Vapor 将 BugSnag 与部署在 AWS Lambda 上的 Laravel 应用程序集成。
Bugsnag 在我的本地工作正常,但没有从 AWS Lamda 发送任何错误。
我也试过 Bugsnag::setBatchSending(false) 但它仍然不适合我。
任何想法可能是错误的?
AWS Lambda 运行时:Python 3.7
连接到我的 Lambda 的 Lambda 层在解压缩时的容量接近 200MB。
我想知道这个大容量的Lambda Layer会不会影响Lambda机器的正常运行或冷启动。
我正在尝试将 excel 文件上传到 S3 并通过 signedURL 下载它。我注意到该对象以不同的文件类型而不是预期的 xlsx 类型返回,因此在本地不可读。
我有两个 lambda,一个用于上传对象,另一个用于检索 signedURL。
上传:
async function () => {
const s3 = new aws.S3({ signatureVersion: 'v4' })
const params = {
Bucket: bucket,
Key: key
}
try {
const signedURL = await s3.getSignedUrl('getObject', params)
return response(200, signedURL)
} catch (err) {
console.log(JSON.stringify(err))
return response(400, err)
}
}
Run Code Online (Sandbox Code Playgroud)
获取签名网址:
async function () => {
const s3 = new aws.S3({ signatureVersion: 'v4' })
const params = {
Bucket: bucket,
Key: key
}
try …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 Lambda 函数中编写我的第一个 Python 代码,该代码将检查我是否能够通过 SSH(端口 22)连接到 EC2 实例。
我已经使用安全组 22 CidrIP 我的公共 IP 创建了一个 EC2 实例,然后在同一帐户中创建了一个使用 python 3.8 作为运行时的 Lambda 函数
现在,通过代码,我尝试通过传递EC2 Public IP、Username、SSH 进入 EC2Key pair
并执行一个命令,例如: sudo su
题:
背景:
我尝试将 reindex API 用于 6.8,如ES 文档中所述
POST <https://endpoint of destination Elasticsearch>/_reindex
{
"source": {
"remote": {
"host": "https://endpoint-of-source-elasticsearch-cluster-1.es.amazonaws.com"
},
"index": "source-index-name"
},
"dest": {
"index": "destination-index-name"
}
}
Run Code Online (Sandbox Code Playgroud)
问题:
我得到以下错误
{
"error": {
"root_cause": [
{
"type": "x_content_parse_exception",
"reason": "[8:3] [reindex] failed to parse field [source]"
}
],
"type": "x_content_parse_exception",
"reason": "[8:3] [reindex] failed to parse field [source]",
"caused_by": {
"type": "illegal_argument_exception",
"reason": "[host] must be …Run Code Online (Sandbox Code Playgroud) cloud amazon-web-services elasticsearch aws-lambda elastic-stack
我一直在使用 terraform 来定义一些 SNS 主题,然后使用 SQS 队列来订阅它们,然后这些队列具有由 SQS 触发的 lambda,并从这些队列中获取消息。
Terraform 处理 SNS 主题、SQS 队列的创建以及允许 SNS 将消息写入队列的策略。lambdas 通过无服务器 CLI 工具单独部署。
当我首先运行 terraform,然后部署 lambdas 时,所有这些似乎都可以正常工作。但是,我在 terraform 中所做的某些事情遇到了一些问题,因此我决定拆除整个基础设施并重新创建它,这似乎再次正常工作。
看看从未被删除的 lambda,它们仍然像我所期望的那样在门户中显示了指向队列的链接。如果我转到新的 SQS 队列,我可以看到它在“Lambda 触发器”选项卡中正确列出了 lambda。
但问题是没有收到任何消息,我可以看到它们都在队列中累积。我发现解决问题的唯一方法是进入每个 lambda,选择 SQS 队列并将它们全部切换为“禁用”,然后再次“启用”。此时,他们都开始处理队列中的消息。
有没有其他人经历过这种情况?是否有更好的方法让它们在重新创建队列时正确“重新关联”?
我正在尝试将SQS作为触发器添加到我在 AWS-VPC 中运行的Lambda函数,但它引发错误为:
An error occurred when creating the trigger: The provided execution role does not have permissions to call ReceiveMessage on SQS (Service: AWSLambda; Status Code: 400; Error Code: InvalidParameterValueException; Request ID: d34b7525-5c69-4434-a015-112e8e74f447; Proxy: null)
Run Code Online (Sandbox Code Playgroud)
尝试通过添加
AWSLambdaVPCAccessExecutionRole到角色的策略以及通过 IAM。但没有运气!
我无法弄清楚我在哪里犯了错误?请帮助我,如果有人过去有类似的经历或知道如何解决它。提前谢谢你!
amazon-sqs amazon-web-services amazon-iam amazon-vpc aws-lambda
aws-lambda ×10
amazon-sqs ×3
amazon-s3 ×2
amazon-sns ×2
javascript ×2
amazon-ec2 ×1
amazon-iam ×1
amazon-vpc ×1
bucket ×1
bugsnag ×1
cloud ×1
laravel ×1
node.js ×1
python ×1
ssh ×1
yaml ×1