免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

Terraform AWS Provider 数据源 aws_grafana_workspace 完全指南:读取 Amazon Managed Grafana 工作区信息

Terraform AWS Provider 数据源 aws_grafana_workspace 完全指南:读取 Amazon Managed Grafana 工作区信息 Terraform AWS Provider 数据源 aws_grafana_workspace 完全指南读取 Amazon Managed Grafana 工作区信息【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-awsaws_grafana_workspace是 Terraform AWS Provider 提供的一个只读数据源Data Source用于获取指定 Amazon Managed GrafanaAMG工作区的详细信息。本文以 官方数据源文档 为主线结合 数据源实现、底层资源实现 与 验收测试 的源码证据完整讲解该数据源的参数、全部导出属性、底层 API 调用链路与实战用法帮助你直接在 Terraform 配置中引用工作区元数据如端点、ARN、认证方式、数据源列表等进行跨资源编排。数据源是什么与 aws_grafana_workspace 资源的分工Amazon Managed Grafana 是一个托管的 Grafana 服务工作区Workspace是其核心资源。在 Terraform AWS Provider 中aws_grafana_workspace资源internal/service/grafana/workspace.go中的resourceWorkspace()负责工作区的创建、更新、删除需要指定account_access_type、authentication_providers、permission_type等必填参数aws_grafana_workspace数据源dataSourceWorkspace()源码位于 internal/service/grafana/workspace_data_source.go负责只读查询已存在工作区的信息供其他资源引用。两者的典型搭配是先用资源创建或由控制台、其他工具创建工作区再用数据源在 Terraform 配置中读取其endpoint、arn、grafana_version等属性用于配置依赖该工作区的下游资源例如把端点写进 DNS 记录、把 ARN 写进 IAM 策略。从源码注释看该数据源与资源都标注了SDKDataSource(aws_grafana_workspace, nameWorkspace)与Tags注解属于同一个服务包internal/service/grafana下的对应实现。基本用法一个参数即可查询数据源的用法非常简洁只需传入workspace_iddata aws_grafana_workspace example { workspace_id g-2054c75a02 }随后即可在任意表达式中引用其导出属性例如output workspace_endpoint { value data.aws_grafana_workspace.example.endpoint }更贴近真实生产环境的做法是让数据源与资源联动——先创建再读取。这与官方验收测试 internal/service/grafana/workspace_data_source_test.go 中的配置模式一致测试中通过workspace_id aws_grafana_workspace.test.id将资源 ID 传给数据源resource aws_grafana_workspace example { account_access_type CURRENT_ACCOUNT authentication_providers [SAML] permission_type SERVICE_MANAGED role_arn aws_iam_role.example.arn } data aws_grafana_workspace example { workspace_id aws_grafana_workspace.example.id } output grafana_endpoint { value data.aws_grafana_workspace.example.endpoint }Argument Reference支持的参数该数据源仅接受两个参数参数必填说明workspace_id是Grafana 工作区 ID形如g-2054c75a02。源码 workspace_data_source.go 中该字段定义为Required: true是唯一的必填参数region否工作区所在区域默认使用 provider 配置中设置的区域。这意味着你可以通过显式指定region查询其他区域的工作区且该数据源支持provider多区域实例或alias别名 的场景从源码结构看数据源通过ReadWithoutTimeout: dataSourceWorkspaceRead声明读取回调整个读取过程无超时上限WithoutTimeout语义内部依赖 AWS SDK for Go v2 的 Grafana 客户端。Attribute Reference全部导出属性详解数据源除参数外导出以下属性源码中均定义为Computed: true由 AWS 侧返回后写入 Terraform 状态属性类型说明account_access_typestring工作区的账户访问类型取值为CURRENT_ACCOUNT或ORGANIZATION若为ORGANIZATION则organizational_units必然同时存在authentication_providerslist(string)工作区的认证提供方取值为AWS_SSO、SAML或两者兼有arnstringGrafana 工作区的 ARNcreated_datestring工作区创建时间data_sourceslist(string)工作区已启用的数据源descriptionstring工作区描述endpointstringGrafana 工作区的访问端点URLgrafana_versionstring工作区上运行的 Grafana 版本kms_key_idstring用于加密工作区数据的 AWS KMS 密钥 ID 或 ARNlast_updated_datestring工作区最近更新时间namestringGrafana 工作区名称notification_destinationslist(string)通知目的地organization_role_namestring工作区通过 Amazon Organizations 访问资源时使用的角色名称organizational_unitslist(string)工作区被授权使用其数据源的 Organizations 组织单元OUpermission_typestring工作区权限类型role_arnstring工作区代入assume的 IAM 角色 ARNstack_set_namestring为工作区预置 IAM 角色的 AWS CloudFormation 栈集名称statusstring工作区状态tagsmap(string)分配给资源的标签补充属性saml_configuration_status对照源码 workspace_data_source.go数据源实际上还会导出文档列表中未单独列出的saml_configuration_status属性返回工作区 SAML 配置状态例如CONFIGURED/NOT_CONFIGURED。如果你需要判断工作区是否已完成 SAML 配置可以直接读取该属性。这也印证了数据源导出的属性集合与 AWSDescribeWorkspaceAPI 返回的WorkspaceDescription结构一一对应。底层原理读取流程与 ARN 生成数据源的核心读取逻辑位于dataSourceWorkspaceRead()workspace_data_source.go其调用链如下获取客户端meta.(*conns.AWSClient).GrafanaClient(ctx)取得 Grafana 服务客户端查询工作区调用findWorkspaceByID(ctx, conn, workspaceID)该函数定义在 workspace.go封装 AWS SDK for Go v2 的DescribeWorkspaceAPI入参仅含WorkspaceId错误处理findWorkspaceworkspace.go会将ResourceNotFoundException转换为retry.NotFoundError其余错误原样返回数据源层统一包装为reading Grafana Workspace (%s)的诊断信息设置状态d.SetId(workspaceID)以工作区 ID 作为数据源 ID然后将 API 返回的每个字段写入 ResourceDataARN 计算arn并非 API 直接返回而是由工具函数workspaceARN()workspace.go按RegionalARN(grafana, /workspaces/id)拼接生成与 IAM 服务授权参考文档中 Amazon Managed Grafana 的资源 ARN 格式一致时间格式created_date与last_updated_date通过workspace.Created.Format(time.RFC3339)/workspace.Modified.Format(time.RFC3339)输出为 RFC3339 标准时间字符串便于 Terraform 与其他系统交互标签注入末尾调用setTagsOut(ctx, workspace.Tags)定义于 tags_gen.go将 AWS 返回的标签写入上下文最终体现在数据源的tags属性中。测试验证数据源如何被验证仓库为该数据源提供了专门的验收测试testAccWorkspaceDataSource_basicworkspace_data_source_test.go。该测试先创建一个带 SAML 认证的aws_grafana_workspace.test资源再通过data aws_grafana_workspace test读取并使用resource.TestCheckResourceAttrPair逐一比对资源与数据源导出的account_access_type、arn、endpoint、grafana_version、permission_type、stack_set_name等属性的一致性同时对created_date、last_updated_date、status使用TestCheckResourceAttrSet验证非空。测试中数据源的配置方式workspace_data_source_test.go是标准的资源-数据源联动写法可直接借鉴到自己的配置中data aws_grafana_workspace test { workspace_id aws_grafana_workspace.test.id }测试还调用了acctest.PreCheckPartitionHasService(t, names.GrafanaEndpointID)做分区服务预检说明该数据源仅在提供 Amazon Managed Grafana 的分区当前为商业分区与 GovCloud可用。实战建议与注意事项优先从资源联动而非硬编码 ID把workspace_id直接引用自aws_grafana_workspace资源可避免 ID 变更导致的状态漂移这与官方测试的模式一致多区域查询借助region参数与 provider 的alias可以在单个配置文件中跨区域读取不同工作区的元数据状态判断status属性可用于编写depends_on或条件表达式确保工作区处于ACTIVE后再创建依赖资源标签引用tags属性便于把工作区标签传递给下游资源例如将team标签同步到告警、日志或计费分组相关资源如需管理工作区的附属能力仓库还提供aws_grafana_workspace_saml_configuration、aws_grafana_workspace_api_key、aws_grafana_workspace_service_account、aws_grafana_workspace_service_account_token、aws_grafana_role_association、aws_grafana_license_association等资源文档见 website/docs/r 目录它们常与aws_grafana_workspace资源搭配使用而本文的数据源则用于任何只读引用场景。参考文档与源码位置数据源官方文档website/docs/d/grafana_workspace.html.markdown数据源实现internal/service/grafana/workspace_data_source.go底层资源实现与 API 封装internal/service/grafana/workspace.go数据源验收测试internal/service/grafana/workspace_data_source_test.go标签实现internal/service/grafana/tags_gen.go资源官方文档配套website/docs/r/grafana_workspace.html.markdown【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表