我正在尝试无服务器,但我没有运气能够serverless-offline使用serverless-dynamodb-local. 我的设置非常少,需要 3 分钟才能重现,我是这样做的:
sls create -t aws-nodejs-typescript --path folder-namenpm inpm install --save serverless-dynamodb-localnpm install serverless-offline --save-devsls dynamodb install
现在我更新serverless.ts文件
plugins: [
'serverless-esbuild',
'serverless-dynamodb-local',
'serverless-offline'
],
Run Code Online (Sandbox Code Playgroud)
customDynamoDB 配置,例如 custom: {
esbuild: { ... },
dynamodb: {
stages: ['dev'],
start: {
migrate: true
}
}
Run Code Online (Sandbox Code Playgroud)
resources: {
Resources: {
usersTable: {
Type: 'AWS::DynamoDB::Table',
Properties: { …Run Code Online (Sandbox Code Playgroud) typescript serverless-framework serverless serverless-offline amazon-dynamodb-local
使用无服务器框架,如何使我的 Lambda 函数依赖于该resources部分中的 SQS 队列,因为它是函数本身的触发器?
在我的 中serverless.yaml,我定义了一个新的队列和 Lambda 函数。
然后,我想使用该队列作为 Lambda 函数的事件源(触发器)。
我通过手动创建队列 ARN 来做到这一点:
functions:
consumer:
handler: App\Service\Consumer
events:
- sqs:
arn:
Fn::Join:
- ':'
- arn:aws:sqs
- Ref: AWS::Region
- Ref: AWS::AccountId
- ${opt:stage}-skill-assigner
Run Code Online (Sandbox Code Playgroud)
并在资源中创建队列:
resources:
Resources:
SkillAssignerQueue:
Type: AWS::SQS::Queue
Properties:
QueueName: ${opt:stage}-skill-assigner
Run Code Online (Sandbox Code Playgroud)
如果我在将队列用作函数触发器之前在部署中创建队列,则效果很好。
但是,如果我尝试部署它们,当它尝试创建事件源映射时,它会失败并出现此错误:
提供的请求无效:接收消息时发生错误。SQS 错误代码:AWS.SimpleQueueService.NonExistentQueue。SQS 错误消息:此 wsdl 版本的指定队列不存在。
amazon-sqs amazon-web-services aws-lambda serverless-framework
我在 serverless.yml 上使用 useDotenv 属性,但它未在 AWS 中加载:
org: xyz
app: route-learner
service: route-learner-cron
frameworkVersion: '3'
useDotenv: true
provider:
name: aws
runtime: python3.8
stage: ${opt:stage, 'dev'}
functions:
extract_route:
handler: src.functions.extract_route.run
events:
# Invoke Lambda function at every 5th minute.
- schedule:
rate: cron(5,15,25,35,45,55 * * * ? *)
vpc:
securityGroupIds:
- ...
subnetIds:
- ...
plugins:
- serverless-python-requirements
custom:
pythonRequirements:
dockerizePip: true
Run Code Online (Sandbox Code Playgroud)
我在根目录中有一个 .env.prod 文件,其中包含以下内容:
DB_URI=my_db_url
DB_VERBOSE=True
Run Code Online (Sandbox Code Playgroud)
我正在使用以下命令部署该功能:
serverless deploy --stage prod --verbose
Run Code Online (Sandbox Code Playgroud)
调用该函数后,我看到以下错误:
[ERROR] KeyError: 'DB_URI'
Traceback (most recent call …Run Code Online (Sandbox Code Playgroud) python environment-variables python-venv serverless-framework
我正在尝试使用无服务器框架在 lambda 函数中调用 lambda 函数。我现在正在使用这段代码,部署到 AWS 后它可以正常工作。但它在 serverless-offline 中本地返回一些错误。
我现在使用的代码:
const middy = require("@middy/core");
const httpErrorHandler = require("@middy/http-error-handler");
const httpUrlEncodeBodyParser = require("@middy/http-urlencode-body-parser");
const AWS = require("aws-sdk");
const lambda = new AWS.Lambda();
const baseHandler = async (payload) => {
const params = {
FunctionName: `my-api-${process.env.STAGE}-handleProcessA`,
InvocationType: "Event",
LogType: "None",
Payload: JSON.stringify(payload),
};
await lambda.invoke(params).promise();
return standardResponse();
}
const endpoint = middy(baseHandler)
.use(httpUrlEncodeBodyParser())
.use(httpErrorHandler());
module.exports = { endpoint };
Run Code Online (Sandbox Code Playgroud)
当这个被触发时,它表示找不到该函数:
Function not found: arn:aws:lambda:us-west-2:893853743015:function:my-api-local-handleProcessA
我也尝试了这些问题的建议: /sf/answers/4113647121/ /sf/answers/4897727201/
根据建议,我更改了这部分:
const lambda = new …Run Code Online (Sandbox Code Playgroud) 我正在使用 Cloudformation 和 Serverless Framework 创建 AWS Aurora Serverless V2 Postgres 数据库集群 (AWS::RDS::DBCluster)(见下文)。目前还不清楚我是否还应该创建两个数据库实例 (AWS::RDS::DBInstance),以便集群具有可用的读取器和写入器实例?
当我运行 AWS RDS 向导时,Aurora Serverless V2 集群会自动设置两个实例(读取器和写入器)。我假设在创建 cloudformation 脚本时我应该做同样的事情?
簇
Type: AWS::RDS::DBCluster
DeletionPolicy: Delete
Properties:
DBClusterIdentifier: db-test-cluster
Engine: aurora-postgresql
MasterUsername: username_from_secrets_manager
MasterUserPassword: password_from_secrets_manager
ServerlessV2ScalingConfiguration:
MinCapacity: 0.5
MaxCapacity: 2
BackupRetentionPeriod: 1
DatabaseName: test-db
EngineMode: provisioned
Port: 5432
Tags:
- Key: "Name"
Value: db-test-cluster
Run Code Online (Sandbox Code Playgroud)
DbInstance 1 - 读取器
Type: AWS::RDS::DBInstance
Properties:
Engine: aurora-postgresql
DBInstanceClass: db.serverless
DBClusterIdentifier: !Ref auroraServerlessCluster
Run Code Online (Sandbox Code Playgroud)
DbInstance 2 - 编写器
Type: AWS::RDS::DBInstance
Properties:
Engine: aurora-postgresql
DBInstanceClass: …Run Code Online (Sandbox Code Playgroud) amazon-web-services amazon-rds aws-cloudformation serverless-framework aws-aurora-serverless
无服务器框架是否支持将相同的API部署到多个云提供商(AWS,Azure和IBM)并根据传统的负载均衡器方法(即循环或延迟)将请求路由到每个提供商?
无服务器框架是否直接支持此功能?
无服务器是否与全局负载平衡器(例如dyn或neustar)集成?
aws-lambda serverless-framework openwhisk azure-functions serverless-architecture
我正在尝试在AWS中创建一个lambda函数,它将创建一个新的Stripe标记:
import stripePackage from 'stripe';
const stripe = stripePackage('...');
module.exports.create = (event, context, callback) => {
stripe.tokens.create({
card: {
"number": 4242424242424242,
"exp_month": '02',
"exp_year": '22',
"cvc": '123'
}
}, (err, token) => {
if (err) {
console.log(err);
callback(null, {
statusCode: 400,
body: "error"
});
}
callback(null, {
statusCode: 200,
body: "ok"
});
console.log(token);
});
}
Run Code Online (Sandbox Code Playgroud)
但是,每次都会超时.我有一个出站连接的安全组,如下所示:
Ports Destination
All 0.0.0.0/0
Run Code Online (Sandbox Code Playgroud)
但是,我似乎唯一可以连接的是其他AWS服务.如何将我的Lambda函数打开到AWS外部的连接?
以下是YAML格式的示例云形成文件。想法是使Route53记录依赖于RDS数据库的创建,然后在其创建后从RDS数据库的端点获取值。
我在这些参考文档中进行了大量研究,但始终无法正确获取语法。
您可以看到它应该有一个返回值,但是我不确定如何获取它并将其用于route53 cName记录名称。
resources:
Resources:
uploadBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: ${self:custom.uploadBucket}
RDSDatabase:
Type: AWS::RDS::DBInstance
Properties:
Engine : mysql
MasterUsername: ${env:RDS_USERNAME}
MasterUserPassword: ${env:RDS_PASSWORD}
DBInstanceClass : db.t2.micro
AllocatedStorage: '5'
PubliclyAccessible: true
#TODO: The Value of Stage is also available as a TAG automatically which I may use to replace this manually being put here..
Tags:
-
Key: "Name"
Value: ${self:custom.databaseName}
DeletionPolicy: Snapshot
DNSRecordSet:
Type: AWS::Route53::RecordSet
Properties:
HostedZoneName: mydomain.com.
Name: database-${self:custom.stage}.mydomain.com
Type: CNAME
TTL: '300'
ResourceRecords:
- [[Put End Point Here]] …Run Code Online (Sandbox Code Playgroud) amazon-rds aws-cloudformation amazon-route53 serverless-framework serverless
我正在使用serverless.yml在AWS cloudformation中创建几个服务,特别是:cognitoUserPool和UserPoolClient。
这两个创建都将返回ID,这些ID将用于在我的带有ognito库的平面html文件上连接到Amazon cognito的ID,因此,由于我从S3提供平面文件,因此我需要将这些值编码在文件中。
现在,我正在寻找一种自动化的方法,也许在文件中保留一个占位符,然后通过预处理器运行它们,该预处理器会使用输出值更改占位符,然后再将其上传到S3。
有什么想法可以实现吗?我的第一个猜测是从无服务器部署中导出输出变量,然后在任务运行器上使用这些值。
当我尝试部署到aws时,由于缺少“ path”属性或该属性无效,导致出现错误。
无服务器部署-v #要么 无服务器运行--watch
# serveless file
service:
name: aws-nodejs-ecma-script
# Add the serverless-webpack plugin
plugins:
- serverless-webpack
provider:
name: aws
runtime: nodejs6.10
functions:
events_get:
handler: get.handler
events:
- http:
method: get
path: test
Run Code Online (Sandbox Code Playgroud) amazon-web-services aws-lambda serverless-framework serverless
aws-lambda ×5
serverless ×3
amazon-rds ×2
amazon-sqs ×1
node.js ×1
openwhisk ×1
python ×1
python-venv ×1
typescript ×1