首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在AWS Lambda上运行Go程序的项目结构

在AWS Lambda上运行Go程序的项目结构
EN

Stack Overflow用户
提问于 2018-02-05 17:49:56
回答 2查看 1.9K关注 0票数 9

我从AWS Compute Blog中找到了以下代码示例

代码语言:javascript
复制
package main

import (
    "github.com/aws/aws-lambda-go/events"
    "github.com/aws/aws-lambda-go/lambda"
)

func handler(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
    return events.APIGatewayProxyResponse{
        StatusCode: 200,
        Body:       "Hello World",
    }, nil
}

func main() {
    lambda.Start(handler)
}

由于lambda.Start只接受一个处理程序,而Go程序的入口点是main函数,这是否意味着一个CodeStar项目只能包含一个处理程序?

我知道lambda函数应该很小,最好只处理一个功能,但似乎需要创建许多项目,这将很难管理。我的理解正确吗?

EN

回答 2

Stack Overflow用户

发布于 2018-02-05 18:17:38

您的handler函数是您的入口点,但是由于您可以使用任意的json数据调用它,因此您可以根据发送给handler的数据从您的json内部调用多个函数。

APIGatewayProxyRequestBody字段。你在此基础上做什么取决于你自己。

lambda (AFAIU)的思想是拥有最小的二进制文件,这些二进制文件只做一件事。在我看来,使用lambda内部的请求路由实现复杂的应用程序似乎是在滥用该模型,但它是可行的。

票数 5
EN

Stack Overflow用户

发布于 2018-02-06 17:15:46

这是我到目前为止想出的方法

项目文件夹结构:

代码语言:javascript
复制
project
  folder1
    main.go
  folder2
    main.go
  buildspec.yml
  template.yml

buildspec.yml:

代码语言:javascript
复制
...

build:
    commands:
      - cd folder1
      - go build -o main
      - cd ../folder2
      - go build -o main
....

template.yml:

代码语言:javascript
复制
....

Resources:
  GetTest1:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: ./folder1
      Handler: main
      Runtime: go1.x
      Role:
        Fn::ImportValue:
          !Join ['-', [!Ref 'ProjectId', !Ref 'AWS::Region', 'LambdaTrustRole']]
      Events:
        GetEvent:
          Type: Api
          Properties:
            Path: /test1
            Method: get
  GetTest2:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: ./folder2
      Handler: main
      Runtime: go1.x
      Role:
        Fn::ImportValue:
          !Join ['-', [!Ref 'ProjectId', !Ref 'AWS::Region', 'LambdaTrustRole']]
      Events:
        GetEvent:
          Type: Api
          Properties:
            Path: /test2
            Method: get   
....

重要的是要注意,子目录中的所有main.go文件,即folder1/main.gofolder2/main.go,都需要在package main中,否则它将无法工作。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48619686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档