2022-10-14 11:15:49 -07:00

166 lines
4.5 KiB
HCL

resource "random_pet" "rg_name" {
prefix = var.resource_group_name_prefix
}
resource "azurerm_resource_group" "rg" {
location = var.resource_group_location
name = random_pet.rg_name.id
}
# Create storage account & container
resource "random_string" "sa_name" {
length = 12
special = false
upper = false
}
resource "azurerm_storage_account" "sa" {
name = random_string.sa_name.id
resource_group_name = azurerm_resource_group.rg.name
location = azurerm_resource_group.rg.location
account_tier = "Standard"
account_replication_type = "LRS"
}
resource "azurerm_storage_container" "my_terraform_container" {
name = "mycontainer"
storage_account_name = azurerm_storage_account.sa.name
container_access_type = "private"
}
# Create an Event Hub & Authorization Rule
resource "random_pet" "eventhub_namespace_name" {
prefix = var.eventhub_namespace_name_prefix
}
resource "azurerm_eventhub_namespace" "namespace" {
name = random_pet.eventhub_namespace_name.id
resource_group_name = azurerm_resource_group.rg.name
location = azurerm_resource_group.rg.location
sku = "Basic"
}
resource "azurerm_eventhub" "my_terraform_eventhub" {
name = "myEventHub"
resource_group_name = azurerm_resource_group.rg.name
namespace_name = azurerm_eventhub_namespace.namespace.name
partition_count = 2
message_retention = 1
}
resource "azurerm_eventhub_authorization_rule" "my_terraform_authorization_rule" {
resource_group_name = azurerm_resource_group.rg.name
namespace_name = azurerm_eventhub_namespace.namespace.name
eventhub_name = azurerm_eventhub.my_terraform_eventhub.name
name = "acctest"
send = true
}
# Create an IoT Hub
resource "random_pet" "iothub_name" {
prefix = var.iothub_name_prefix
length = 1
}
resource "azurerm_iothub" "iothub" {
name = random_pet.iothub_name.id
resource_group_name = azurerm_resource_group.rg.name
location = azurerm_resource_group.rg.location
sku {
name = "S1"
capacity = 1
}
endpoint {
type = "AzureIotHub.StorageContainer"
connection_string = azurerm_storage_account.sa.primary_blob_connection_string
name = "export"
batch_frequency_in_seconds = 60
max_chunk_size_in_bytes = 10485760
container_name = azurerm_storage_container.my_terraform_container.name
encoding = "Avro"
file_name_format = "{iothub}/{partition}_{YYYY}_{MM}_{DD}_{HH}_{mm}"
}
endpoint {
type = "AzureIotHub.EventHub"
connection_string = azurerm_eventhub_authorization_rule.my_terraform_authorization_rule.primary_connection_string
name = "export2"
}
route {
name = "export"
source = "DeviceMessages"
condition = "true"
endpoint_names = ["export"]
enabled = true
}
route {
name = "export2"
source = "DeviceMessages"
condition = "true"
endpoint_names = ["export2"]
enabled = true
}
enrichment {
key = "tenant"
value = "$twin.tags.Tenant"
endpoint_names = ["export", "export2"]
}
cloud_to_device {
max_delivery_count = 30
default_ttl = "PT1H"
feedback {
time_to_live = "PT1H10M"
max_delivery_count = 15
lock_duration = "PT30S"
}
}
tags = {
purpose = "testing"
}
}
#Create IoT Hub Access Policy
resource "azurerm_iothub_shared_access_policy" "hub_access_policy" {
name = "terraform-policy"
resource_group_name = azurerm_resource_group.rg.name
iothub_name = azurerm_iothub.iothub.name
registry_read = true
registry_write = true
service_connect = true
}
# Create IoT Hub DPS
resource "random_pet" "dps_name" {
prefix = var.dps_name_prefix
length = 1
}
resource "azurerm_iothub_dps" "dps" {
name = random_pet.dps_name.id
resource_group_name = azurerm_resource_group.rg.name
location = azurerm_resource_group.rg.location
allocation_policy = "Hashed"
sku {
name = "S1"
capacity = 1
}
linked_hub {
connection_string = azurerm_iothub_shared_access_policy.hub_access_policy.primary_connection_string
location = azurerm_resource_group.rg.location
allocation_weight = 150
apply_allocation_policy = true
}
}