You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pulumi Go SDK部署GCP PostgreSQL时删除保护未生效问题

GCP Cloud SQL实例删除保护未生效问题排查与解决

我通过Pulumi Go SDK在GCP部署PostgreSQL实例时,已将deletionProtection参数设为true,但GCP控制台显示实例未开启删除保护,仍可直接删除,进而导致Pulumi状态损坏。相关资源配置预览如下:

+ gcp:sql/databaseInstance:DatabaseInstance: (create)
            [urn=urn:pulumi:us-east4-dev-google-cloud-sql-example::google-cloud-sql-example::gcp:myproject/sql:Database$gcp:sql/databaseInstance:DatabaseInstance::google-cloud-sql]
            databaseVersion   : "POSTGRES_12"
            deletionProtection: true
            name              : "google-cloud-sql-0b96b6d"
            project           : "my-project"
            region            : "us-east4"
            settings          : {
                availabilityType   : "REGIONAL"
                backupConfiguration: {
                    enabled                   : false
                    pointInTimeRecoveryEnabled: false
                }
                databaseFlags      : [
                    [0]: {
                        name      : "auto_explain.log_analyze"
                        value     : "on"
                    }
                    [1]: {
                        name      : "max_connections"
                        value     : "800"
                    }
                ]
                diskAutoresize     : true
                diskAutoresizeLimit: 0
                diskSize           : 200
                diskType           : "PD_SSD"
                insightsConfig     : {
                    queryInsightsEnabled: false
                    queryStringLength   : 1024
                }
                ipConfiguration    : {
                    ipv4Enabled   : false
                    privateNetwork: "projects/my-project/global/networks/dev-vpc"
                }
                pricingPlan        : "PER_USE"
                tier               : "db-custom-32-122880"
                userLabels         : {
                    compliance : "cisl1"
                    criticality: "2"
                    environment: "dev"
                    monitored  : "true"
                    name       : "myusername"
                    owner      : "devops_backend"
                    persistence: "persistent"
                    purpose    : "pulumi-common-google-cloud-sql-example"
                }
            }

排查与解决步骤

1. 验证Provider版本

确认使用的gcp Pulumi Provider为最新稳定版。旧版本可能存在deletionProtection参数映射的bug,更新到最新版可解决此类问题。

2. 检查参数传递是否正确

  • 执行pulumi refresh刷新Pulumi状态,确认本地状态中deletionProtection仍为true。
  • 通过GCP CLI查看实例实际配置:
    gcloud sql instances describe google-cloud-sql-0b96b6d --project my-project
    
    检查输出中的settings.deletionProtection字段值。若为false,说明参数未正确下发到GCP。

3. 确认Go代码参数配置位置

deletionProtection是Cloud SQL实例的顶层参数,而非settings的子字段。确保Go代码中参数定义正确:

databaseInstance, err := sql.NewDatabaseInstance(ctx, "google-cloud-sql", &sql.DatabaseInstanceArgs{
    DatabaseVersion:    pulumi.String("POSTGRES_12"),
    DeletionProtection: pulumi.Bool(true), // 此处为顶层参数,不可嵌套到Settings中
    Name:               pulumi.String("google-cloud-sql-0b96b6d"),
    Project:            pulumi.String("my-project"),
    Region:             pulumi.String("us-east4"),
    Settings: sql.DatabaseInstanceSettingsArgs{
        // 其他实例配置...
    },
})

若误将该参数放到Settings结构体中,GCP API会忽略该配置,导致删除保护不生效。

4. 排查配置覆盖问题

检查Pulumi栈配置或组件资源中是否存在全局参数覆盖,导致deletionProtection被重置为false。

5. 重新部署验证

若以上步骤确认配置无误,可先备份实例数据,执行pulumi destroy销毁当前实例,再重新pulumi up部署,确保参数正确传递。部署完成后再次通过GCP CLI和控制台验证删除保护状态。

内容的提问来源于stack exchange,提问作者Chanan Berler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 10:33:46