背景环境:lambda是AWS的一种无服务器运行代码的服务,根据调用的频次进行收费。如果项目不确定被调用的次数,使用不规律或者是前期测试投入,可以考虑使用该模式,相对部署在EC2虚拟机上的话,性价比更高。
问题分析:
AWS云的Lambda运行支持,从2023年的下半年的某短时间开始,蒋C++,GO等单独的支持更整合了,因为本质上都是二进制文件,所以AWS那边也不想再单独区分了,就推出了Amazon Linux 2023/Amazon Linux 2
在这两个环境运行下的处理程序被强行要求固定命名为:bootstrap
以前:
现在:
如果你的处理程序,设置的不是bootstrap,需要到编辑里面去进行修改。
当然修改之后,并不能立刻解决报错的问题,因为你本身.zip上传的代码中,打包build的二进制程序还不是bootstrap,并且需要bootstrap位于.zip的根目录下,同名+处于根目录 两个条件缺一都会继续报错:Error: Couldn't find valid bootstrap(s): [/var/task/bootstrap /opt/bootstrap]
Serverless解决方案:
大部分使用Lambda函数的公司,都是才用的serverless.yml进行构建,这个时候就遇见一个问题了,按照以前的写法:
# serverless.yml
service: golang-go1x-x86
frameworkVersion: "3"
configValidationMode: error
provider:
name: aws
runtime: go1.x
architecture: x86_64
stage: ${opt:stage, 'dev'}
region: ${opt:region, 'eu-central-1'}
httpApi:
cors: true
name: ${self:service}-${self:provider.stage}
functions:
hello:
name: hello
handler: build/lambda/hello
events:
- httpApi:
path: /x86/hello
method: get
package:
exclude:
- ./**
include:
- ./bin/hello
world:
name: world
handler: build/lambda/world
events:
- httpApi:
path: /x86/world
method: get
package: