jsonamazon-web-servicesterraformterraform-provider-awsjsonencoder

"jsonencode" expects only 1 argument(s)


I am trying to terraform an AWS role. I followed this example where they had only attached one json policy:

resource "aws_iam_policy" "policy" {
  name        = "test_policy"
  path        = "/"
  description = "My test policy"

  # Terraform's "jsonencode" function converts a
  # Terraform expression result to valid JSON syntax.
  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Action = [
          "ec2:Describe*",
        ]
        Effect   = "Allow"
        Resource = "*"
      },
    ]
  })
}

However, I want to attach two policies. I tried this with a comma in between the two:

resource "aws_iam_role" "name" {
  name = "name"

  assume_role_policy = jsonencode(

    {
      "Version" : "2012-10-17",
      "Statement" : [
        {
          "Effect" : "Allow",
          "Action" : [
            "s3:*",
            "s3-object-lambda:*"
          ],
          "Resource" : "*"
        }
      ]
    },
    {
      "Version" : "2012-10-17",
      "Statement" : [
        {
          "Effect" : "Allow",
          "Action" : [
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:PutLogEvents"
          ],
          "Resource" : "*"
        }
      ]
    }

  )

However, this gives an error that:

Function "jsonencode" expects only 1 argument(s).

How else can I attach more than one policy?


Solution

  • It is because your policies are in wrong json format. You need to wrap the two policies in an array as follows.

    resource "aws_iam_role" "name" {
      name = "name"
    
      assume_role_policy = jsonencode(
        [
          {
            "Version" : "2012-10-17",
            "Statement" : [
              {
                "Effect" : "Allow",
                "Action" : [
                  "s3:*",
                  "s3-object-lambda:*"
                ],
                "Resource" : "*"
              }
            ]
          },
          {
            "Version" : "2012-10-17",
            "Statement" : [
              {
                "Effect" : "Allow",
                "Action" : [
                  "logs:CreateLogGroup",
                  "logs:CreateLogStream",
                  "logs:PutLogEvents"
                ],
                "Resource" : "*"
              }
            ]
          }
        ]
      )