1

I'm deploying an Amazon Connect instance with an attached contact flow, following this documentation: https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/connect_contact_flow

My contact flow is stored in a file, so I'm using the following:

resource "aws_connect_contact_flow" "general" {
    instance_id = aws_connect_instance.dev.id
    name        = "General"
    description = "General Flow routing customers to queues"
    filename     = "flows/contact_flow.json"
    content_hash = filebase64sha256("flows/contact_flow.json")
}

However my contact flow requires me to specify the ARN of an AWS Lambda function in one particular section:

...

"parameters":[
   {
          "name":"FunctionArn",
          "value":"<lambda function arn>",
          "namespace":null
    },
    {
          "name":"TimeLimit",
          "value":"3"
    }
],

</snip>

...

The value I would like to substitute into the JSON file at <lambda function arn> before the contact flow is created is accessible at

data.terraform_remote_state.remote.outputs.lambda_arn

Is there any way to achieve this? Or will I have to use the 'content = ' method in the documentation linked above to achieve what I need?

LW001
  • 2,452
  • 6
  • 27
  • 36

1 Answers1

3

If you really want to use filename instead of content, you have to write the rendered template to some temporary file using local_file.

But using content with templatefile directly for that would probably be easier. For that you would have to convert your flows/contact_flow.json into a template format:

"parameters":[
   {
          "name":"FunctionArn",
          "value":"$arn",
          "namespace":null
    },
    {
          "name":"TimeLimit",
          "value":"3"
    }
],

then, for example:

locals {

  contact_flow = templatefile("flows/contact_flow.json", {
                   arn = data.terraform_remote_state.remote.outputs.lambda_arn
                 })
}


resource "aws_connect_contact_flow" "general" {
    instance_id = aws_connect_instance.dev.id
    name        = "General"
    description = "General Flow routing customers to queues"
    content     = local.contact_flow
}
Marcin
  • 215,873
  • 14
  • 235
  • 294