我正在完成教程"演练2:处理Amazon S3事件(Node.js)".我有关于CLI参数的问题:
aws lambda add-permission \
--function-name CreateThumbnail \
--region us-west-2 \
--statement-id some-unique-id \
--action "lambda:InvokeFunction" \
--principal s3.amazonaws.com \
--source-arn arn:aws:s3:::sourcebucket \
--source-account bucket-owner-account-id \
--profile adminuser
Run Code Online (Sandbox Code Playgroud)
参数是什么--statement-id some-unique-id?
用例是AWS Lambda函数我想在编译时预先加载一些数据.如何在Haskell中编译时预先填充数据结构?类似的C++讨论.
我需要从S3下载照片(不在同一目录中),将其压缩,然后再次使用AWS S3 Java SDK上传到S3。该zip文件大小可以以GB为单位。目前,我正在使用AWS Lambda,它的临时存储限制为最大500 MB。因此,我不想将ZIP文件保存在磁盘上,而是想将ZIP文件(使用从S3下载的照片动态创建的ZIP文件)直接传输到S3。我需要使用AWS S3 Java SDK。
我们正在使用NodeJS通过Google Speech-to-Text API处理较长的成绩单。许多功能需要10分钟以上的时间来处理。处理/音频时间的通常比例约为50%。因此,一个20分钟的FLAC音频文件需要大约10分钟的处理时间(因此,在Google Cloud Functions上失败,最大时间为540秒或9分钟),而超过29分钟的任何时间在AWS Lambda上都会失败。
每个平台上有哪些服务可以在20/30分钟内处理音频文件,还可以发送事件数据并调用应用程序?我可以混合使用云功能和其他平台来处理成绩单吗?
javascript amazon-web-services google-cloud-platform aws-lambda google-cloud-functions
我需要在 aws lambda 中克隆一个私有 git 存储库(lambda 运行时是 python)。经过一些研究后,我知道我需要在/tmp目录中克隆存储库,因为它是 lambda 中唯一可访问的目录。另外,我需要使用私钥来ssh到github。
基本上,我的代码如下所示:
import git # lambda-git
import os
private_key = """-----BEGIN OPENSSH PRIVATE KEY-----
...
-----END OPENSSH PRIVATE KEY-----
"""
with open("/tmp/id_rsa", "w") as id_rsa:
id_rsa.write(private_key)
os.chmod("/tmp/id_rsa", 600)
os.environ["GIT_SSH_COMMAND"] = 'ssh -i /tmp/id_rsa -o StrictHostKeyChecking=no'
git.exec_command("clone", "git@domain:repo_name.git", "/tmp")
Run Code Online (Sandbox Code Playgroud)
但是,将压缩文件夹上传到 lambda 后,出现以下错误
Could not create directory \\'/home/sbx_user1051/.ssh\\'.
Failed to add the host to the list of known hosts (/home/sbx_user1051/.ssh/known_hosts).
Load key \"/tmp/id_rsa\": Permission denied
Permission denied (publickey).
fatal: Could not …Run Code Online (Sandbox Code Playgroud) 我当前的堆栈是这样的:
我的数据库使用subcognito 生成的 id 作为 userId,因此它们是相同的。我还将电子邮件地址复制为数据库中的用户名。我的目的是使用 Cognito 进行身份验证,并使用我自己的数据库来实现我的应用程序的功能。
但是,如果用户希望更新他们的电子邮件地址,我需要在 cognito 和我的数据库中对此进行修改。我第一次尝试在我的 lambda 中使用 cognito 进行调用admin_update_user_attributes,但很快意识到它被阻止对互联网进行外部调用,所以我创建了一个 nat 网关,它可以工作,但成本太高了!
我的第二个想法是通过 cognito,让我的前端进行调用,然后让 cognito 触发 lambda 来更新我的数据库,但我认为这是不可能的。
是否有配置或我缺少的东西能够通过 API 网关通过 lambda 访问 AWS cognito,因为它们都是 AWS 服务。
我不想通过前端进行两个单独的调用,因为这会产生一个完成但另一个不完成的风险。
谢谢
amazon-cognito aws-lambda aws-api-gateway api-gateway amazon-cognito-triggers
该代码用于执行以下操作
RequestId:9f4fb9ed-88db-442a-bc4f-079744f5bbcf 错误:运行时退出但未提供原因 Runtime.ExitError
import ipaddress
import os
import time
from datetime import datetime
from typing import Dict, List, Optional
import boto3
from botocore.exceptions import ClientError, ParamValidationError
from pynamodb.attributes import UnicodeAttribute, UTCDateTimeAttribute
from pynamodb.exceptions import DoesNotExist
from pynamodb.models import Model
def lambda_handler(event, context):
"""Registers or de-registers private DNS resource records for a given EC2 instance."""
# Retrieve details from invocation event object.
try:
account_id = event["account"]
instance_id = event["detail"]["instance-id"] …Run Code Online (Sandbox Code Playgroud) 我的项目结构如下:
MyProject
layers
myLayer1
nodejs
node_modules
myLayer1
myExtension.js
lambda1
handler.js
lambda2
handler.js
jsconfig.json
Run Code Online (Sandbox Code Playgroud)
myExtension.js
module.exports.myTest = () => {
return 'My extension test';
};
Run Code Online (Sandbox Code Playgroud)
处理程序.js
const myext = require('myLayer1');
module.exports.handler = async (event) => {
return {
statusCode: 200,
body: JSON.stringify({
message: myext.myTest()
})
}};
Run Code Online (Sandbox Code Playgroud)
当我部署到 AWS 时,一切正常。但我无法在本地计算机上运行/调试它。
根据我的发现,在这种情况下 jsconfig.json 文件应该有助于映射路径,但是 VSCode/NodeJS 会忽略我在那里编写的任何内容(我尝试将其放置在 MyProject 根文件夹和 lambda 文件夹中)。
如果我将 handler.js 中的“require”更改为:
const myext = require('./layers/myLayer1/nodejs/node_modules/myLayer1');
Run Code Online (Sandbox Code Playgroud)
当我将代码部署到 AWS 时,这显然会破坏代码。
RDS proxy 的文档中指出,当应用程序使用准备好的语句时,连接会自动固定:
准备好的语句会导致代理固定会话。无论准备好的语句使用 SQL 文本还是二进制协议,此规则都适用。( https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/rds-proxy.html )
使用 RDS 代理时,我应该如何保护我的应用程序免受 SQL 注入?我使用此服务是为了在我的微服务中更快地与数据库连接,因此我希望重用该连接。
寻找一种将发送到 lambda 的消息延迟 5 秒的方法。
因此,lambda 收到消息 1,然后 5 秒后收到消息 2,然后 5 秒后收到消息 3,等等,比如说一千条消息。
正在查看 SQS 延迟队列和消息计时器,但它们并不正是我正在寻找的。
Step Functions 使用等待,但对于我需要的规模来说,这会很昂贵。
理想情况下,需要一个 SQS 队列来限制消息仅每 5 秒发送一次,有什么办法可以做到这一点吗?
ps 不担心它是 SQS,只需要一个解决方案
aws-lambda ×10
amazon-s3 ×2
amazon-rds ×1
amazon-sns ×1
amazon-sqs ×1
api-gateway ×1
aws-cli ×1
aws-java-sdk ×1
github ×1
haskell ×1
java ×1
javascript ×1
node.js ×1
python-3.8 ×1