選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

161 行
6.0 KiB

  1. terraform {
  2. required_version = "~> 0.12.21"
  3. required_providers {
  4. azurerm = "~> 1.44"
  5. }
  6. }
  7. resource "azurerm_storage_account" "azsa" {
  8. depends_on = [var.azsa_depends_on]
  9. for_each = var.sas
  10. name = each.key
  11. resource_group_name = each.value.resource_group_name
  12. location = each.value.location
  13. account_kind = try(each.value.kind, null)
  14. account_tier = try(each.value.tier, "Standard")
  15. account_replication_type = try(each.value.replication_type, "GRS")
  16. access_tier = try(each.value.access, null)
  17. enable_https_traffic_only = try(each.value.https_traffic, true)
  18. is_hns_enabled = try(each.value.hns, null)
  19. tags = try(each.value.tags, null)
  20. dynamic "custom_domain" {
  21. for_each = try(each.value.custom_domain, {})
  22. content {
  23. name = try(custom_domain.value.cname, null)
  24. use_subdomain = try(custom_domain.value.subdomain, null)
  25. }
  26. }
  27. identity {
  28. type = try(each.value.identity.type, "SystemAssigned")
  29. }
  30. blob_properties {
  31. /*dynamic "cors_rule" {
  32. for_each = try(each.value.blob_properties.cors_rule, {})
  33. content {
  34. allowed_headers = try(cors_rule.value.headers, [])
  35. allowed_methods = try(cors_rule.value.methods, [])
  36. allowed_origins = try(cors_rule.value.origins, [])
  37. exposed_headers = try(cors_rule.value.exposed, [])
  38. max_age_in_seconds = try(cors_rule.value.age, 30)
  39. }
  40. }*/
  41. delete_retention_policy {
  42. days = try(each.value.blob_properties.retention, 7)
  43. }
  44. }
  45. dynamic "queue_properties" {
  46. for_each = try(each.value.queue_properties, {})
  47. content {
  48. dynamic "cors_rule" {
  49. for_each = try(queue_properties.value.cors_rule, {})
  50. content {
  51. allowed_headers = try(cors_rule.value.headers, [])
  52. allowed_methods = try(cors_rule.value.methods, [])
  53. allowed_origins = try(cors_rule.value.origins, [])
  54. exposed_headers = try(cors_rule.value.exposed, [])
  55. max_age_in_seconds = try(cors_rule.value.age, 30)
  56. }
  57. }
  58. dynamic "logging" {
  59. for_each = try(queue_properties.value.logging, {})
  60. content {
  61. delete = try(logging.value.delete, true)
  62. read = try(logging.value.read, true)
  63. version = try(logging.value.version, "1.0")
  64. write = try(logging.value.write, true)
  65. retention_policy_days = try(logging.value.retention, null)
  66. }
  67. }
  68. dynamic "minute_metrics" {
  69. for_each = try(queue_properties.value.minutes, {})
  70. content {
  71. enabled = try(minute_metrics.value.enabled, true)
  72. version = try(minute_metrics.value.version, "1.0")
  73. include_apis = try(minute_metrics.value.include_api, null)
  74. retention_policy_days = try(minute_metrics.value.retention, null)
  75. }
  76. }
  77. dynamic "hour_metrics" {
  78. for_each = try(queue_properties.value.hours, {})
  79. content {
  80. enabled = try(hour_metrics.value.enabled, true)
  81. version = try(hour_metrics.value.version, "1.0")
  82. include_apis = try(hour_metrics.value.include_api, null)
  83. retention_policy_days = try(hour_metrics.value.retention, null)
  84. }
  85. }
  86. }
  87. }
  88. /*dynamic "stactic_website" {
  89. for_each = try(each.value.kind, "StorageV2") == "StorageV2" ? try(each.value.website, {}) : {}
  90. content {
  91. index_document = try(stactic_website.value.index, null)
  92. error_404_document = try(stactic_website.value.error, null)
  93. }
  94. }*/
  95. network_rules {
  96. default_action = try(each.value.network_rules.default, "Deny")
  97. bypass = try(each.value.network_rules.bypass, null) #Logging, Metrics, AzureServices, None
  98. ip_rules = try(each.value.network_rules.publicips, null)
  99. virtual_network_subnet_ids = try(each.value.network_rules.subnets, null)
  100. #virtual_network_subnet_ids = [ for subnet in try(each.value.network_rules.subnets, []) : data.azurerm_subnet.subnet[join("_", [subnet.name, subnet.vnet, subnet.resource_group])].id ]
  101. }
  102. }
  103. /*
  104. locals {
  105. # flatten ensures that this local value is a flat list of objects, rather
  106. # than a list of lists of objects.
  107. subnets = flatten([
  108. for sa in var.sas : [
  109. for subnet in try(sa.network_rules.subnets, []) : {
  110. key = join("_", [subnet.name, subnet.vnet, subnet.resource_group])
  111. name = subnet.name
  112. vnet = subnet.vnet
  113. resource_group = subnet.resource_group
  114. }
  115. ]
  116. ])
  117. }
  118. data "azurerm_subnet" "subnet" {
  119. for_each = {for subnet in local.subnets: subnet.key => subnet...}
  120. name = each.value.subnet.name
  121. virtual_network_name = each.value.subnet.vnet
  122. resource_group_name = each.value.sunnet.resource_group
  123. }
  124. */
  125. locals {
  126. # flatten ensures that this local value is a flat list of objects, rather
  127. # than a list of lists of objects.
  128. containers = flatten([
  129. for saname, sa in var.sas : [
  130. for container in try(sa.containers, []) : {
  131. name = container.name
  132. storage_account_name = saname
  133. container_access_type = try(container.access_type, null)
  134. metadata = try(container.metadata, null)
  135. }
  136. ]
  137. ])
  138. }
  139. resource "azurerm_storage_container" "azsc" {
  140. depends_on = [azurerm_storage_account.azsa]
  141. count = length(local.containers)
  142. name = local.containers[count.index].name
  143. storage_account_name = local.containers[count.index].storage_account_name
  144. container_access_type = try(local.containers[count.index].container_access_type, "private")
  145. metadata = try(local.containers[count.index].metadata, null)
  146. }