我有一个将在AWS EC2中运行的静态网站。我还有一个Golang可执行文件,旨在每晚更新一些Javascript数据文件。我知道我需要设置一个工作环境层才能做到这一点。我有两个问题:
工作环境层中的此类作业是否可以在Web服务器环境层中写入文件?
由于通过https POST调用预定作业,如何配置我的Golang可执行文件以响应POST请求本身不充当Web服务器的情况?
答案 0 :(得分:1)
什么是Web服务器环境层?它是一个Elastic Beanstalk应用程序吗?如果它只是一个静态网站,你应该在S3上托管它,如果它在S3上,你当然可以从你的Golang可执行文件写入。
如果您只是想运行夜间任务,那么使用Elastic Beanstalk工作环境似乎总是过度杀伤。只需运行一个小的EC2实例并通过cron安排任务。或者,通过Apex框架将其部署到Lambda。
如果你可以让你的静态网站在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以试验这项技术。