我正在尝试使用无服务器框架在 API Gateway 中创建自定义 lambda 授权方。
我的服务的客户端可以发送“授权”或“X-自定义”标头(但不能同时发送两者)。所以我需要的是一个没有身份源的自定义授权者。
无服务器 YAML 截图如下:
functions:
create:
handler: posts.create
events:
- http:
path: posts/create
method: post
authorizer:
arn: xxx:xxx:Lambda-Name
resultTtlInSeconds: 0
type: request
integration: lambda
cors: true
request:
template:
application/json: '{"method": "$context.httpMethod","body" : $input.json("$"),"headers": {#foreach($param in $input.params().header.keySet())"$param": "$util.escapeJavaScript($input.params().header.get($param))" #if($foreach.hasNext),#end#end},"queryParams": {#foreach($param in $input.params().querystring.keySet())"$param": "$util.escapeJavaScript($input.params().querystring.get($param))" #if($foreach.hasNext),#end#end},"pathParameters": {#foreach($param in $input.params().path.keySet())"$param": "$util.escapeJavaScript($input.params().path.get($param))" #if($foreach.hasNext),#end#end}}'
Run Code Online (Sandbox Code Playgroud)
我使用以下请求模板,以便我的 lambda 获取标头并可以执行验证:
{"method": "$context.httpMethod","body" : $input.json("$"),"headers": {#foreach($param in $input.params().header.keySet())"$param": "$util.escapeJavaScript($input.params().header.get($param))" #if($foreach.hasNext),#end#end},"queryParams": {#foreach($param in $input.params().querystring.keySet())"$param": "$util.escapeJavaScript($input.params().querystring.get($param))" #if($foreach.hasNext),#end#end},"pathParameters": {#foreach($param in $input.params().path.keySet())"$param": "$util.escapeJavaScript($input.params().path.get($param))" #if($foreach.hasNext),#end#end}}
Run Code Online (Sandbox Code Playgroud)
问题是,当我运行无服务器部署命令时,授权者是使用“授权”身份资源创建的。
我的代码基于以下资源:
amazon-web-services aws-api-gateway serverless lambda-authorizer
我遵循本教程是为了使用 python 设置无服务器 AWS lambda。
我想使用无服务器 lambda 运行这个简单的 httprequest 函数(位于 httprequest.py 中):
import requests
def handler(event, context):
r = requests.get("https://news.ycombinator.com/news")
return {"content": r.text}
Run Code Online (Sandbox Code Playgroud)
以下是我的serveless.yaml:
service: serverlessProj
frameworkVersion: '2'
provider:
name: aws
runtime: python3.8
functions:
hello:
handler: hello.handler
httprequest:
handler: httprequest.handler
plugins:
- serverless-python-requirements
custom:
pythonRequirements:
dockerizePip: true
Run Code Online (Sandbox Code Playgroud)
现在,如您所见,自定义部分告诉 serverless-python-requirements 插件在 Docker 容器中编译 Python 包。它应该安装requirements.txt 中的插件。这是requirements.txt的内容:
requests
Run Code Online (Sandbox Code Playgroud)
运行时sls deploy,这是控制台输出:
Serverless: Generated requirements from /Users/user/Desktop/ShoeSwiper/Serverless/requirements.txt in /Users/user/Desktop/ShoeSwiper/Serverless/.serverless/requirements.txt...
Serverless: Installing requirements from /Users/user/Library/Caches/serverless-python-requirements/007/requirements.txt ...
Serverless: Docker Image: lambci/lambda:build-python3.8
Serverless: …Run Code Online (Sandbox Code Playgroud) 我使用的是无服务器框架版本 2.11.0
尝试部署时,它抛出无服务器错误:
Configuration error at 'provider.logRetentionInDays': should be equal to one of the allowed values
Run Code Online (Sandbox Code Playgroud)
但它没有显示任何允许的值。同样在我的例子中,我给出的值为 90(整数)。我做错了什么吗?
serverless-framework serverless-architecture serverless aws-serverless serverless-application-model
我遇到一种情况,需要使用 eventbridge 中的 eventpatterns 过滤掉某些事件。我想对所有事件运行规则,除了用户名以 abc 或 xyz 开头的事件。我尝试过以下 2 种语法,但没有一个有效:
"userIdentity": {
"sessionContext": {
"sessionIssuer": {
"userName": [
{
"anything-but": {
"prefix": [
"abc-",
"xyz-"
]
}
}
]
}
}
}
"userIdentity": {
"sessionContext": {
"sessionIssuer": {
"userName": [
{
"anything-but": [{
"prefix": "abc-",
"prefix": "xyz-"
}]
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
保存规则时出现以下错误:“事件模式无效。原因:在除列表之外的任何内容中,不支持 start|null|boolean。 ”
我是否在语法中遗漏了某些内容,或者如果这是一个限制,那么这个问题还有其他选择吗?
amazon-web-services amazon-cloudwatch serverless amazon-cloudwatch-events aws-event-bridge
我只是想找到一个通用定义,两者之间有什么区别
\n我的目标是在 Kyma 上实现 \xe2\x80\x9ereal\xe2\x80\x9c 微服务 - 已经实现的关键点是什么,这样我就不会 \xe2\x80\x9ejust\xe2\x80\x9c实现一个功能?
\n我有一个 AWS CodeBuild 项目,它尝试安装无服务器框架,但在标题中返回错误,但它表示框架已成功安装。我的理解是,这无法安装 snappy 模块。这是为什么?我该如何解决这个问题?
我在 buildspec.yaml 中运行的命令是:
npm install -g serverless
Run Code Online (Sandbox Code Playgroud)
我的用户是:
/root
Run Code Online (Sandbox Code Playgroud)
我不太关心事件的顺序,但我希望消息只被处理一次。侦听 SQS 消息的 lambda 会将其存储在 DynamoDB 中,因此吞吐量非常重要,因为我有多个微服务(作为生产者)将消息写入此 SQS,这些消息将由单个微服务读取。
关于只处理一次消息,这是 FIFO 队列支持的,但据说吞吐量不太好。
如果每条消息都有唯一的 groupId,那么 FIFO 队列的吞吐量与标准队列相同吗?
如果没有,我的下一个选择可能是在存储消息时在 DynamoDB 中使用“attribute_not_exists”。
其中哪一个应该效果更好?
amazon-sqs amazon-web-services amazon-dynamodb serverless-framework serverless
这是我第一次使用 AWS,我正在尝试通过无服务器运行 API。我不确定如何配置 AWS 配置文件。我似乎在网上也找不到太多有关它的信息。有人可能有链接吗?或者有什么可以引导我走向一个方向?
我在尝试将图层导入 lambda 函数时遇到错误。我已经检查了所有设置和配置,但我只是不明白为什么当我的函数部署并运行时,我收到来自 AWS 的错误,说它无法找到该layers层:
{
"errorType": "Error",
"errorMessage": "Cannot find module 'layers'\nRequire stack:\n- /var/task/entities/transakWebhookEvent.js\n- /var/task/handler.js\n- /var/task/s_money_movements_api.js\n- /var/runtime/UserFunction.js\n- /var/runtime/index.js",
"code": "MODULE_NOT_FOUND",
"requireStack": [
"/var/task/entities/transakWebhookEvent.js",
"/var/task/handler.js",
"/var/task/s_money_movements_api.js",
"/var/runtime/UserFunction.js",
"/var/runtime/index.js"
],
"stack": [
"Error: Cannot find module 'layers'",
"Require stack:",
"- /var/task/entities/transakWebhookEvent.js",
"- /var/task/handler.js",
"- /var/task/s_money_movements_api.js",
"- /var/runtime/UserFunction.js",
"- /var/runtime/index.js",
" at Function.Module._resolveFilename (internal/modules/cjs/loader.js:815:15)",
" at Module._require.i.require (/var/task/serverless_sdk/index.js:9:73131)",
" at require (internal/modules/cjs/helpers.js:74:18)",
" at Object.<anonymous> (/var/task/entities/transakWebhookEvent.js:5:20)",
" at Module._compile (internal/modules/cjs/loader.js:999:30)",
" at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)",
" at Module.load (internal/modules/cjs/loader.js:863:32)",
" at …Run Code Online (Sandbox Code Playgroud) 我正在使用 s3 上传图像文件。但每当我尝试使用 URL 以及从 s3 控制台下载时,都会下载图像文件。但是,图像查看器将看不到它。它只是显示不兼容的文件类型。
myS3Function.uploadFile(request.body.fileName, request.files.myFileData, "image_folder").then(filename => {
//success
})
Run Code Online (Sandbox Code Playgroud)
。
const AWS = require('aws-sdk');
const s3 = new AWS.S3({
region: process.env.REGION
});
exports.uploadFile = (filename, data, folderName) => {
return new Promise((resolve, reject) => {
const params = {
Bucket: process.env.AWS_S3_BUCKET,
Key: folderName+'/'+filename,
Body: data.data,
ACL:'public-read',
ContentType: "image/jpeg"
};
s3.upload(params, function(s3Err, data) {
if (s3Err) reject(s3Err)
console.log(`File uploaded successfully at ${data.Location}`)
resolve(`${data.Location}`)
});
});
}
Run Code Online (Sandbox Code Playgroud)
我现在使用邮递员上传文件作为表单数据。我可以正确地看到使用此代码上传的文本文件。那么为什么图像会出现这个问题呢?此外,图像和 pdf 实际文件大小也略有增加。
javascript amazon-s3 amazon-web-services serverless-framework serverless
serverless ×10
amazon-s3 ×1
amazon-sqs ×1
docker ×1
javascript ×1
kyma ×1
layer ×1
node.js ×1
python ×1