terraform-provider-aws 数据源指南:aws_backup_plan 备份计划查询详解
2026/9/17 22:56:41 网站建设 项目流程

terraform-provider-aws 数据源指南:aws_backup_plan 备份计划查询详解

【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws

导读

aws_backup_plan是 terraform-provider-aws 中用于读取(而非创建)现有 AWS Backup 备份计划的数据源。在需要将已有的 AWS Backup 计划接入 Terraform 状态、实现跨模块引用、或在配置中动态引用计划 ARN、版本号与规则详情时,它是把"存量云资源"与"基础设施即代码"衔接起来的关键工具。读完本文,你将掌握aws_backup_plan的完整参数与导出属性、plan_id的获取方式、region覆盖机制,以及它与aws_backup_plan资源(website/docs/r/backup_plan.html.markdown)之间的关联与配合用法。

数据源概览与适用场景

数据源(Data Source)在 Terraform 中只读地查询云上已有资源,不产生任何创建、更新或删除动作。aws_backup_plan数据源对应 AWS Backup 服务中的备份计划(Backup Plan),其核心用途是:

  • 获取已有备份计划的 ARN、显示名称、版本 ID,供 IAM 策略、告警、其他资源配置引用;
  • 读取计划内的规则(rule)、扫描设置(scan_setting)与标签(tags),用于审计、可视化或生成衍生配置;
  • 在拆分模块或迁移存量架构时,把 AWS 控制台/CLI 中手工创建的备份计划纳入 Terraform 的引用体系。

从源码结构看,该数据源位于 internal/service/backup/plan_data_source.go,通过@SDKDataSource("aws_backup_plan", name="Plan")注册,属于 AWS Provider 的 Backup 子服务(subcategory: Backup)。数据源的读取逻辑使用 SDK v2 的ReadWithoutTimeout模式,无超时写操作,与纯查询定位一致。

基本用法

文档给出的最小可用配置如下:

data "aws_backup_plan" "example" { plan_id = "tf_example_backup_plan_id" }

plan_id是唯一必填参数,值为备份计划的 ID。备份计划 ID 是一个字符串形式的唯一标识(例如1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d),通常可通过以下途径获得:

  • aws_backup_plan.<name>.id(当备份计划由同仓库的aws_backup_plan资源创建时直接引用);
  • AWS CLI 的aws backup list-backup-plans/aws backup get-backup-plan输出;
  • AWS 控制台备份计划详情页 URL 中携带的 ID。

更贴近真实项目的推荐写法是与资源配套使用,直接引用资源的id而无需硬编码:

resource "aws_backup_vault" "test" { name = "tf_acc_test_backup_vault_example" } resource "aws_backup_plan" "test" { name = "tf_acc_test_backup_plan_example" rule { rule_name = "tf_acc_test_backup_rule_example" target_vault_name = aws_backup_vault.test.name schedule = "cron(0 12 * * ? *)" } tags = { Name = "Value1" Key2 = "Value2b" Key3 = "Value3" } } data "aws_backup_plan" "test" { plan_id = aws_backup_plan.test.id }

这段配置与仓库中数据源接受测试 internal/service/backup/plan_data_source_test.go 的testAccPlanDataSourceConfig_basic完全一致:先创建备份库(aws_backup_vault)与备份计划(aws_backup_plan),再通过aws_backup_plan.test.id驱动数据源,从而确保plan_id永远有效。测试还通过TestCheckResourceAttrPair逐一断言数据源导出的namearnversiontagsrulescan_setting与资源本身完全一致,验证了数据源的读取正确性。

参数(Argument Reference)

aws_backup_plan数据源支持以下参数:

参数类型必填说明
plan_idstring要查询的备份计划 ID。
regionstring管理该资源的区域,默认使用 provider 配置中设置的区域。

region 参数说明

region是可选参数,用于指定读取备份计划所在的 AWS 区域。当备份计划与当前 Provider 默认区域不同,或需要在多区域场景下动态切换查询目标时,可在数据源块内单独覆盖,例如:

data "aws_backup_plan" "example" { plan_id = "1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d" region = "eu-west-1" }

该参数不参与数据源 Schema 的强制校验,而是作为 Provider 层面对 API 调用区域的分发依据:从源码结构看,region属于 Provider 通用的区域管理机制(docs/enhanced-region-support.md),被多个资源与数据源共享。仓库中还提供了区域覆盖的测试样例 internal/service/backup/testdata/Plan/region_override/main_gen.tf,可以看到regionname一样以var.region形式注入资源,验证了跨区域部署时该参数的实际作用。

导出属性(Attribute Reference)

除参数本身外,数据源还会导出以下属性,可直接通过data.aws_backup_plan.example.arn等方式引用:

属性类型说明
arnstring备份计划的 ARN。
namestring备份计划的显示名称。
ruleset备份计划的规则集合,每个规则包含调度、生命周期、复制动作等详细信息(详见下节)。
scan_settingset备份规则的扫描配置,包含恶意软件扫描器与扫描资源类型。
tagsmap用于组织备份计划的元数据标签。
versionstring备份计划的版本 ID,为随机生成的 Unicode UTF-8 编码字符串。

rule 的嵌套导出结构

rule是嵌套类型,每个元素包含以下子属性(与资源侧 website/docs/r/backup_plan.html.markdown 的rule结构对应):

  • rule_name— 规则显示名称;
  • target_vault_name— 备份存储的目标备份库名称;
  • schedule— 触发备份任务的 CRON 表达式;
  • schedule_expression_timezone— 调度表达式所在时区(资源侧默认"Etc/UTC");
  • start_window— 开始备份前的宽限分钟数(资源侧默认 60);
  • completion_window— AWS Backup 尝试完成备份的最长分钟数,超时取消任务并报错(资源侧默认 180);
  • enable_continuous_backup— 是否为受支持的资源启用连续备份;
  • recovery_point_tags— 附加到恢复点的标签;
  • lifecycle— 生命周期配置,包含:
    • cold_storage_after— 恢复点创建多少天后转入冷存储;
    • delete_after— 恢复点创建多少天后删除;
    • opt_in_to_archive_for_supported_resources— 是否将受支持资源转入归档(冷)存储层级;
  • copy_action— 复制动作集合,包含:
    • destination_vault_arn— 副本目标备份库的 ARN;
    • lifecycle— 与上述相同的生命周期嵌套结构;
  • scan_action— 规则级扫描动作,包含:
    • malware_scanner— 使用的恶意软件扫描器(当前仅支持GUARDDUTY);
    • scan_mode— 扫描模式,可取FULL_SCANINCREMENTAL_SCAN
  • target_logically_air_gapped_backup_vault_arn— 逻辑气隙备份库 ARN(须与备份计划同账号同区域)。

scan_setting 的嵌套导出结构

scan_setting同样为嵌套集合,包含:

  • malware_scanner— 扫描设置使用的恶意软件扫描器(当前仅支持GUARDDUTY);
  • resource_types— 应用扫描设置(string 集合),可取EBSEC2S3ALL
  • scanner_role_arn— AWS Backup 执行资源扫描所用 IAM 角色的 ARN。

源码级实现原理

数据源的读取流程可以拆解为三步,全部集中在 internal/service/backup/plan_data_source.go:

  1. 构造读取函数dataSourcePlanRead通过meta.(*conns.AWSClient).BackupClient(ctx)获取 AWS Backup 客户端(SDK v2),并从plan_id参数取得目标 ID;
  2. 调用查找逻辑findPlanByID封装了backup.GetBackupPlanAPI(见 internal/service/backup/plan.go):当 API 返回ResourceNotFoundException时归一化为retry.NotFoundError,当响应为空(output == nil || output.BackupPlan == nil)时返回tfresource.NewEmptyResultError()——这意味着若数据源指向不存在的计划,读取会明确失败并报错reading Backup Plan (<id>): ...,而不是静默返回空结果;
  3. 回填状态:将 API 响应中的BackupPlanId设为数据源 ID,并通过flattenBackupRulesflattenScanSettings等扁平化函数(plan.go)把 AWS 侧的BackupRuleScanSettingCopyActionLifecycleScanAction结构逐字段映射到 Terraform Schema,最终写入arnnamerulescan_settingversion等属性。

值得注意的实现细节:规则与扫描设置等嵌套结构在数据源侧全部声明为Computed: true(只读),与资源侧(plan.go 中大量Optional+Default的可写结构)形成清晰对比;同时recovery_point_tags使用tftags.TagsSchema()tags使用tftags.TagsSchemaComputed(),并通过@Tags(identifierAttribute="arn")标注以 ARN 为标签标识,这与资源侧tags/tags_all的划分逻辑一致。

与其他备份资源的配合

数据源通常与以下仓库内资源搭配使用,形成完整的备份编排:

  • aws_backup_plan 资源:用于创建/更新/删除备份计划,是数据源最常见的上游来源(提供idarnversion);
  • aws_backup_vault:备份库,rule.target_vault_namecopy_action.destination_vault_arn均指向它;
  • aws_backup_selection相关资源:将需要备份的 AWS 资源与备份计划关联起来。

一个典型的引用示例:

data "aws_backup_plan" "existing" { plan_id = "1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d" } # 将已有备份计划的 ARN 写入 SSM 参数,供其他系统消费 resource "aws_ssm_parameter" "backup_plan_arn" { name = "/backup/plan-arn" type = "String" value = data.aws_backup_plan.existing.arn }

使用注意与限制

  • 只读语义:数据源不会创建备份计划;若plan_id指向的计划不存在,读取会直接报错而非返回空数据;
  • 多区域:默认使用 Provider 区域,跨区域查询务必显式声明region
  • 属性一致性:数据源导出的rulescan_setting等为集合类型,引用子属性时需要使用展开表达式(如data.aws_backup_plan.example.rule[*].rule_name)或配合for表达式提取;
  • 标签读取:数据源只导出tags(计划自身标签),而资源侧额外的tags_all(含 Providerdefault_tags继承)是资源专属属性,数据源场景下以tags为准。

参考资源

  • 数据源文档:website/docs/d/backup_plan.html.markdown
  • 资源文档:website/docs/r/backup_plan.html.markdown
  • 数据源实现:internal/service/backup/plan_data_source.go
  • 底层查找与扁平化逻辑:internal/service/backup/plan.go
  • 数据源接受测试:internal/service/backup/plan_data_source_test.go
  • 区域覆盖测试模板:internal/service/backup/testdata/Plan/region_override/main_gen.tf
  • 区域管理机制说明:docs/enhanced-region-support.md

【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询