使用 Github 和 Cloud Source Repository 的 Terraform GCP Cloud 功能

Posted

技术标签:

【中文标题】使用 Github 和 Cloud Source Repository 的 Terraform GCP Cloud 功能【英文标题】:Terraform GCP Cloud function using Github and Cloud Source Repository 【发布时间】:2020-11-25 06:39:44 【问题描述】:

我是 terraform 的新手,我想使用 Terraform 创建一个 Google Cloud Function,但想从 Github 提取源代码。

我设法做到这一点,压缩函数并使用 Terraform 将其复制到云存储中,但我不喜欢这个工作流程,因为我必须运行一个脚本才能开始。我宁愿只是在 Github 上做一个 PR,然后在 GCP 中查看新代码。

我已经将 Google Cloud Source Repositories 设置为从我的 Github 获取源代码。

我不清楚使用“source_repository”参数的 Terraform 文档。我想做的只是从 master 分支上的 HEAD 获取源代码。

我只是想知道在这种情况下如何指定“source_repository”参数。

我的云源存储库网址是https://source.cloud.google.com/projectName/github_offiecDomain_gitRepoName

我的云函数 terraform 脚本看起来像

resource "google_cloudfunctions_function" "js_function" 
source_repository  
  url = "https://source.cloud.google.com/projectName/github_offiecDomain_gitRepoName"
   

当我terraform apply 它返回一个错误

google_cloudfunctions_function.js_function: Creating...

    Error: googleapi: Error 400: The request has errors, badRequest
    
      on main.tf line 89, in resource "google_cloudfunctions_function" "js_function":
      89: resource "google_cloudfunctions_function" "js_function" 

编辑将我的日志级别移动到跟踪

这就是我所拥有的

2020-08-05T11:07:30.722+0500 [DEBUG] plugin.terraform-provider-google_v3.17.0_x5: ff
2020-08-05T11:07:30.722+0500 [DEBUG] plugin.terraform-provider-google_v3.17.0_x5: 
2020-08-05T11:07:30.722+0500 [DEBUG] plugin.terraform-provider-google_v3.17.0_x5:   "error": 
2020-08-05T11:07:30.722+0500 [DEBUG] plugin.terraform-provider-google_v3.17.0_x5:     "code": 400,
2020-08-05T11:07:30.722+0500 [DEBUG] plugin.terraform-provider-google_v3.17.0_x5:     "message": "The request has errors",
2020-08-05T11:07:30.722+0500 [DEBUG] plugin.terraform-provider-google_v3.17.0_x5:     "errors": [
2020-08-05T11:07:30.722+0500 [DEBUG] plugin.terraform-provider-google_v3.17.0_x5:       
2020-08-05T11:07:30.722+0500 [DEBUG] plugin.terraform-provider-google_v3.17.0_x5:         "message": "The request has errors",
2020-08-05T11:07:30.722+0500 [DEBUG] plugin.terraform-provider-google_v3.17.0_x5:         "domain": "global",
2020-08-05T11:07:30.722+0500 [DEBUG] plugin.terraform-provider-google_v3.17.0_x5:         "reason": "badRequest"
2020-08-05T11:07:30.722+0500 [DEBUG] plugin.terraform-provider-google_v3.17.0_x5:       
2020-08-05T11:07:30.722+0500 [DEBUG] plugin.terraform-provider-google_v3.17.0_x5:     ],
2020-08-05T11:07:30.722+0500 [DEBUG] plugin.terraform-provider-google_v3.17.0_x5:     "status": "INVALID_ARGUMENT"
2020-08-05T11:07:30.722+0500 [DEBUG] plugin.terraform-provider-google_v3.17.0_x5:   
2020-08-05T11:07:30.722+0500 [DEBUG] plugin.terraform-provider-google_v3.17.0_x5: 

我认为我的 URL 参数无效。任何线索我该如何写我的网址?

【问题讨论】:

你解决过这个问题吗?遇到同样的问题。 @LukasBatteau 有一个我们需要遵循的 url 模式。您不能直接复制并粘贴 url。在下面的 url source.developers.google.com/projects*/repos/*/moveable-aliases/*/paths/ 中用你自己的名字替换 '' 【参考方案1】:

网址非常具体:

要引用可移动别名(分支):https://source.developers.google.com/projects/*/repos/*/moveable-aliases/*/paths/* 特别是,要引用 HEAD,请使用主可移动别名。

我误以为“可移动别名”是分支名称的占位符,但它实际上必须在路径中。

见https://cloud.google.com/functions/docs/reference/rest/v1/projects.locations.functions#SourceRepository

【讨论】:

【参考方案2】:

没有直接从 GitHub 部署 Cloud Fuction 的选项。 但是,您可以 clone the repository 到 Google Cloud Source Repository,然后部署 Cloud Function from there

从错误中: 云函数有一些强制参数 像 entry_point 事件触发器

【讨论】:

【参考方案3】:

Cloud Function 的 Terraform 脚本遗漏了导致 INVALID ARGUMENT 错误的等号,请尝试以下代码:

resource "google_cloudfunctions_function" "js_function" 
source_repository = 
  url = "https://source.cloud.google.com/projectName/github_offiecDomain_gitRepoName"
   

另请注意, Terraform Official documentation 表示将 url 值格式化为 https://source.developers.google.com/projects/*/repos/*/moveable-aliases/*/paths/*

要使其工作,假设您的源代码和存储库具有以下信息:

    project: "YOUR PROJECT NAME"
    repo:"YOUR REPOSITORY"
    branch: master
    directory_in_repo_with_src: src/functions/bin

然后你需要把网址如下:

source_repository = 
  url = https://source.developers.google.com/projects/YOUR_PROJECT/repos/YOUR REPOSITORY/master/paths/src/functions/bin

如果它适合你,请告诉我。

【讨论】:

实际上等号不起作用,这就是我删除它的原因。它给出了一些格式错误 可能由于帖子中提到的 URL,您遇到了格式错误。你能把你的网址放在上面的格式吗?

以上是关于使用 Github 和 Cloud Source Repository 的 Terraform GCP Cloud 功能的主要内容,如果未能解决你的问题,请参考以下文章

Google Cloud Platform:集成云源存储库和ReadTheDocs

如何使用SAP Cloud for Customer里的Data Source

通过服务帐号使用 Google Cloud Source Repositories

如何知道剩余/使用的 Google Cloud Source Repository 存储?

使用 Packer Google Compute Builder 创建映像,但没有嵌入项目用户(cloud-init)

Spring Cloud 流无法自动装配 Source.class