首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多个main.go文件,以便部署基于AWS的应用程序

具有多个main.go文件,以便部署基于AWS的应用程序
EN

Stack Overflow用户
提问于 2019-05-13 07:04:02
回答 1查看 1.4K关注 0票数 2

我有以下复杂的结构:

代码语言:javascript
复制
utils:
    - utils.go
function1:
    pkg1_specific_to_fn1:
        -pkg1_specific_to_fn1.go
    pkg2_specific_to_fn1:
        -pkg2_specific_to_fn1.go
    main.go
function2:
    pkg1_specific_to_fn1:
        -pkg1_specific_to_fn2.go
    pkg2_specific_to_fn1:
        -pkg2_specific_to_fn2.go
    main.go
function3:
    pkg1_specific_to_fn1:
        -pkg1_specific_to_fn3.go
    pkg2_specific_to_fn1:
        -pkg2_specific_to_fn3.go
    main.go

如何在.YML中为所有这些函数创建GoLang部署文件?如果所有这些功能都有自己的主要功能,会不会有什么问题?我是GoLang新手,但据我所知,包只能包含一个main.go文件,而在handler属性的YML文件中,我必须指定来自bin的可执行文件。以下是我的想法:

代码语言:javascript
复制
service: myService

provider:
  name: aws
  runtime: go1.x

functions:
  function1:
    handler: bin/function1/main
    description: ..
    events: ..
  function2:
    handler: bin/function2/main
    events: ..
  function3:
    handler: bin/function3/main

因为我有多个代表多个Lambda函数的包,所以我可以在每个包中都包含main.go,对吗?如果没有,那么如何才是正确的方法呢?而且,如果这很好,我如何为每个函数指定正确的main二进制文件,这真的是使用GoLang部署多个lambda的约定吗?

注意:在每个main.go中都有一个相应的函数处理程序。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-13 17:27:07

lambda功能的部署可以归结为包/模块组织和自动化部署工具。第一个类似于您的问题中的地址,共享代码放置在何处,并且每个lambda都有一个单独的包。在这个问题中,尚不清楚使用的部署方法是什么。部署lambda有多种方法。

虽然我一直是e2e和自动化倡导者,但对于各种事件的最终运行程序多lambda部署工作流可能如下所示

代码语言:javascript
复制
init:
  fn1ZipLocation: somepath1.zip
  fn2ZipLocation: somepath2.zip
  fnXZipLocation: somepathX.zip

pipeline:

  build:
    fn1:
      action: exec:run
      target: $target
      sleepTimeMs: 1500
      errors:
        - ERROR
      commands:
        - cd ${appPath}aeroagg/app
        - unset GOPATH
        - export GOOS=linux
        - export GOARCH=amd64
        - go build -o function1
        - zip -j somepath1.zip function1

  ...

  deployFunctions:
    fn1:
      action: aws/lambda:deploy
      credentials: aws-e2e
      functionname: fn1
      runtime:  go1.x
      handler: main
      code:
        zipfile: $LoadBinary(${fn1ZipLocation})
      rolename: lambda-fn1-executor
      define:
        - policyname: xxx-resource-fn1-role
          policydocument: $Cat('${privilegePolicy}')
      attach:
        - policyarn: arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
      triggers:
        - source: somequeue
          type: sqs
          enabled: true
          batchSize: 20000
    fn2:
      action: aws/lambda:deploy
      credentials: aws-e2e
      functionname: fn2
      runtime:  go1.x
      handler: main
      code:
        zipfile: $LoadBinary(${fn2ZipLocation})
      rolename: lambda-fn2-executor
      define:
        - policyname: xxx-resource-fn2-role
          policydocument: $Cat('${privilegePolicy}')
      attach:
        - policyarn: arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole

      notification:
        action: aws/s3:setupBucketNotification
        bucket: someBucket
        lambdaFunctionConfigurations:
          - functionName: fn2
            id: ObjectCreatedEvents
            events:
              - s3:ObjectCreated:*
            filter:
              prefix:
                - folderXXX
              suffix:
                - .csv

      ...
    fnX:
      action: aws/lambda:deploy
        functionname: fnX
        runtime:  go1.x
        handler: main
        timeout: 360
        vpcMatcher:
          instance:
            name: instanceWithVPC

        environment:
          variables:
            CONFIG: $AsString($config)
        code:
          zipfile: $LoadBinary(${fn2ZipLocation})
        rolename: lambda-fn3-executor
        define:
          - policyname: lambda-sns-execution-role
            policydocument: $Cat('${privilegePolicy}')
        attach:
          - policyarn: arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
          - policyarn: arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole
      setupSubscription:
        action: aws/sns:setupSubscription
        protocol: lambda
        endpoint: fnX
        topic: someTopic

    deployGatewayAPI:
      redeploy: true
      action: aws/apigateway:setupRestAPI
      '@name': myAPIName
      resources:
        - path: /
          methods:
            - httpMethod: GET
              functionname: fn3
        - path: /{proxy+}
          methods:
            - httpMethod: GET
              functionname: fn4
        - path: /v1/api/fn4
          methods:
            - httpMethod: GET
              functionname: fn5

最后,您可以使用lambda 无服务器e2e实用测试示例检查e2e。

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

https://stackoverflow.com/questions/56107229

复制
相关文章

相似问题

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