我有十几个服务,每个服务都有自己的无服务器模板文件,在 API Gateway 上共享相同的根 API。我的根serverless.yml文件定义了 API 和授权者:
...
resources:
Resources:
ApiGatewayRestApi:
Type: AWS::ApiGateway::RestApi
Properties:
Name: ${self:service.name}-${self:provider.stage}
Description: Medimap API Gateway
GatewayResponseDefault4XX:
Type: "AWS::ApiGateway::GatewayResponse"
Properties:
ResponseParameters:
gatewayresponse.header.Access-Control-Allow-Origin: "'*'"
gatewayresponse.header.Access-Control-Allow-Headers: "'*'"
ResponseType: DEFAULT_4XX
RestApiId:
Ref: "ApiGatewayRestApi"
Outputs:
RestApiId:
Value:
Ref: ApiGatewayRestApi
Export:
Name: ${self:service.name}-${self:provider.stage}-RestApiId
RootResourceId:
Value:
Fn::GetAtt: ApiGatewayRestApi.RootResourceId
Export:
Name: ${self:service.name}-${self:provider.stage}-ApiGatewayRestApiRootResourceId
AuthenticationService:
Value:
Fn::GetAtt: AuthenticationServiceLambdaFunction.Arn
Export:
Name: ${self:service.name}-${self:provider.stage}-AuthenticationService
functions:
authenticationService:
handler: src/api/common/authenticationService.handler
environment:
JWT_SECRET: ${env:JWT_SECRET}
events:
- http:
path: authenticationService
method: post
cors: true
Run Code Online (Sandbox Code Playgroud)
在我的每项服务的模板中,我都有如下代码:
provider:
...
apiGateway:
restApiId:
"Fn::ImportValue": …Run Code Online (Sandbox Code Playgroud) 我有一个无服务器项目,已成功部署到 AWS,其中包含多个 Lambda 函数和一个带有 API 网关事件的 Step Function 状态机。我手动删除了 AWS 中的 Step Function,现在sls deploy不部署 Step Function。
如何让事情恢复同步?
谢谢!
functions:
update:
handler: todos/update.update
events:
- http:
path: /update/{title}
method: put
Run Code Online (Sandbox Code Playgroud)
我必须如何定义路径参数才能使用无服务器框架将其传递给我的 AWS Lambda 函数?
我想用于 lambda 的语言是 Python3。
amazon-web-services python-3.x aws-lambda serverless-framework
我在SAM 项目文件requred query string params中指定时遇到问题。template.yml到目前为止,我没有找到这样的方法,只发现我们可以通过标头访问 lambda 函数中的查询字符串参数event.queryStringParameters。
那么我应该检查 lambda 层是否需要参数吗?或者有没有办法在 API 层本身做到这一点。因为我知道在serverless框架中我们可以指定是否需要查询字符串参数,如下所示:
functions:
create:
handler: posts.create
events:
- http:
path: posts
method: get
request:
parameters:
querystrings:
type: true
Run Code Online (Sandbox Code Playgroud) sam amazon-web-services serverless-framework serverless aws-sam
我正在编写一个 Python 应用程序,该应用程序从帐户 A 中提取数据并将其发送到帐户 B 中的 SQS 队列。执行 lambda 函数时,它返回以下错误:
"errorMessage": "调用 SendMessage 操作时发生错误 (AccessDenied):访问资源https://eu-central-1.queue.amazonaws.com/被拒绝。",
如果我在同一帐户中使用 SQS 队列,它就可以工作。
我正在使用无服务器框架,我需要在跨账户角色中使用ExternalId 。
我做了什么:
在账户 A(执行 Lambda 函数的地方)
以下功能是使用Serverless框架部署的:
TotalCollectorWeekToDate:
handler: environment.total_wtd_summary_handler
module: collectors
memorySize: 128
role: arn:aws:iam::<ACCOUNT_A>:role/FunctionsLambdaRole
timeout: 30
events:
- schedule:
rate: cron(0 7 * * ? *)
enabled: true
environment:
COST_DATA_SQS_QUEUE_URL: https://sqs.eu-central-1.amazonaws.com/<ACCOUNT_B>/prod-analyser-queue
Run Code Online (Sandbox Code Playgroud)
角色
Resources:
FunctionsLambdaRole:
Type: AWS::IAM::Role
Properties:
RoleName: FunctionsLambdaRole
AssumeRolePolicyDocument:
Statement:
- Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
Action: "sts:AssumeRole"
Path: /
ManagedPolicyArns: …Run Code Online (Sandbox Code Playgroud) 我尝试将 WarmUp 无服务器插件集成到我的项目中。但是,我相信它不起作用。我在 lambda\xe2\x80\x99s CloudWatch 日志组中没有看到 WarmUp 的调用,并且 lambda 在空闲一段时间后确实需要预热时间。
\n我的配置如下:
\nservice: ${file(./${env:DEPLOY_FILE_NAME}):service}\n\nprovider:\n name: aws\n custom:\n roleName: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):roleName}\n profileName: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):profileName}\n bundle:\n ignorePackages:\n - pg-native\n warmup:\n enabled: true\n events:\n - schedule: rate(5 minutes)\n prewarm: true\n plugins:\n - pluginHandler\n - serverless-plugin-warmup\n runtime: nodejs12.x\n iamRoleStatements:\n - Effect: 'Allow'\n Action:\n - 'lambda:InvokeFunction'\n Resource:\n - Fn::Join:\n - ':'\n - - arn:aws:lambda\n - Ref: AWS::Region\n - Ref: AWS::AccountId\n - function:${self:service}-${opt:stage, self:provider.stage}-*\n cfLogs: true\n stage: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):stage}\n region: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):region}\n memorySize: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):memorySize}\n timeout: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):timeout}\n keepWarm: false\n useApigateway: …Run Code Online (Sandbox Code Playgroud) 请考虑以下代码(serverless.yml):
functions:
exportCvToPdf:
handler: handler.exportCvToPdf
timeout: 20
events:
- http:
path: export
method: post
Run Code Online (Sandbox Code Playgroud)
部署到 AWS 会返回指向 API 端点的链接。对端点进行 CURL 操作会返回:
{"message":"Missing Authentication Token"}
Run Code Online (Sandbox Code Playgroud)
如何使用无服务器框架创建公共端点?
我已经尝试过以下方法:
functions:
exportCvToPdf:
handler: handler.exportCvToPdf
timeout: 20
events:
- http:
path: export
method: post
authorizer: none # None NONE "none" "NONE" "None" has also been tried
Run Code Online (Sandbox Code Playgroud)
上面在部署时返回错误:
Function none doesn't exist in this Service
Run Code Online (Sandbox Code Playgroud) amazon-web-services aws-lambda aws-api-gateway serverless-framework
我错误地在我的电脑上安装了更高版本的无服务器。v2.41.2现在由于v2.35.0一些项目需求,我想将我的无服务器框架版本从 降级到。
我曾尝试做的事情:
我使用 卸载了当前的无服务器框架npm uninstall -g serverless。
然后运行这个命令npm install -g serverless@2.35.0
但是当我运行此命令时,serverless --version它仍然在我的电脑上显示版本 2.41.2。
node.js serverless-framework serverless aws-serverless serverless-offline
我使用 AWS lambda 和 NodeJS 环境构建了应用程序。对于部署目的,我使用无服务器框架。现在,当我尝试使用带有 Nodejs 模板的无服务器框架将我的服务部署到 AWS 时。它已部署到服务器,但未将自定义域名映射到我的服务。之前我映射了它,之后自动映射了我的域名。现在,当我尝试重新部署服务时,它会抛出无法映射客户域的错误。我已附上下面的错误日志。你可以检查一下。您能帮我解决这个问题吗?
以下是我的命令的输出sls deploy -s local。
Serverless: Running "serverless" installed locally (in service node_modules)
Serverless: Load command interactiveCli
Serverless: Load command config
Serverless: Load command config:credentials
Serverless: Load command config:tabcompletion
Serverless: Load command config:tabcompletion:install
Serverless: Load command config:tabcompletion:uninstall
Serverless: Load command create
Serverless: Load command install
Serverless: Load command package
Serverless: Load command deploy
Serverless: Load command deploy:function
Serverless: Load command deploy:list
Serverless: Load command deploy:list:functions
Serverless: Load command invoke …Run Code Online (Sandbox Code Playgroud) node.js serverless-framework serverless-architecture serverless aws-serverless
我正在使用无服务器,并且试图弄清楚如何重写此 serverless.yml 文件,这样我就不会重复每个函数的环境变量。有没有办法全局设置环境变量?
service: test-api
frameworkVersion: ">=1.2.0 <2.0.0"
provider:
name: aws
runtime: nodejs12.x
timeout: 30
stage: dev
memorysize: 2048
region: us-east-2
logRetentionInDays: 21
functions:
doCreate:
handler: functions/do-create.handler
environment:
DB_PORT: ${ssm:/${self:custom.stage}/db_port}
DB_URL: ${ssm:/${self:custom.stage}/db_url}
API_KEY: ${ssm:/${self:custom.stage}/api_key}
ENV: "${self:custom.stage}"
SEARCH_ARN: ${ssm:/${self:custom.stage}/search_arn}
doUpdate:
handler: functions/do-update.handler
environment:
DB_PORT: ${ssm:/${self:custom.stage}/db_port}
DB_URL: ${ssm:/${self:custom.stage}/db_url}
API_KEY: ${ssm:/${self:custom.stage}/api_key}
ENV: "${self:custom.stage}"
SEARCH_ARN: ${ssm:/${self:custom.stage}/search_arn}
Run Code Online (Sandbox Code Playgroud) amazon-web-services aws-lambda serverless-framework serverless
serverless ×6
aws-lambda ×4
node.js ×2
amazon-iam ×1
amazon-sqs ×1
aws-sam ×1
python ×1
python-3.x ×1
sam ×1