如何使用 Google 部署管理器 (GCP) 创建网络和子网

How to Create a Network and SubNetwork using Google deployment-manager (GCP)

我刚开始研究 GCP 部署管理器,我正在创建一个文件来创建一个网络和一个子网。我使用 2 个不同的文件(每个文件一个)进行了测试并且工作正常。现在,当我结合网络和子网的创建时,有两个问题:

  1. 在创建过程中,当网络完成创建并开始子网步骤时,看起来网络信息还没有创建,我得到了找不到资源的错误。但是如果我 运行 再次更新,子网就会创建。

  2. 在删除过程中,部署管理器尝试先删除网络再删除子网,我收到消息 "resource is in use, you can't delete"。

所以,我想在这里获得有关这方面最佳实践的帮助。非常感谢。

我的配置:

main.yml

imports:
  - path: network.jinja
  - path: subnetwork.jinja

resources:
  - name: network
    type: network.jinja

  - name: subnetwork
    type: subnetwork.jinja

network.jinja

resources:
  - type: gcp-types/compute-v1:networks
    name: network-{{ env["deployment"] }}
    properties:
      routingConfig:
      routingMode: REGIONAL
      autoCreateSubnetworks: false

subnetwork.jinja

resources:
- type: gcp-types/compute-v1:subnetworks
  name: subnetwork-{{ env["deployment"] }}
  properties:
    region: us-central1
    network: https://www.googleapis.com/compute/v1/projects/XXXXXXXX/global/networks/network-{{ env["deployment"] }}
    ipCidrRange: 10.10.10.0/24
    privateIpGoogleAccess: false

您的问题很可能是因为 Deployment Manager 没有识别出您的资源之间存在依赖关系。这是我使用的有效 YAML:

resources:
  - type: gcp-types/compute-v1:networks
    name: network-mynet
    properties:
      routingConfig:
        routingMode: REGIONAL
      autoCreateSubnetworks: false
  - type: gcp-types/compute-v1:subnetworks
    name: subnetwork-mynet
    properties:
      region: us-central1
      network: $(ref.network-mynet.selfLink)
      ipCidrRange: 10.10.10.0/24
      privateIpGoogleAccess: false

我认为主要区别在于,在此示例中,subnetworks 定义中的 network 元素使用了 Deployment Manager references。通过利用这种技术,我们有更多的声明性解决方案并且可以推导出关系。