如何通过Serverless框架将自定义Docker镜像用于AWS Lambda Express应用?
如何通过Serverless框架将自定义Docker镜像用于AWS Lambda Express应用?
嗨,我来帮你搞定这个问题!既然你已经写好了Dockerfile来解决大文件部署的问题,只需要调整一下serverless.yml的配置,就能顺利用自定义镜像部署你的Lambda Express应用了,具体操作如下:
第一步:移除不需要的Runtime配置
因为我们要用自定义Docker镜像,Lambda的运行时会由镜像本身定义,所以直接删掉provider部分里的runtime: nodejs20.x就行。
第二步:为函数添加镜像配置
把原来函数里的handler配置替换成image配置,这里分两种场景:
场景1:本地构建镜像(适合开发测试)
如果想让Serverless框架自动帮你构建镜像并推送到AWS ECR,就这么配置:
functions: api: name: express-api # 替换handler为image配置 image: dockerfile: Dockerfile # 指定你的Dockerfile路径,默认根目录可省略 uri: docker://public.ecr.aws/lambda/nodejs:20 # 你的Dockerfile里用的基础镜像 events: - httpApi: '*'
运行serverless deploy时,框架会自动完成镜像构建、推送到ECR专用仓库,再关联到你的Lambda函数,全程不用手动操作镜像仓库~
场景2:使用已推送到ECR的镜像(适合生产环境)
如果你已经把构建好的镜像推送到自己的AWS ECR仓库了,直接填写ECR的镜像URI即可:
functions: api: name: express-api image: uri: 123456789012.dkr.ecr.us-east-1.amazonaws.com/express-lambda:latest # 替换成你的ECR镜像地址 events: - httpApi: '*'
完整的配置示例
给你一份修改后的完整serverless.yml参考(以本地构建场景为例):
org: projectname app: express service: deployments frameworkVersion: '3' provider: name: aws timeout: 10 tracing: lambda: false # 已移除runtime配置 functions: api: name: express-api image: dockerfile: Dockerfile uri: docker://public.ecr.aws/lambda/nodejs:20 events: - httpApi: '*'
最后提醒一下:部署前确保你的AWS CLI已经配置好权限,能正常访问ECR服务,然后直接运行serverless deploy就可以啦!
备注:内容来源于stack exchange,提问作者Dev Scott
相关产品推荐
相关产品推荐

