我有一个React应用程序,试图从AWS访问无服务器。但是我有下面的错误
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://www.test.com' is therefore not allowed access. The response had HTTP status code 502.
Run Code Online (Sandbox Code Playgroud)
端点网址为https://key.execute-api.ap-southeast-2.amazonaws.com/dev/samplefunction
在serverless.yml上的设置是
login:
handler: login.login
events:
- http:
path: login
method: post
cors:
origin: 'https://admin.differentdomain.com'
headers:
- MY_CUSTOM_HEADER
- Content-Type
- X-Amz-Date
- Authorization
- X-Api-Key
- X-Amz-Security-Token
Run Code Online (Sandbox Code Playgroud)
我还有其他地方需要进行CORS配置吗?
我们正在研究项目,我们正在努力在nodejs中构建无服务器应用程序。我谈到了AWS SAM和Serverless。哪个最适合实现无服务器应用程序
使用无服务器框架(在Mac OS X High Sierra上)时,SLS_DEBUG环境变量设置为启用详细的调试信息
export SLS_DEBUG=*
Run Code Online (Sandbox Code Playgroud)
问题:现在如何禁用它(除了转移到新终端)?export SLS_DEBUG=false没有做到这一点.
macos serverless-framework serverless-architecture serverless aws-serverless
我有一个无服务器的应用程序,它将文件上传到s3(通过POST请求)并为它们提供服务(通过GET请求)
我正在使用serverless-apigw-binary和serverless-apigwy-binary插件允许我以图像的形式返回二进制数据.为了允许URL与浏览器一起使用,我必须将二进制类型设置为*/*.
为了上传图像,POST端点采用类似{"base64":"..."}的正文.但是,使用此配置,整个主体将作为base64编码的字符串传递.如何防止请求体application/json被转换?
见serverless.yml下文:
service: image-service
custom:
envName: ${opt:stage, self:provider.stage}
domains:
prod: api.<mydomain>
dev: dev-api.<mydomain>
customDomain:
basePath: images
domainName: ${self:custom.domains.${self:custom.envName}}
certificateName: "*.<mydomain>"
apigwBinary:
types:
- '*/*'
provider:
name: aws
runtime: nodejs8.10
region: eu-west-1
memorySize: 1536
role: ImageRenderingRole
environment:
ENV_NAME: ${self:custom.envName}
APP_NAME: image-service
BUCKET: <mybucket>
plugins:
- serverless-offline
- serverless-domain-manager
- serverless-apigw-binary
- serverless-apigwy-binary
functions:
uploadImage:
handler: handler.uploadImage
events:
- http:
path: /
method: POST
getImage:
handler: handler.getImage
events:
- http: …Run Code Online (Sandbox Code Playgroud) 我需要一个端点(无服务器)来为压缩在 zip 文件中的一系列文件提供服务。为此,我使用node-zip。这可以在本地创建一个带有平面文件文本的简单 zip 文件:
const fs = require('fs')
const zip = new require('node-zip')()
const flat_text = 'This is a flat text file'
zip.file('a_file.txt', flat_text)
fs.writeFileSync('/tmp/a_file.zip', zip.generate({base64: false, compression: 'DEFLATE'}), 'binary')
Run Code Online (Sandbox Code Playgroud)
但是当我尝试在 lambda 中实现它时,下载的 zip 文件已损坏:
module.exports.weekly = async (event, context) => {
const flat_text = 'This is a flat text file'
zip.file('a_file.txt', flat_text)
return {
headers: {
'Content-Type': 'application/zip, application/octet-stream',
'Content-disposition': `attachment; filename=${`any_name_${new Date().toJSON().slice(0, 10)}.zip`}`
},
body: zip.generate({base64: false, compression: 'DEFLATE'}),
statusCode: 200
}
}
Run Code Online (Sandbox Code Playgroud)
为什么我会收到损坏的 zip …
我使用 HelloWorld 样式模板应用程序在 IntelliJ 中创建了一个新的无服务器项目。我设法在我的 AWS 账户中远程构建、部署和运行了这个应用程序。我什至设法将它与 API 网关集成,以便通过 Internet 访问它。
随着项目的建立,它有 1 个名为 HelloWorldFunction 的 Lambda 函数。它的处理程序称为“helloworld.App::handleRequest”,我可以在 template.yaml 文件中看到它的配置。
现在我想在同一个应用程序项目中创建另一个 Lambda 函数。因此,在 IntelliJ 中,我遵循以下步骤:
我在这里尝试了不同的名称,例如“MyNewHandler”或“helloworld.App::handleRequest”(显然这不起作用,因为它已被HelloWorldFunction 使用)、“helloworld.App2::handleRequest”、.. .. 等等。
每次我尝试使用其他名称或方式来定义处理程序时,都会收到以下错误消息:
必须能够在项目中找到处理程序才能部署到 Lambda
题:
我是否需要先在 template.yaml 文件中配置新的 Lambda 函数,或者我需要怎样调用 Handler 才能使其工作?
我确信这只是一个菜鸟错误,但我一直在谷歌上搜索这个并没有找到任何遇到同样问题的人。我还在 AWS 上阅读了有关处理程序的内容,但它仅在概念层面对其进行了描述,而不是在有多个 Lambda 的实践中进行了描述。
谢谢你的帮助!
安迪
我正在开发一个 SAM 应用程序,该应用程序具有 lambda 函数,并以 API 网关作为事件源。API 端点是一种 POST 方法,需要在请求正文中提供一组参数。API Gateway 为我们提供了通过使用 AWS 控制台指定请求模型来验证请求正文的功能。
请参阅下面的 AWS 控制台选项屏幕截图:
我需要通过 SAM 模板设置类似的选项,并能够将模型与请求正文链接,但无法设置请求验证器选项,也无法找到任何文档或示例。
以下是我的 SAM 模板
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: SAM Template
Parameters:
Stage:
Type: String
Default: dev
Resources:
MyApiGateway:
Type: AWS::Serverless::Api
Properties:
Name: My AWS Serverless API
StageName: !Ref Stage
Models:
ExchangeRate:
$schema: "http://json-schema.org/draft-04/schema#"
properties:
base:
type: string
target:
type: string
required:
- base
- target
title: User
type: object
ExchangeRateFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: functions/exchange-rate/
Handler: …Run Code Online (Sandbox Code Playgroud) amazon-web-services aws-lambda aws-api-gateway serverless aws-serverless
我的目标是使用层在我们的几个 lambda 函数之间共享库代码,并能够在本地调试和运行测试。
npm 能够从本地文件系统安装依赖项。当我们更改库代码时,我们希望该库的所有用户都能获取更新的代码,而无需设置专用的 npm 服务器。我可以使用相对路径在本地进行调试,但那是在我涉及sam build.
sam build在存储库的根目录创建一个隐藏文件夹并构建该文件夹并最终运行npm install,但是这次文件夹结构不同。文件中使用的相对路径package.json现在已损坏。我们不能使用显式路径,因为我们的存储库位于用户文件夹下,这当然对于不同的开发人员来说是不同的。
这就是我所做的:
我使用创建了一个项目sam init,并采用了项目的默认值(除了 的名称sam-app-2)nodejs 12.x(选项1和1)。
该命令创建了一个名为 的文件夹sam-app-2,它是以下所有文件名的引用。
我创建了一个dependencies/nodejs文件夹。
我添加dep.js到该文件夹:
exports.x = 'It works!!';
Run Code Online (Sandbox Code Playgroud)
我还添加package.json到同一文件夹:
{
"name": "dep",
"version": "1.0.0",
"description": "",
"main": "dep.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
Run Code Online (Sandbox Code Playgroud)
在 hello-world(包含 …
考虑 serverless.yml 文件上的这个 lambda 函数:
functions:
s3toEc2Lambda:
handler: s3toec2lambda.S3toEc2Lambda
name: "${self:service}-s3toEc2Lambda"
role: S3toEc2LambdaRole
Run Code Online (Sandbox Code Playgroud)
并考虑在资源部分创建的这个 SNS:有人知道如何从 lambda 函数 s3toEc2Lambda 通知 Sns ARN 端点吗?
resources:
Resources:
WordpressFrontEndSnsS3toEc2:
Type: AWS::SNS::Topic
Properties:
TopicName: "wordpress-front-end-s3-ec2"
WordpressFrontEndSnsS3toEc2Lambda:
Type: AWS::SNS::Subscription
Properties:
Endpoint: { "Fn::GetAtt": ["s3toEc2Lambda", "Arn" ] } <------ HERE <------
#Endpoint: ${self:functions.s3toEc2Lambda} <------ OR HERE <------
#Endpoint: { "Fn::GetAtt": ["${self:functions.s3toEc2Lambda}", "Arn" ] } <------ OR HERE <------
Protocol: lambda
TopicArn: !Ref 'WordpressFrontEndSnsS3toEc2'
Run Code Online (Sandbox Code Playgroud)
对我来说总是出现这样的错误消息:“模板错误:Fn::GetAtt 的实例引用未定义的资源 s3toEc2Lambda”
谢谢你 !
amazon-web-services amazon-sns aws-lambda aws-serverless aws-cloudformation-custom-resource
我们使用无服务器架构以及 AWS Lambda 和 API 网关。lambda 的执行时间在几毫秒范围内。客户端的最终响应在几秒钟内收到(这远远超过了 lambda 的执行时间,即使考虑到冷启动场景也考虑了 init 持续时间)。
\n在使用 API 网关日志进行调试时,会出现以秒为单位的集成延迟,这使得端到端响应相当慢。为了消除初始化持续时间或冷启动,我在 CloudWatch 中添加了规则,用于定期调用 lambda 以使它们保持温暖。
\n初始化持续时间被完全删除,这也有助于减少集成延迟。有些 Lambda 无法安排,因为调用它们需要身份验证,为此我添加了 5 的预配置并发。
\n该 Lambda 在日志中也有初始化持续时间。Lambda 配置是消除冷启动的另一种选择,但这不会对 API 网关上 Lambda 响应可用的时间产生影响。
\n我已按照以下链接将预配置并发分配给 Lambda:
\n\n我添加了配置的 Lambda 的 CloudWatch 日志:
\nDuration: 1331.38 ms Billed Duration: 1332 ms Memory Size: 256 MB Max Memory Used: 130 MB Init Duration: 1174.18 ms
我在 …
aws-serverless ×10
aws-lambda ×4
serverless ×3
node.js ×2
amazon-sns ×1
aws-cloudformation-custom-resource ×1
macos ×1
npm ×1