Resource: aws_iot_provisioning_template

Manages an IoT fleet provisioning template. For more info, see the AWS documentation on fleet provisioning.

Example Usage

data "aws_iam_policy_document" "iot_assume_role_policy" {
  statement {
    actions = ["sts:AssumeRole"]

    principals {
      type        = "Service"
      identifiers = ["iot.amazonaws.com"]
    }
  }
}

resource "aws_iam_role" "iot_fleet_provisioning" {
  name               = "IoTProvisioningServiceRole"
  path               = "/service-role/"
  assume_role_policy = data.aws_iam_policy_document.iot_assume_role_policy.json
}

resource "aws_iam_role_policy_attachment" "iot_fleet_provisioning_registration" {
  role       = aws_iam_role.iot_fleet_provisioning.name
  policy_arn = "arn:aws:iam::aws:policy/service-role/AWSIoTThingsRegistration"
}

data "aws_iam_policy_document" "device_policy" {
  statement {
    actions   = ["iot:Subscribe"]
    resources = ["*"]
  }
}

resource "aws_iot_policy" "device_policy" {
  name   = "DevicePolicy"
  policy = data.aws_iam_policy_document.device_policy.json
}

resource "aws_iot_provisioning_template" "fleet" {
  name                  = "FleetTemplate"
  description           = "My provisioning template"
  provisioning_role_arn = aws_iam_role.iot_fleet_provisioning.arn
  enabled               = true

  template_body = jsonencode({
    Parameters = {
      SerialNumber = { Type = "String" }
    }

    Resources = {
      certificate = {
        Properties = {
          CertificateId = { Ref = "AWS::IoT::Certificate::Id" }
          Status        = "Active"
        }
        Type = "AWS::IoT::Certificate"
      }

      policy = {
        Properties = {
          PolicyName = aws_iot_policy.device_policy.name
        }
        Type = "AWS::IoT::Policy"
      }
    }
  })
}

Argument Reference

This resource supports the following arguments:

pre_provisioning_hook

The pre_provisioning_hook configuration block supports the following:

Attribute Reference

This resource exports the following attributes in addition to the arguments above:

Import

In Terraform v1.5.0 and later, use an import block to import IoT fleet provisioning templates using the name. For example:

import {
  to = aws_iot_provisioning_template.fleet
  id = "FleetProvisioningTemplate"
}

Using terraform import, import IoT fleet provisioning templates using the name. For example:

% terraform import aws_iot_provisioning_template.fleet FleetProvisioningTemplate