无服务器部署后未创建端点

时间:2020-01-02 17:37:46

标签: node.js amazon-web-services aws-api-gateway aws-serverless

我正在尝试使用无服务器框架来部署lambda函数,部署成功,但是我看不到用于lambda函数的api网关,并且在部署后没有创建端点,我在下面发布了代码

serverless.yml

# Welcome to Serverless!
#
# This file is the main config file for your service.
# It's very minimal at this point and uses default values.
# You can always add more config options for more control.
# We've included some commented out config examples here.
# Just uncomment any of them to get that config option.
#
# For full config options, check the docs:
#    docs.serverless.com
#
# Happy Coding!

service: learning-serverless-post-apigetway
# app and org for use with dashboard.serverless.com
#app: your-app-name
#org: your-org-name

# You can pin your service to only deploy with a specific Serverless version
# Check out our docs for more details
# frameworkVersion: "=X.X.X"

provider:
 name: aws
  runtime: nodejs12.x

# you can overwrite defaults here
#  stage: dev
#  region: us-east-1

# you can add statements to the Lambda function's IAM Role here
#  iamRoleStatements:
#    - Effect: "Allow"
#      Action:
#        - "s3:ListBucket"
#      Resource: { "Fn::Join" : ["", ["arn:aws:s3:::", { "Ref" : "ServerlessDeploymentBucket" } ] ]  }
#    - Effect: "Allow"
#      Action:
#        - "s3:PutObject"
#      Resource:
#        Fn::Join:
#          - ""
#          - - "arn:aws:s3:::"
#            - "Ref" : "ServerlessDeploymentBucket"
#            - "/*"

# you can define service wide environment variables here
#  environment:
#    variable1: value1

# you can add packaging information here
#package:
#  include:
#    - include-me.js
#    - include-me-dir/**
#  exclude:
#    - exclude-me.js
#    - exclude-me-dir/**

functions:
 hello:
  handler: handler.hello
#    The following are a few example events you can configure
#    NOTE: Please make sure to change your handler code to work with those events
#    Check the event documentation for details
#    events:
#      - http:
#          path: users/create
#          method: get
#      - websocket: $connect
#      - s3: ${env:BUCKET}
#      - schedule: rate(10 minutes)
#      - sns: greeter-topic
#      - stream: arn:aws:dynamodb:region:XXXXXX:table/foo/stream/1970-01-01T00:00:00.000
#      - alexaSkill: amzn1.ask.skill.xx-xx-xx-xx
#      - alexaSmartHome: amzn1.ask.skill.xx-xx-xx-xx
#      - iot:
#          sql: "SELECT * FROM 'some_topic'"
#      - cloudwatchEvent:
#          event:
#            source:
#              - "aws.ec2"
#            detail-type:
#              - "EC2 Instance State-change Notification"
#            detail:
#              state:
#                - pending
#      - cloudwatchLog: '/aws/lambda/hello'
#      - cognitoUserPool:
#          pool: MyUserPool
#          trigger: PreSignUp
#      - alb:
#          listenerArn: arn:aws:elasticloadbalancing:us-east-1:XXXXXX:listener/app/my-load-balancer/50dc6c495c0c9188/
#          priority: 1
#          conditions:
#            host: example.com
#            path: /hello

#    Define function environment variables here
#    environment:
#      variable2: value2

# you can add CloudFormation resource templates here
#resources:
#  Resources:
#    NewResource:
#      Type: AWS::S3::Bucket
#      Properties:
#        BucketName: my-new-bucket
#  Outputs:
#     NewOutput:
#       Description: "Description for the output"
#       Value: "Some output value"

handler.js

 'use strict';

  module.exports.hello = async event => {
  if(event.httpMethod ==='POST'){
    const response ={
     statusCode: 200,
     body: JSON.stringify({
    body: event.body
     })
    };
  }else{
   const response = {
      statusCode: 200,
      body: JSON.stringify({
       message:'Something else was called'
      })
   }
  }
};

输出日志:

 Serverless: Packaging service...
 Serverless: Excluding development dependencies...
 Serverless: Creating Stack...
 Serverless: Checking Stack create progress...
 ........
 Serverless: Stack create finished...
 Serverless: Uploading CloudFormation file to S3...
 Serverless: Uploading artifacts...
 Serverless: Uploading service learning-serverless-post-apigetway.zip file to S3 (607 B)...
 Serverless: Validating template...
 Serverless: Updating Stack...
 Serverless: Checking Stack update progress...
 ...............
 Serverless: Stack update finished...
 Service Information
 service: learning-serverless-post-apigetway
 stage: dev
 region: us-east-1
 stack: learning-serverless-post-apigetway-dev
 resources: 6
 api keys:
 None
 endpoints: // There is no endpoint URL 
 None
 functions:
 hello: learning-serverless-post-apigetway-dev-hello
 layers:
 None
 Serverless: Run the "serverless" command to setup monitoring, troubleshooting and testing.

我也看不到API网关中的API,请帮助我是无服务器新手

1 个答案:

答案 0 :(得分:2)

使用serverless.yml中的函数定义,您需要明确地告诉它需要添加一个http事件触发器。使用无服务器,您可以在AWS生态系统内设置大量可能的事件触发器,因此您需要为特定的Lambda函数明确定义所需的事件触发器。更改仅比您已有的行多了

functions:
 hello:
  handler: handler.hello
  events:
   - http:
       method: get
       path: /myendpointpath

如果您想查看所有可能的事件触发器,则此页面应有帮助:

https://serverless.com/framework/docs/providers/aws/guide/events/#aws---events