如何将Golang可执行文件配置为在AWS中作为预定作业运行?

时间:2016-07-12 18:50:29

标签: amazon-web-services go amazon-ec2 scheduled-tasks

我有一个将在AWS EC2中运行的静态网站。我还有一个Golang可执行文件,旨在每晚更新一些Javascript数据文件。我知道我需要设置一个工作环境层才能做到这一点。我有两个问题:

  1. 工作环境层中的此类作业是否可以在Web服务器环境层中写入文件?

  2. 由于通过https POST调用预定作业,如何配置我的Golang可执行文件以响应POST请求本身不充当Web服务器的情况?

2 个答案:

答案 0 :(得分:1)

  1. 什么是Web服务器环境层?它是一个Elastic Beanstalk应用程序吗?如果它只是一个静态网站,你应该在S3上托管它,如果它在S3上,你当然可以从你的Golang可执行文件写入。

  2. 如果您只是想运行夜间任务,那么使用Elastic Beanstalk工作环境似乎总是过度杀伤。只需运行一个小的EC2实例并通过cron安排任务。或者,通过Apex框架将其部署到Lambda。

  3. 如果你可以让你的静态网站在S3上工作,你的夜间工作在Lambda上运行,它将只花费Beanstalk和/或EC2的一小部分。

答案 1 :(得分:0)

截至2018年1月,Lambda支持Go,并且按计划运行Lambda函数很容易。

请查看本指南:Go Worker Functions with Lambda, S3, and CloudWatch Events

诀窍是使用Schedule事件配置Lambda函数,以及访问S3存储桶的权限。这是一个摘录的CloudFormation模板:

Resources:
  WorkerPeriodicFunction:
    Properties:
      CodeUri: ./handlers/worker-periodic/main.zip
      Environment:
        Variables:
          BUCKET: !Ref Bucket
      Events:
        Request:
          Properties:
            Schedule: rate(1 day)
          Type: Schedule
      Handler: main
      Policies:
        - Statement:
            - Action:
                - s3:DeleteObject
              Effect: Allow
              Resource: !Sub "arn:aws:s3:::${Bucket}/*"
            - Action:
                - s3:ListBucket
              Effect: Allow
              Resource: !Sub "arn:aws:s3:::${Bucket}"
      Runtime: go1.x
      Timeout: 15
    Type: AWS::Serverless::Function

查看我的开源gofaas Lambda and Go app以试验这项技术。