Google Cloud Functions 公共 URL

15

1
我不相信这可以在Google的云平台上完成 - 因为您需要某种API网关来将自定义路由转换为类似于AWS的API网关和Lamba的Cloud函数路由。您可以考虑为您的服务构建一个API网关。 - Ryank
2
是的,这不是最好的解决方案,但谷歌目前正在追赶像AWS这样提供API网关服务的公司。 - Ryank
1
@Ryank API网关的成本相当高(比运行函数本身的成本要高得多),而唯一通过http调用lambda函数的方法是使用它。相比之下,由http触发的Google Functions会自动为您提供一个https端点,无需任何额外费用。但是,如果您仍然想代理url,可以考虑使用Cloud Endpoints或App Engine或其他类似工具。 - Kevin Lee
1
@QuestionAndAnswer 我能想到的一种方法是使用Google App Engine(您可以设置自定义域并导入自己的TLS证书,或者只使用自动分配的appspot.com URL),并将其用于将请求路由到云函数。如果您使用此方法,也可以通过pub/sub调用函数而不是http。 - Kevin Lee
@KevinLee,我们部署了额外的nginx服务,将其映射到我们的资源(静态内容、函数、用户文件),并使用我们的域名。 - Artsiom Miksiuk
显示剩余2条评论
5个回答

6

Cloud Endpoints充当云函数的API网关。

对于云函数https://[CLOUD_FUNCTION_REGION].cloudfunctions.net/my-function

  1. Set project id in Cloud shell

    gcloud config set project [PROJECT_ID]
    
  2. Deploy ESPv2 Beta to Cloud Run. Replace CLOUD_RUN_SERVICE_NAME with the name that you want to use for the service.

    gcloud run deploy CLOUD_RUN_SERVICE_NAME \
       --image="gcr.io/endpoints-release/endpoints-runtime-serverless:2" \
       --allow-unauthenticated \
       --platform managed
    

    At the end of command execution, it will have similar details as below

    Service [CLOUD_RUN_SERVICE_NAME] revision [CLOUD_RUN_SERVICE_NAME-00001-ces] has been deployed and is serving 100 percent of traffic at https://CLOUD_RUN_SERVICE_NAME-65zrpjcu3q-uk.a.run.app

    Note host-name receive from the above command (CLOUD_RUN_SERVICE_NAME-65zrpjcu3q-uk.a.run.app)

  3. Create YAML file api.yaml with OpenAPI spec config:

      swagger: '2.0'
      info:
        title: Cloud Endpoints + GCF
        description: Sample API on Cloud Endpoints with a Google Cloud Functions backend
        version: 1.0.0
      host: CLOUD_RUN_SERVICE_NAME-65zrpjcu3q-uk.a.run.app
      schemes:
        - https
      produces:
        - application/json
      paths:
        /thisroute:
          get:
            summary: Custom function route
            x-google-backend:
              address: https://[CLOUD_FUNCTION_REGION].cloudfunctions.net/my-function
            responses:
              '200':
                description: A successful response
                schema:
                  type: string
    
  4. Deploy Endpoint configuration:

    gcloud endpoints services deploy api.yaml
    
  5. Now, Cloud function request can route through endpoint https://CLOUD_RUN_SERVICE_NAME-65zrpjcu3q-uk.a.run.app/thisroute.

  6. Also to use custom domain name, need to verifying a domain name. For that follow steps from here


似乎现在的API YAML需要一个operationId条目。我并不完全理解文档,但当我在get:部分创建一个API时,它部署了一个API。 - undefined

2

1
不,我不使用 Firebase。 - Artsiom Miksiuk
1
如果你想完成这个任务,目前在GCP上这是可行的方法。 - martin.code
我找不到我是否在这里留下了答案,但我们使用单独的Compute Engine和nginx代理服务器,负责路由解析。 - Artsiom Miksiuk
明白了,你为什么没有选择使用App Engine来代理请求呢?速度的原因吗? - martin.code
Compute Engine 看起来是一个更简单的解决方案。App Engine 更加成熟,允许通过 express 或 Python 模块使用自定义代码进行代理请求,但它的性能可能比 nginx 差一些,我认为。 - Artsiom Miksiuk

1

1

目前不可能。您需要一个API代理,但我真的不建议公开公共URL。

在我看来,此时最优雅的解决方案是基于云发布/订阅创建简单的代理应用程序,您可以在gap、gke或新的cloud run上运行它,以便您可以扩展到0。

逻辑可以是动态的,如下:

  • 使用一些内部逻辑读取请求的URL
  • 使用URL的路径选择主题
  • 通过发布/订阅主题将有效负载转发到云函数

然而,此时您应该问自己,与在gae / gke上运行您的应用程序(也许有不同的服务来分割关注点)相比,这是否真正有用,因为在成本方面可能会更便宜。

如果您想要一个针对“api网关”问题的SaaS解决方案,您还可以查看Apigee


0

您需要设置云负载均衡并使用云安全加密进行保护。然后在您的云函数上设置入口设置,仅接受内部流量和云负载均衡。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接