首页 > 解决方案 > 使用无服务器框架部署 lambda 函数

问题描述

我已经使用无服务器框架成功部署了我的 lambda 函数(在 Nodejs 运行时中)
问题是serverless deploy它还创建了一堆我不想要的 AWS 服务,例如:

问:有没有办法告诉 serverless 只部署 lambda 函数? (或者至少避免 API 网关)

标签: amazon-web-servicesserverless-frameworkserverless

解决方案


无服务器框架创建一个 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

推荐阅读