amazon-web-services - 使用无服务器框架部署 lambda 函数
问题描述
我已经使用无服务器框架成功部署了我的 lambda 函数(在 Nodejs 运行时中)
问题是serverless deploy
它还创建了一堆我不想要的 AWS 服务,例如:
- API 网关 - 我没有,因为我已经有自己的 API 网关
- S3 存储桶 - 我不需要查看任何输出日志
- Cloudwatch - 我不需要查看任何日志,因为我们有日志基础设施
问:有没有办法告诉 serverless 只部署 lambda 函数? (或者至少避免 API 网关)
解决方案
无服务器框架创建一个 S3 存储桶作为将您的服务引入 AWS 的一种方式。它没有尝试直接推送到 Lambda 服务,而是将其打包成一个 zip,上传到 S3,然后指向该 S3 存储桶,以便部署过程知道在哪里可以找到东西。您可以指定自己的 S3 存储桶,用于存储所有部署工件。嵌套在 provider 下的 deploymentBucket 配置允许您为该存储桶设置名称或 serverSideEncryption 方法。如果您不提供自己的存储桶,Serverless 将创建一个使用默认 AES256 加密的存储桶。
至于 API Gateway,如果您想使用现有的 API Gateway 资源(实际上没有必要,因为它们不花钱,除非有流量通过它们),您可以通过引用其 REST API 在多个项目之间共享同一个 API Gateway serverless.yml 中的 ID 和 Root Resource ID 如下:
service: service-name
provider:
name: aws
apiGateway:
restApiId: xxxxxxxxxx # REST API resource ID. Default is generated by the framework
restApiRootResourceId: xxxxxxxxxx # Root resource, represent as / path
websocketApiId: xxxxxxxxxx # Websocket API resource ID. Default is generated by the framework
description: Some Description # optional - description of deployment history
functions: ...
您应该至少在基本层面重新考虑使用 CloudWatch。这是您可以从函数中获取输出的唯一方法,除非您绑定一个发出 API 请求的服务,这可能会增加您的服务的延迟。CloudWatch 不会增加延迟(或至少小到可以忽略不计)。但是,如果您确实必须关闭 CloudWatch,则无法阻止它在 ClouWatch 中创建日志组,但您可以将日志的存活时间限制为 0 天或少数天:
provider:
logRetentionInDays: 0
推荐阅读
- ruby-on-rails - ActonCable 不适用于产品(Rails5 + Redis + Nginx + SSL)
- arrays - typescript:异步函数作为另一个函数的参数被执行而不是挂起
- c - 管道 - 与多个分叉的子进程通信
- laravel - 如何在 Laravel 中每分钟运行一次计划任务?
- java - AspectJ 1.9.4 with OpenJDK 11 without Spring Context 不能作为 Spark 路由上的依赖模块
- php - WordPress add_menu_page 未显示在后端
- cloud-foundry - Transform mono on operations success
- javascript - 是否可以在 wavesurfer.js 中显示带有波形的 y 轴?
- css - 如何防止另一个 SVG 剪辑中的 SVG
- traveling-salesman - 穿越所有城市,但允许分叉(可以拆分自己的旅行推销员)