与 Terraform 集成

如果您使用 Terraform 来管理基础架构,则可以使用 Google Cloud 提供商的 Beta 版来定义 Terraform 配置中的以下资源。

在 Terraform 模块中定义代码库和特定于代码库的权限。

  1. 使用 google 提供商和代码库资源创建 main.tf 模块文件。

    以下配置定义了提供商和 Terraform 资源名称为 my-repo 的代码库。

    provider "google" {
        project = "PROJECT-ID"
    }
    
    resource "google_artifact_registry_repository" "my-repo" {
      provider = google-beta
    
      location = "LOCATION"
      repository_id = "REPOSITORY"
      description = "DESCRIPTION"
      format = "DOCKER"
      kms_key_name = "KEY"
    }
    

    其中

    • PROJECT-ID 是 Google Cloud 项目 ID
    • REPOSITORY 是代码库名称
    • LOCATION 是代码库位置
    • DESCRIPTION 是代码库的可选说明
    • 如果您使用客户管理的加密密钥 (CMEK) 进行加密,则 KEY 是 Cloud Key Management Service 密钥的名称。省略此参数可使用默认设置,即 Google 管理的加密密钥。
  2. 如需在模块中授予特定于代码库的权限,请添加 google_artifact_registry_repository_iam 资源。以下示例定义了一个资源名称为 repo-account 的服务帐号,并为其授予对资源名称为 my-repo 的代码库的读取权限。

    provider "google" {
        project = "PROJECT-ID"
    }
    
    resource "google_artifact_registry_repository" "my-repo"     {
      provider = google-beta
    
      location = "LOCATION"
      repository_id = "REPOSITORY"
      description = "DESCRIPTION"
      format = "DOCKER"
    }
    
    resource "google_service_account" "repo-account" {
      provider = google-beta
    
      account_id   = "ACCOUNT-ID"
      display_name = "Repository Service Account"
    }
    
    resource "google_artifact_registry_repository_iam_member" "repo-iam" {
      provider = google-beta
    
      location = google_artifact_registry_repository.my-repo.location
      repository = google_artifact_registry_repository.my-repo.name
      role   = "roles/artifactregistry.reader"
      member = "serviceAccount:${google_service_account.repo-account.email}"
    }
    

    ACCOUNT-ID 是服务帐号的 ID。这是服务帐号电子邮件字段中 @ 符号之前的部分。

    如需查看其他示例(包括使用 IAM 政策分配权限),请参阅 google_artifact_registry_repository_iam 文档。

  3. 初始化 Terraform:

    terraform init
    
  4. 应用 Terraform 配置:

    terraform apply
    

    输入 yes,确认您要应用上述操作。