从AWS-Lambda和无服务器框架开始,我对节点版本感到困惑:
在AWS帮助网站说,(在21日至2016)
AWS Lambda支持以下运行时版本:
Node.js:v0.10.36
所以我在本地机器上安装了Node.js v0.10.36.通过安装最新的(v 0.4.2)无服务器框架
npm install serverless -g
Run Code Online (Sandbox Code Playgroud)
它给出了以下警告:
npm WARN引擎serverless@0.4.2:wanted:{"node":"> = 4.0"}(当前:{"node":"0.10.36","npm":"1.4.28"})
我认为在本地拥有与AWS相同的版本可能有助于建立一致的开发环境......我错了吗?我应该在本地运行什么Node.js版本才能充分利用无服务器?
我目前正在使用带有无服务器框架的 AWS Lambda构建Web API .
在我的lambda函数中,每个函数都连接到Redis(elasticache)和RDB(Aurora,RDS)或DynamoDB以检索数据或写入新数据.我的所有lambda函数都在我的VPC中运行.
一切正常,除了在最后一次执行后首次执行或执行一个lambda函数时,执行lambda函数需要相当长的时间(1-3秒),或者有时甚至会响应网关超时错误(周围) 30秒),即使我的lambda函数配置为60秒超时.
正如指出这里,我想1-3秒用于初始化一个新的容器.但是,我想知道是否有办法减少这个时间,因为1-3秒或网关超时并不是生产使用的理想选择.
我正在使用Serverless来创建一个Web应用程序,该应用程序从S3存储桶提供静态内容,例如Web字体.S3存储桶配置为serverless.yml文件中的资源.其CORS配置将AllowOrigin设置为通配符.
我想将此更改为具有AllowOrigin,其中包含由Serverless创建的服务的http端点,例如31alib51b6.execute-api.eu-west-1.amazonaws.com.
我想知道是否可以在serverless.yml文件中配置它.
我的示例serverless.yml文件:
service: example-service
provider:
name: aws
runtime: nodejs4.3
region: eu-west-1
functions:
web:
handler: handler.handler
name: ${self:service}-${self:provider.stage}
description: ${self:service} web application - ${self:provider.stage}
events:
- http:
path: web
method: get
- http:
path: web/{proxy+}
method: get
resources:
Resources:
S3Assets:
Type: AWS::S3::Bucket
Properties:
BucketName: ${self:service}-${self:provider.stage}-assets
CorsConfiguration:
CorsRules:
- AllowedMethods:
- GET
- HEAD
AllowedOrigins:
- "*"
Run Code Online (Sandbox Code Playgroud) amazon-web-services aws-cloudformation aws-lambda serverless-framework
我正在尝试部署我的第一个无服务项目,并想让它更新我的dynamodb中的一个简单项目.所以我开始在serverless.yml中创建一个简单的服务:
service: serverless
provider:
name: aws
runtime: nodejs4.3
iamRoleStatements:
- Effect: "Allow"
Resource: "*"
Action:
- "dynamodb:*"
functions:
createMovie:
handler: handler.createMovie
events:
- http:
path: movies/create
method: post
integration: lambda
cors: true
Run Code Online (Sandbox Code Playgroud)
然后我在网上找到了更多的代码链接我的应用程序的dynamodb部分,并将其添加到底部的serverless.yml:资源:
Resources:
DynamoDbTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: moviesTwo
AttributeDefinitions:
- AttributeName: movieTitle
AttributeType: S
KeySchema:
- AttributeName: movieTitle
KeyType: HASH
ProvisionedThroughput:
ReadCapacityUnits: 5
WriteCapacityUnits: 5
DynamoDBIamPolicy:
Type: AWS::IAM::Policy
DependsOn: DynamoDbTable
Properties:
PolicyName: lambda-dynamodb
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- dynamodb:GetItem
- dynamodb:PutItem
Resource: arn:aws:dynamodb:*:*:table/moviesTwo
Roles: …Run Code Online (Sandbox Code Playgroud) 我无法在生产中从Amazon Lambda成功连接到RDS。对于Amazon Lambda,我使用无服务器框架,可以离线执行sls,我可以从本地主机连接RDS,但在生产中,Amazon Lambda不能。
两者都在同一个VPC中,在同一个安全组中,该组具有所有流量入站访问权限,并且有一个指向Vpc的CIDR的规则。
我附加了以下权限:AmazonRDSFullAccess,AWSLambdaFullAccess,AmazonVPCFullAccess,AWSLambdaExecute和AWSLambdaVPCAccessExecutionRole。
感谢帮助。
我正在尝试从CloudFormation中创建的堆栈中导出DynamoDb StreamArn,然后使用serverless.yml中的!ImportValue引用导出.
但我收到此错误消息:
unknown tag !<!ImportValue> in "/codebuild/output/src/serverless.yml"
Run Code Online (Sandbox Code Playgroud)
cloudformation和serverless.yml定义如下.任何帮助赞赏.
StackA.yml
AWSTemplateFormatVersion: 2010-09-09
Description: Resources for the registration site
Resources:
ClientTable:
Type: AWS::DynamoDB::Table
DeletionPolicy: Retain
Properties:
TableName: client
AttributeDefinitions:
- AttributeName: id
AttributeType: S
KeySchema:
- AttributeName: id
KeyType: HASH
ProvisionedThroughput:
ReadCapacityUnits: 2
WriteCapacityUnits: 2
StreamSpecification:
StreamViewType: NEW_AND_OLD_IMAGES
Outputs:
ClientTableStreamArn:
Description: The ARN for My ClientTable Stream
Value: !GetAtt ClientTable.StreamArn
Export:
Name: my-client-table-stream-arn
Run Code Online (Sandbox Code Playgroud)
serverless.yml
service: my-service
frameworkVersion: ">=1.1.0 <2.0.0"
provider:
name: aws
runtime: nodejs6.10
iamRoleStatements:
- Effect: Allow
Action:
- dynamodb:DescribeStream …Run Code Online (Sandbox Code Playgroud) 目前我有Azure函数和6.5.0默认定义的Node.js版本.目标是升级它.我已经检查了Azure上可用的Node.js版本列表,最新的版本是8.9.4.我已经阅读了一些关于它的文档,其中提到了两种方法.
1)package.json
将以下配置放入package.json文件
"engines": {
"node": "8.9.4"
}
Run Code Online (Sandbox Code Playgroud)
所以我做到了,但没有成功.
2)应用程序设置
转到应用程序设置,更新的价值WEBSITE_NODE_DEFAULT_VERSION要8.9.4
这里我有3个问题:
process.version功能告诉我6.11.0.我不知道为什么... 8.9.4,但有些ES6功能async arrow functions会抛出错误 serverless deploy命令它重新创建服务并将WEBSITE_NODE_DEFAULT_VERSION值重置为默认值,即6.5.0Azure功能的另一个问题:当我部署带有更改的功能时,Azure门户网站UI仍然显示我没有更新功能(旧版本),而该功能的新版本正在那里运行.奇怪的...
如果您有任何人遇到这些问题,请告诉我,也许有人知道原因甚至是解决方案.谢谢.
我有一个错误代码存储限制,超出了在AWS中部署无服务器应用程序的范围。总大小409 B.
错误消息显示:
发生错误:HelloLambdaFunction-超出代码存储限制。(服务:AWSLambda;状态代码:400;错误代码:CodeStorageExceededException;请求ID:...)
我正在尝试像本文一样访问AWS SSM参数存储。我已经在本地测试过lambda函数,它可以按预期工作。但是,当推送到AWS时,lambda在尝试检索配置时会失败;它超时:
{
"errorMessage": "2018-09-02T04:55:49.096Z 71a5006a-ae6c-11e8-9322-313ba5e28048 Task timed out after 6.01 seconds"
}
Run Code Online (Sandbox Code Playgroud)
我已将以下权限添加到serverless.yml。我已尽可能不受限制地尝试查找错误的位置。另外,该参数只是一个字符串,因此它不使用KMS。
service: pwaer-messages-service
provider:
name: aws
runtime: nodejs8.10
vpc:
securityGroupIds:
- sg-222f126f
subnetIds:
- subnet-756aef12
- subnet-130f8f3d
environment:
NODE_ENV: ${opt:stage, 'dev'}
iamRoleStatements:
- Effect: 'Allow'
Action: 'ssm:**'
Resource:
- 'Fn::Join':
- ':'
-
- 'arn:aws:ssm'
- Ref: 'AWS::Region'
- Ref: 'AWS::AccountId'
- 'parameter/*'
functions:
receiveText:
handler: dist/receive.handler
events:
- http:
path: sms/parse
method: post
Run Code Online (Sandbox Code Playgroud)
我想念什么?
amazon-web-services aws-lambda serverless-framework serverless
我不断收到此错误,但我不知道是什么原因引起的。
我有一个根据条件发布到另一个API的API,但是在包装API中遇到此错误。
这是代码...
handler.js
'use strict';
const axios = require('axios');
module.exports.thumbnailWrapperAPI = (event, context, callback) => {
const incomingData = JSON.parse(event.body);
if(incomingData.source.includes('png') || incomingData.source.includes('jpg')){
const newLocal = 'some endpoint...';
// call image resizing API...
axios.post(newLocal,{
source: incomingData.source,
target: incomingData.target,
width: incomingData.width
})
.then(response => callback(null,response))
.catch(error => callback(error))
} else if(incomingData.source.includes('html')) {
// handle HTML
} else {
//...
};
};
Run Code Online (Sandbox Code Playgroud)
serverless.yaml
service: thumbnailWrapperAPI
provider:
name: aws
runtime: nodejs8.10
region: eu-west-1
functions:
thumbnailWrapperAPI:
handler: handler.thumbnailWrapperAPI
events:
- http:
path: generatethumbnail/ …Run Code Online (Sandbox Code Playgroud)