我正在尝试从AWS Lambda设置一个小的api到DynamoDB,我无法弄清楚是否以及如何将对象数组写入密钥.
我有一个像这样的对象
{
"teamName": "Team Awesome",
"members": [
{
"email": "person-1@example.com",
"name": "Bob"
},
{
"email": "person-2@example.com",
"name": "Alice"
}
]
}
Run Code Online (Sandbox Code Playgroud)
成员数组给了我一些问题,在文档中它看起来可以考虑列表类型来完成,但是没有例子如何做到这一点,并且我没有办法尝试它.
那么可以用这种格式写一些东西吗?在这种情况下你怎么做呢?
示例代码 - 我该怎么做?
var AWS = require('aws-sdk');
var dynamodb = new AWS.DynamoDB();
exports.handler = function(event, context) {
var tableName = "GDCCompetition";
var datetime = new Date().getTime().toString();
DynamoDB.putItem({
"TableName": tableName,
"Item": {
"datetime": {
"N": datetime
},
"teamName": {
"S": event.teamName
},
"members": ???
}
});
}
Run Code Online (Sandbox Code Playgroud) 我将通过一个关于如何创建lambda函数的基本AWS:
在这个例子中,我们正在创建一个图像重新调整大小的服务,触发它的一种方法是监听一些图像被推送到S3存储桶然后执行lambda函数.
但我试图了解如何从我的nodejs应用程序调用此lambda函数,当用户将图像发送到我的节点服务器时,我通过REST API将此图像发送到aws lambda以重新调整大小,然后接收新的图像位置一个回应.
我能遵循什么样的例子吗?我对实际的调用部分更感兴趣,因为我已经启动并运行了我的lambda服务.
谢谢
当你打电话时aws lambda get-function --function-name FunctionName,你会看到一把CodeSha256钥匙.不过,我不知道它是什么Sha256.它不匹配shasum -a 256 FunctionName.zip,FunctionName.zip我上传的包裹在哪里.
对于现有的lambda,我希望能够做的是从我即将上传的代码中生成sha256,该代码将与亚马逊重新提供的sha256相匹配get-function.任何帮助都表示赞赏,因为我无法在任何地方找到任何信息,除了亚马逊说它是"部署包的SHA256哈希"
我的情况是我在向我的无服务器框架项目添加外部NPM包时遇到了一些麻烦(特定包是geopoint).
我去了无服务器项目的根文件夹并运行npm install geopoint --save.package.json已更新,dependencies": { "geopoint": "^1.0.1" }并创建了node_modules文件夹.
我的文件夹结构是这样的:
根项目文件夹
-functions
--geospatial
--- handler.js
-node_modules
--geopoint
在我的函数/ geospatial/handler.js中,我将geopoint模块声明为:
var geopoint = require('geopoint');
var geopoint = require('../../geopoint');
var geopoint = require('../../../geopoint');
Run Code Online (Sandbox Code Playgroud)
lambda控制台返回错误:
{
"errorMessage": "Cannot find module '../../geopoint'",
"errorType": "Error",
"stackTrace": []
}
Run Code Online (Sandbox Code Playgroud)
如何正确地将外部NPM模块添加到无服务器框架项目?
所以我正在尝试创建一个aws lambda函数,登录实例并做一些事情.并且该脚本在lambda之外工作正常,但是当我使用与此https://aws.amazon.com/blogs/compute/scheduling-ssh-jobs-using-aws-lambda/相同的说明打包它时,它不会工作.它抛出了这个错误.
libffi-72499c49.so.6.0.4: cannot open shared object file: No such file or directory: ImportError
Traceback (most recent call last):
File "/var/task/lambda_function.py", line 12, in lambda_handler
key = paramiko.RSAKey.from_private_key(key)
File "/var/task/paramiko/pkey.py", line 217, in from_private_key
key = cls(file_obj=file_obj, password=password)
File "/var/task/paramiko/rsakey.py", line 42, in __init__
self._from_private_key(file_obj, password)
File "/var/task/paramiko/rsakey.py", line 168, in _from_private_key
self._decode_key(data)
File "/var/task/paramiko/rsakey.py", line 173, in _decode_key
data, password=None, backend=default_backend()
File "/var/task/cryptography/hazmat/backends/__init__.py", line 35, in default_backend
_default_backend = MultiBackend(_available_backends())
File "/var/task/cryptography/hazmat/backends/__init__.py", line 22, in _available_backends
"cryptography.backends" …Run Code Online (Sandbox Code Playgroud) Serverless-1.0.0-rc.1支持部署可通过AWS API Gateway访问的API.
问题:我需要通过带有SSL证书的自定义域而不是随机分配的(URL https://qwertylgbtqert.execute-api....)来公开部署的API 吗?
可以从内部serverless.yml或无服务器框架完成吗?
这是我简单的服务serverless.yml定义:
service: my-service
provider:
name: aws
runtime: nodejs4.3
functions:
generate:
handler: handler.generate
events:
- http:
method: get
path: url
cors: true
Run Code Online (Sandbox Code Playgroud)
有一个问题与此有关:答案在这里,但没有提供适用的答案.特别是如何从serverless.yml自身内部分配自定义域.
它认为是否有可能创建AWS :: Route53资源并利用它,但我不知道如何在无服务器中执行此操作.
amazon-web-services aws-lambda aws-api-gateway serverless-framework
我们可以在aws-lambda中设置环境变量,例如通过AWS SAM:
Environment:
Variables:
TABLE_NAME: !Ref Table
Run Code Online (Sandbox Code Playgroud)
如何通过Node JS AWS-SDK从当前lambda获取此变量?
我对整个无服务器环境都很陌生,而且我正试图在使用Fargate和Lambda时解决这个问题.
我知道Fargate是ECS的无服务器子集,Lambda也是无服务器的,但是由事件驱动.但我希望能够以简单的方式向其他熟悉容器的人解释这两种范例,而不是那些使用AWS和无服务器的人.
目前,我们有几个物理服务器负责接收文本文件,解析它们,并用结果填充几个数据库表.根据我的理解,我认为这将是一个更适合Lambda的用例,因为解析文本文件的过程是由计划触发的,不会长时间运行,并且在不使用时会减少.
但是,如果我们要移植一个接收API调用的服务器,我们可能会想要使用Fargate,因为我们总是需要至少一个映像实例启动并运行.
就容器而言,如果容器的设计是这样设计的话,可以安全地说:
docker run <some_input>
Run Code Online (Sandbox Code Playgroud)
然后这是Lambda的工作.
但是,如果容器设计为执行以下操作:
docker run --expose 80
Run Code Online (Sandbox Code Playgroud)
然后这是Fargate的工作.
这是一个很好的比喻吗?
来自https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html#events-sqs-queueconfig
将队列可见性超时设置为函数超时的 6 倍,加上以下值
MaximumBatchingWindowInSeconds
为什么队列可见性超时不能等于函数超时?假设该函数的超时时间为 30 秒,队列可见性也是如此。该函数拾取消息并经过 30 秒,该消息尚未删除,现在对其他函数/消费者可见。那为什么一定要6次呢?最大批处理窗口在队列可见性超时中扮演什么角色?
我已经使用 Lambda 构建了一个图像public.ecr.aws/lambda/python:3.8,但总是收到此错误。
尝试更改函数和文件名,但没有获得更多调试细节。
另外,我已在本地运行该函数并且入口点/cmd 可以工作。
START RequestId: cb4ba88c-c347-4e7d-b1ca-031a2e02fde4 Version: $LATEST
IMAGE Launch error: fork/exec /lambda-entrypoint.sh: exec format error Entrypoint: [/lambda-entrypoint.sh] Cmd: [index.lambda_handler] WorkingDir: [/var/task]IMAGE Launch error: fork/exec /lambda-entrypoint.sh: exec format error Entrypoint: [/lambda-entrypoint.sh] Cmd: [index.lambda_handler] WorkingDir: [/var/task]END RequestId: cb4ba88c-c347-4e7d-b1ca-031a2e02fde4
REPORT RequestId: cb4ba88c-c347-4e7d-b1ca-031a2e02fde4 Duration: 12.86 ms Billed Duration: 13 ms Memory Size: 128 MB Max Memory Used: 3 MB
RequestId: cb4ba88c-c347-4e7d-b1ca-031a2e02fde4 Error: fork/exec /lambda-entrypoint.sh: exec format error
Runtime.InvalidEntrypoint
Run Code Online (Sandbox Code Playgroud) aws-lambda ×10
node.js ×3
python ×2
amazon-ecs ×1
amazon-sqs ×1
aws-fargate ×1
docker ×1
javascript ×1
nodes ×1
paramiko ×1
serverless ×1