如何让Terraform仅生成一次UUID并存储,用于AzureAD应用角色?
问题:Terraform AzureAD v3.0.1中实现App Role的UUID仅生成一次并持久化
背景说明
在Terraform AzureAD v3.0.1版本中,azuread_application_app_role资源的role_id字段为必填项,且不会自动生成,需由计划或模块自行生成该ID。
最初尝试通过random_uuid为每个角色生成UUID,并将结果赋值给role_id字段,配置代码如下:
resource "random_uuid" "admin_role" {} resource "random_uuid" "user_role" {} resource "azuread_application" "app" { display_name = var.app_name identifier_uris = [local.app_identifier_uri] } ... resource "azuread_application_app_role" "admin_role" { role_id = random_uuid.admin_role.result application_id = azuread_application.app.id allowed_member_types = ["User"] description = "Admins can manage ${var.app_name}" display_name = "Admin-${var.app_name}" value = "Admin-${var.app_name}" } resource "azuread_application_app_role" "user_role" { role_id = random_uuid.user_role.result application_id = azuread_application.app.id allowed_member_types = ["User"] description = "User of ${var.app_name} application" display_name = "User-${var.app_name}" value = "User-${var.app_name}" }
遇到的问题
已配置远程状态存储,但每次执行init、plan、apply时都会生成新的UUID,导致每次计划都出现状态漂移,需要UUID仅生成一次并存储以供后续使用。
曾尝试使用null_resource解决,但未成功,配置如下:
resource "random_uuid" "example_administrator" {} resource "null_resource" "initialize_uuid" { triggers = { uuid = random_uuid.example_administrator.id } } resource "azuread_application_app_role" "example" { role_id = null_resource.initialize_uuid.triggers["uuid"] ... }
还未测试time方案,配置示例如下:
provider "time" {} resource "time_static" "admin_role" { triggers = { # Any attribute here will generate the UUID only once role = "admin" } } resource "time_static" "user_role" { triggers = { # Any attribute here will generate the UUID only once role = "user" } }
需求
如何实现UUID仅生成一次并存储的需求?
内容的提问来源于stack exchange,提问作者Peter Kahn
相关产品推荐
相关产品推荐

