動作功能是 Alpha 版功能,可擴展 Deployment Manager 可呼叫的 API 方法範圍。由於這項功能不受支援,建議您將現有的 Actions 用法遷移至支援的替代方案。常用的 Action storage.buckets.setIamPolicy 對應至現有的 Deployment Manager 資源類型 virtual.buckets.iamMemberBinding,可用於取代該類型。
將部署作業從 storage.buckets.setIamPolicy 遷移至 virtual.buckets.iamMemberBinding
virtual.buckets.iamMemberBinding 資源是虛擬資源,代表 Identity and Access Management (IAM) 政策繫結。完整類型為 gcp-types/storage-v1:virtual.buckets.iamMemberBinding。
virtual.buckets.iamMemberBinding 具有建立、讀取、更新和刪除 (CRUD) 作業的自訂實作項目,來自 Deployment Manager 後端。這個方法會呼叫與 Action storage.buckets.setIamPolicy 呼叫的方法類似的方法,但會以一般資源而非 Action 建模,並遵循與一般資源類型相同的生命週期。
如要遷移部署作業,請在所有部署作業設定檔中,將 Action storage.buckets.setIamPolicy 的用法替換為資源 virtual.buckets.iamMemberBinding。如果您有多個繫結,可能需要多個資源,才能在這些繫結中實作相同的邏輯。虛擬型別不會取代資源上的任何現有繫結,但會修補新的繫結。
手動遷移的使用範例
如要手動完成遷移作業,請參閱下列使用範例。在某些情況下 (例如套用多個 IAM 繫結),您可能需要在 iamMemberBinding 資源中新增 metadata.dependsOn 或其他資源的參照,以避免競爭狀況等問題。
YAML + Jinja
以下範例說明如何在 YAML 設定檔中使用 setIamPolicy 動作。系統不支援這種做法,請改用 iamMemberBinding 虛擬資源:
- name: patch-iam-policy
action: gcp-types/storage-v1:storage.buckets.setIamPolicy
properties:
bucket:
policy: # existing policy, e.g. from a getIamPolicyAction
gcpIamPolicyPatch:
add:
下列範例顯示 YAML 和 Jinja 範本中 iamMemberBinding 虛擬資源的建議用法:
{% set BUCKETNAME = "bucket-" + env["deployment"] %}
resources:
- type: gcp-types/storage-v1:buckets
name: {{ BUCKETNAME }}
properties:
location: US
storageClass: STANDARD
- type: gcp-types/storage-v1:virtual.buckets.iamMemberBinding
name: test-bucket-iam
properties:
bucket: $(ref.{{ BUCKETNAME }}.name)
member: projectEditor:{{ env["project"] }}
role: roles/storage.admin
Python
以下範例說明如何在 Python 範本中使用 setIamPolicy 動作。這種做法不受支援,請改用 iamMemberBinding 虛擬資源:
下列範例顯示在 Python 範本中,建議如何使用 iamMemberBinding 虛擬資源:
如要查看與 gcs-bucket.py 範本相關的其他範例,請前往 GitHub 的 cloud-foundation-toolkit 存放區。如要詳細瞭解如何將 gcs-bucket.py 範本從使用動作 setIamPolicy 轉換為使用虛擬資源 iamMemberBinding,請參閱轉換範例。您也可以查看轉換後範本的使用範例。