ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Terraform AWS Provider 数据源 `aws_backup_vault` 完全指南:读取 AWS Backup 存储库信息

Terraform AWS Provider 数据源 `aws_backup_vault` 完全指南:读取 AWS Backup 存储库信息 Terraform AWS Provider 数据源aws_backup_vault完全指南读取 AWS Backup 存储库信息【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws本文是 HashiCorp Terraform AWS Providerterraform-provider-aws中数据源aws_backup_vault的完整使用指南。它围绕官方数据源文档展开结合本仓库的 Go 源码实现讲清楚该数据源的作用、参数与导出属性、底层 API 调用链以及如何在真实 Terraform 配置中读取已有 AWS Backup 存储库Backup Vault的 ARN、KMS 加密密钥、恢复点数量与标签信息。读完本文你将能熟练使用该数据源完成跨资源引用、标签查询与备份体系编排。数据源概述什么时候该用aws_backup_vaultaws_backup_vault是一个数据源Data Source用于获取一个已存在的 AWS Backup 存储库的详细信息。它的典型应用场景包括在 Terraform 配置中引用由其他流程或本配置之外创建的备份存储库例如通过其 ARN 给备份计划aws_backup_plan、恢复点删除策略等资源提供依赖参数在terraform import或terraform state之外快速读取存储库当前的状态信息加密密钥、恢复点数量、标签将存储库的arn或kms_key_arn作为输出output暴露给下游使用。数据源与资源aws_backup_vault的关键区别在于资源负责创建、更新、删除存储库数据源只负责只读查询。如果存储库尚未创建使用该数据源会直接报错——它面向的是已存在的资源。Argument Reference支持的参数该数据源支持的参数如下参数是否必填说明name必填备份存储库的名称。region可选存储库所在的 AWS 区域。默认使用 Provider 配置中设置的区域即provider aws中的region。name按名称定位存储库name是数据源唯一的必填参数用于精确指定要读取的存储库。注意 AWS Backup 存储库名称的命名约束从资源侧的校验逻辑vault.go可以看到名称长度必须为250 个字符且只能由字母、数字、下划线和连字符组成例如example_backup_vault。region跨区域读取当存储库不在 Provider 默认区域时可通过region指定目标区域。该参数生效的底层机制是 Provider 的区域增强支持enhanced region support在同一个 Provider 实例中可以显式指定某个资源/数据源的归属区域Provider 会为该数据源单独构建对应区域的 AWS 客户端从而在默认区域之外读取目标区域的存储库。Attribute Reference导出的属性该数据源除上述参数外还会导出以下只读属性。它们与 AWS Backup 服务 API 返回字段一一对应详见 vault_data_source.go 中的dataSourceVaultRead实现属性类型说明arnstring存储库的 ARNAmazon Resource Name。kms_key_arnstring用于保护备份数据的服务端加密 KMS 密钥 ARN。AWS Backup 默认使用 AWS 托管密钥aws/backup若存储库创建时指定了自定义 KMS 密钥这里会返回该密钥的 ARN。recovery_pointsnumber当前存储在存储库中的恢复点Recovery Point数量。tagsmap(string)附加在存储库上的标签用于辅助资源组织与管理。完整实战示例基本用法读取一个已存在的存储库这是官方文档给出的最小可用配置backup_vault.html.markdowndata aws_backup_vault example { name example_backup_vault } output vault_arn { value data.aws_backup_vault.example.arn } output vault_kms_key { value data.aws_backup_vault.example.kms_key_arn } output vault_recovery_points { value data.aws_backup_vault.example.recovery_points }与资源联动先建后查串联备份体系数据源最常见的用法是配合aws_backup_vault资源使用——资源负责创建数据源负责把创建好的存储库信息交给其他资源引用resource aws_kms_key example { description KMS key for backup vault encryption deletion_window_in_days 10 } resource aws_backup_vault example { name example_backup_vault kms_key_arn aws_kms_key.example.arn tags { Name production-backups Team platform } } # 数据源直接按名称读取刚创建的存储库 data aws_backup_vault example { name aws_backup_vault.example.name } # 将存储库 ARN 传递给备份计划 resource aws_backup_plan example { name example_backup_plan rule { rule_name daily target_vault_name data.aws_backup_vault.example.name schedule cron(0 12 * * ? *) } } output vault_arn { value data.aws_backup_vault.example.arn }跨区域读取与标签引用provider aws { region us-east-1 } # 读取 us-west-2 区域的存储库 data aws_backup_vault example { name example_backup_vault region us-west-2 } output vault_region { value data.aws_backup_vault.example.region } output vault_tags { value data.aws_backup_vault.example.tags } # 根据标签过滤结果 locals { team lookup(data.aws_backup_vault.example.tags, Team, unknown) }与aws_backup_vault资源的属性对比数据源导出的属性与资源侧导出的属性高度对应。资源aws_backup_vault额外支持force_destroy删除时是否强制清空恢复点、tags_all含 Provider 级default_tags继承的完整标签集等参数而数据源侧由于是只读查询导出的是查询时刻的实际状态见资源文档 backup_vault.html.markdown。底层实现原理从 Terraform 配置到 AWS API调用链总览该数据源在仓库中的实现位于 vault_data_source.go核心调用链如下dataSourceVaultRead() └─ findBackupVaultByName(ctx, conn, name) └─ findVaultByName() └─ findVault() └─ conn.DescribeBackupVault() // AWS SDK for Go v2Schema 定义与属性映射在 vault_data_source.go 中数据源的 Schema 被定义为arnComputedstring对应 API 返回的BackupVaultArnkms_key_arnComputedstring对应 API 返回的EncryptionKeyArnnameRequiredstring查询主键recovery_pointsComputedint对应 API 返回的NumberOfRecoveryPointstagsComputedmap通过tftags.TagsSchemaComputed()定义仅声明为计算属性、不可由用户在数据源上直接设置。读取阶段dataSourceVaultReadvault_data_source.go先取出name调用findBackupVaultByName发起DescribeBackupVault查询随后把返回的BackupVaultArn、EncryptionKeyArn、BackupVaultName、NumberOfRecoveryPoints分别写入对应属性并以存储库名称设置数据源的 IDd.SetId(name)。查询与错误处理细节查询逻辑位于 vault.go有几个值得注意的实现细节类型过滤findBackupVaultByName在拿到DescribeBackupVault结果后会检查VaultType——只有VaultType为BackupVault或为空时才视为普通备份存储库否则返回空结果错误。这是因为 AWS Backup 还支持逻辑气隙Logically Air Gapped等其他存储库类型同目录下的 logically_air_gapped_vault.go 负责管理这类存储库数据源必须确保不误读。错误归一化findVault把ResourceNotFoundException与AccessDeniedException统一包装为retry.NotFoundError使上层能够用统一的未找到语义处理output nil时也会返回空结果错误保证行为可预期。标签读取tags属性由生成代码ListTagstags_gen.go通过 AWS Backup 的ListTagsAPI 获取调用链以arn为标识源码注解// Tags(identifierAttributearn)指定了标签的标识属性。测试验证数据源行为有测试保障仓库为数据源提供了验收测试TestAccBackupVaultDataSource_basicvault_data_source_test.go。该测试先用aws_backup_vault资源创建带两个标签的存储库再通过数据源按名称读取并用TestCheckResourceAttrPair逐项断言数据源与资源的name、arn、kms_key_arn、recovery_points、tags.%完全一致。这说明数据源读取到的属性与资源管理时设置的属性是一一对应的配置中可以直接引用数据源属性而不用担心不一致。常见问题与注意事项存储库不存在时会怎样数据源查询不到存储库会直接报错reading Backup Vault (xxx)相关错误这符合数据源只读已存在资源的语义。若存储库尚未创建应先用aws_backup_vault资源创建。region与 Provider 区域的关系region缺省时使用 Provider 配置的区域显式设置后Provider 会为该数据源构建目标区域的客户端底层依赖 AWS SDK for Go v2 的客户端初始化逻辑见 conns 包因此支持跨区域只读查询。recovery_points是实时值该属性来自DescribeBackupVault返回的NumberOfRecoveryPoints会随备份任务执行而变化在plan/apply期间若恢复点数量变化可能导致输出漂移建议仅作信息展示用途。加密密钥的含义kms_key_arn返回的是存储库的服务端加密密钥。未显式指定 KMS 密钥创建的存储库AWS Backup 会使用 AWS 托管密钥aws/backup该属性同样会返回对应 ARN。tags与tags_all的区别数据源只导出tags当前附加在存储库上的标签资源侧才有tags_all含 Provider 级default_tags继承的标签。如需读取继承标签请配合资源或另行处理。延伸阅读数据源实现源码internal/service/backup/vault_data_source.go底层查询与资源实现internal/service/backup/vault.go数据源验收测试internal/service/backup/vault_data_source_test.go同服务的存储库资源文档website/docs/r/backup_vault.html.markdown标签管理与查询生成代码internal/service/backup/tags_gen.go【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表