首页 > 解决方案 > 如何为我的谷歌云功能设置端点路径(使用无服务器框架)

问题描述

我正在使用无服务器框架在 GCP 中部署云功能,配置如下:

service: myname

provider:
  name: google
  stage: prod
  runtime: nodejs10
  region: us-central1
  project: myname
  credentials: keyfile.json
  environment:
    IS_PROD: 'true'

plugins:
  - serverless-google-cloudfunctions

package:
  exclude:
    - node_modules/**
    - .gitignore
    - .git/**

functions:
  clear:
    handler: clearCommand
    events:
      - http: clear

我正在使用serverless-google-cloudfunctions插件版本 3.1.0。部署后,地址/路径如下:

https://us-central1-myname.cloudfunctions.net/myname-prod-clear

我想知道是否有办法自己设置路径如下:

https://us-central1-myname.cloudfunctions.net/clear

有没有办法设置这个?首选无服务器框架方式。

标签: google-cloud-platformgoogle-cloud-functionsserverless-framework

解决方案


您可以在中的name函数定义指定serverless.yml

因此,在您的serverless.yml中,它将如下所示,

functions:
  clear:
    name: clear
    handler: clearCommand
    events:
      - http: clear

但是请注意,在serverless-google-cloudfunctions3.1.0 版本中,函数名的赋值仍然存在问题。部署工作正常,GCP 中部署的函数名称也正确。但它并没有正确反映在serverless deploy执行结束时的部署状态中。

编辑:部署状态问题已在 3.1.1 版中修复。

在早期版本中,我们仍然需要执行以下 hacky 变通方法来手动更新serverless-googlecloudfunctions.node_modules

info/lib/displayServiceInfo.js,替换当前的getFunctionNameInService函数实现,

const getFunctionNameInService = (funcName, service, stage) => {
  let funcNameInService = funcName;
  funcNameInService = funcNameInService.replace(service, '');
  funcNameInService = funcNameInService.replace(stage, '');
  funcNameInService = funcNameInService.slice(2, funcNameInService.length);
  return funcNameInService;
};

const getFunctionNameInService = (funcName, service, stage) => {
  let funcNameInService = funcName;
  funcNameInService = funcNameInService.replace(`${service}-`, '');
  funcNameInService = funcNameInService.replace(`${stage}-, '');
  return funcNameInService;
};

我希望这将有所帮助。


推荐阅读