![[Terraform] App Runnerを構築するときInvalidRequestException: Error in assuming access role が発生したときの対処法](https://devio2023-media.developers.io/wp-content/uploads/2019/05/terraform-eyecatch.png)
[Terraform] App Runnerを構築するときInvalidRequestException: Error in assuming access role が発生したときの対処法
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
どうも!オペレーション部の西村祐二です。
最近、TerraformでApp Runnerを構築する機会がありました。
そこで、ハマったことと対処法を備忘録兼ねてブログにしておきます。
環境
Terraform:v1.5.4
発生したエラー内容
TerraformでApplyを実行すると下記エラーが発生しました。ただ実装みても問題のある箇所が見当たらなかったので、再度実行すると正常に成功するという事象でした。
Error: error creating App Runner Service (xxxxxx): InvalidRequestException: Error in assuming access role arn:aws:iam::xxxxxxxx:role/xxxxxxx
ECRにアクセスしようとした際にエラーになっているようでした。
対処方法
App Runnerに設定するロール作成後に一定時間待つ処理を追加することでエラーを回避することができました。
調査すると同様の事象が別のツールではありますが、発生しているIssueがありました。回避策としてsleepを入れることで回避できるとのコメントがありTerraformでも同様にsleep処理を入れることで回避できました。
Error in assuming access role · Issue #2411 · pulumi/pulumi-aws
エラー回避例
エラーが発生しているRole作成後に10秒待つようにしています。
公式で提供されているTime Providerを利用して実現しています。
Docs overview | hashicorp/time | Terraform | Terraform Registry
# ------------------------------------------------------------------------------
# App Runner Access Role
# ------------------------------------------------------------------------------
resource "aws_iam_role" "apprunner_access" {
  name = "${var.env}-${var.app}-apprunner-access"
  assume_role_policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Principal": {
        "Service": [
          "build.apprunner.amazonaws.com"
        ]
      },
      "Effect": "Allow",
      "Sid": ""
    }
  ]
}
EOF
}
resource "aws_iam_role_policy_attachment" "apprunner_service_ecr" {
  role       = aws_iam_role.apprunner_access.name
  policy_arn = "arn:aws:iam::aws:policy/service-role/AWSAppRunnerServicePolicyForECRAccess"
}
# Apprunner作成時にInvalidRequestException: Error in assuming access role
# 発生しないように10秒待つ
resource "time_sleep" "wait_10_seconds" {
  create_duration = "10s"
  triggers = {
    apprunner_access_arn = aws_iam_role.apprunner_access.arn
  }
}
# ------------------------------------------------------------------------------
# App Runner Instance Role
# ------------------------------------------------------------------------------
resource "aws_iam_role" "apprunner_instance" {
  name = "${var.env}-${var.app}-apprunner-instance"
  assume_role_policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "tasks.apprunner.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
EOF
}
resource "aws_apprunner_service" "main" {
  service_name = "${var.env}-${var.app}"
  depends_on = [
    null_resource.push_image,
  ]
  source_configuration {
    authentication_configuration {
      access_role_arn = time_sleep.wait_10_seconds.triggers["apprunner_access_arn"]
    }
    image_repository {
      image_configuration {
        port = local.env.port
        runtime_environment_variables = {
          "SERVICE_NAME" = var.service
          "APP_NAME"     = var.app
          "Env"          = var.env
        }
      }
      image_identifier      = "${aws_ecr_repository.main.repository_url}:latest"
      image_repository_type = "ECR"
    }
    auto_deployments_enabled = true
  }
  instance_configuration {
    cpu               = local.env.cpu
    memory            = local.env.memory
    instance_role_arn = aws_iam_role.apprunner_instance.arn
  }
  auto_scaling_configuration_arn = aws_apprunner_auto_scaling_configuration_version.main.arn
}
resource "aws_apprunner_auto_scaling_configuration_version" "main" {
  auto_scaling_configuration_name = "${var.app}-autoscaling"
  max_concurrency = local.env.max_concurrency
  max_size        = local.env.max_size
  min_size        = local.env.min_size
}
さいごに
TerraformでApp Runnerを構築する際に遭遇したエラーとそれに対する対処法をまとめてみました。
誰かの参考になれば幸いです。







