我们已经在 AWS eventbridge 上运行了 python lambda 函数,该函数是使用控制台手动配置的,以便每天晚上 9 点触发 lambda。目前,我们还有 eventbridge 的规则 arn。
计划:
因此,我们正在将所有内容迁移到无服务器框架,以自动化整个 lambda 部署,并使用 serverless.yml 配置 eventbridge 以在晚上 9 点调用 lambda。
谁能告诉我该怎么做?
示例代码:
functions:
myFunction:
handler: index.handler
events:
- eventBridge:
--------
--------
--------
Run Code Online (Sandbox Code Playgroud) aws-lambda serverless-framework serverless aws-serverless aws-event-bridge
根据 aws 文档,api 网关中的最大超时限制小于 30 秒。因此,如果请求/响应需要超过 30 秒,则将 sagemaker 端点与 api 网关连接起来就没有意义。有什么解决方法吗?在 api 网关和 sagemaker 端点之间添加 lambda 将增加更多时间来处理请求/响应,这是我想避免的。此外,还会增加 lambda 冷启动时间,并且 sagemaker 无服务器端点构建在 lambda 之上,因此也会增加冷启动时间。有没有一种方法可以调用无服务器 sagemaker 端点,而无需这些开销?
我有一个用Node.JS编写的无服务器lambda函数.
返回错误代码的最佳/正确方法是什么?
我现在使用的模式(它的工作原理!)是:
module.exports.endpoint = (event, context, callback) => {
const response = {
statusCode: 404,
body: JSON.stringify({ message: 'Hello World!' })
};
callback(null, response);
}
Run Code Online (Sandbox Code Playgroud)
当我拨打电话时,例如从POSTMAN到我的终端,我得到:
Status: 404 Not Found 这正是我所期待的.
而且,在日志中我可以看到:
Serverless: GET / (?: get)
Serverless: [404] {"statusCode":404,"body":"{\"message\":\"Hello World!\"}"}
Run Code Online (Sandbox Code Playgroud)
这很好用.
令我困扰的是,我正在传递null错误.看看其他一些教程/示例我发现了以下模式:
https://aws.amazon.com/blogs/compute/error-handling-patterns-in-amazon-api-gateway-and-aws-lambda/
https://serverless.com/framework/docs/providers/aws/events/apigateway/
callback ("the sky is falling!");
callback("[BadRequest] Validation error: Missing field 'name'");
callback("[404] Not Found");
callback(new Error('[404] Not found'));
callback(JSON.stringify(myErrorObj));
所有这些都很有意义,你可以指定HTTP状态代码 - 但我最终获得的是HTTP状态代码200.当我查看日志时,我可以看到错误是在200之后:
Serverless: GET / (?: get)
Serverless: …Run Code Online (Sandbox Code Playgroud) node.js aws-lambda aws-api-gateway serverless-framework serverless
我在使用无服务器框架时遇到一些问题,因为我不小心在另一个服务上使用了相同名称的服务。
An error occurred: tableX - TableX already exists.
假设我有两个“ serverless.yml ”文件,两个文件的服务名称相同。其中一个(我们称其为“ test1 ”)具有资源(DynamoDB表),而另一个则没有(“ test2 ”)。像以下片段一样:
测试1
service: sandbox-core
provider:
name: aws
stage: core
runtime: nodejs6.10
region: sa-east-1
memorySize: 128
timeout: 300
resources:
Resources:
table3:
Type: 'AWS::DynamoDB::Table'
DeletionPolicy: Retain
Properties:
TableName: SandboxTable3
AttributeDefinitions:
-
AttributeName: provider
AttributeType: S
-
AttributeName: appId
AttributeType: S
KeySchema:
-
AttributeName: provider
KeyType: HASH
-
AttributeName: appId
KeyType: RANGE
ProvisionedThroughput:
ReadCapacityUnits: 1
WriteCapacityUnits: 1
table4:
Type: 'AWS::DynamoDB::Table'
DeletionPolicy: Retain
Properties:
TableName: SandboxTable4
AttributeDefinitions:
-
AttributeName: …Run Code Online (Sandbox Code Playgroud) amazon-web-services aws-cloudformation amazon-dynamodb serverless-framework serverless
我想知道使用/探索更多的方法,我目前正在探索选择最佳/合适的框架来构建AWS Lambda上的微服务的选项,并且canary部署是一个巨大的功能(SAM支持它,但现在没有服务器).以下是我的问题:
谢谢
我使用无服务器脱机开发Web项目。
我需要API密钥才能访问无服务器 AWS Lamda上的资源。
我的服务和提供者都有一个serverless.yml 。
在Postman中,我访问了我的路由(http://127.0.0.1:3333/segments/UUID/test),并且没有任何错误(如Forbidden message),Lambda已执行...
test:
handler: src/Api/segment.test
events:
- http:
path: segments/{segmentUuid}/test
method: post
request:
parameters:
paths:
segmentUuid: true
private: true
Run Code Online (Sandbox Code Playgroud)
该路由不受私有保护。
yaml aws-lambda serverless-framework serverless serverless-framework-offline
我有一个具有2个功能和一个存储队列的现有功能应用程序。F1由服务总线主题中的消息触发。对于收到的每个味精,F1计算一些子任务(T1,T2,...),这些子任务必须以不同的延迟量执行。例如-T1将在3分钟后触发,T2将在5分钟后触发,依此类推。F1将消息发布到具有适当可见性超时(以模拟延迟)的存储队列中,并且只要队列中可见消息,就会触发F2。一切正常。
我现在想将此应用程序迁移为使用“耐用功能”。F1现在仅启动协调器。协调器代码如下:
public static async Task Orchestrator([OrchestrationTrigger] DurableOrchestrationContext context, TraceWriter log)
{
var results = await context.CallActivityAsync<List<TaskInfo>>("CalculateTasks", "someinput");
List<Task> tasks = new List<Task>();
foreach (var value in results)
{
var pnTask = context.CallActivityAsync("PerformSubTask", value);
tasks.Add(pnTask);
}
//dont't await as we want to fire and forget. No fan-in!
//await Task.WhenAll(tasks);
}
[FunctionName("PerformSubTask")]
public async static Task Run([ActivityTrigger]TaskInfo info, TraceWriter log)
{
TimeSpan timeDifference = DateTime.UtcNow - info.Origin.ToUniversalTime();
TimeSpan delay = TimeSpan.FromSeconds(info.DelayInSeconds);
var actualDelay = timeDifference > delay ? TimeSpan.Zero : delay …Run Code Online (Sandbox Code Playgroud) AWS(亚马逊网络服务)推出了无服务器计算,通常称为AWS Lamda,我们可以将资产存储在S3中,然后部署lambda函数来处理我们的业务逻辑.Lamda将支持ruby脚本.
有没有办法在Lambda服务器中运行像rails或Sinatra这样的动态Web框架?
如何允许特定的lambda访问serverless.yml中的特定s3存储桶?
例如,我正在使用无服务器将文件上传功能移植到lambda。要将文件上传到特定的s3存储桶,我需要允许lambda访问该s3存储桶。如何在serverless.yml中执行此操作?
amazon-s3 amazon-web-services aws-lambda amazon-policy serverless
我想对我的无服务器项目执行自动集成测试。为此,我需要以某种方式获取api端点。已经有用于Serverless框架的插件serverless-stack-output服务。但是我想知道在部署应用程序后如何通过AWS SAM实现类似的目标?
同时,如果我能以某种方式获取我的api的基本URL以及各个端点,那么我就可以连接它们并针对它们执行测试。
serverless ×10
aws-lambda ×6
amazon-s3 ×1
aws-sam ×1
aws-sam-cli ×1
azure ×1
c# ×1
node.js ×1
serverless-framework-offline ×1
yaml ×1