Ошибка создания уведомления aws_s3_ с помощью Terraform - PullRequest
0 голосов
/ 09 октября 2019

У меня сейчас проблема с созданием ресурса aws_s3_notification. Всякий раз, когда я пытаюсь развернуть этот ресурс, я получаю эту ошибку Error putting S3 notification configuration: InvalidArgument: Unable to validate the following destination configurations

Я пытался установить параметры depen_on и настроить разрешения. Одна интересная вещь в моем файле main.tf, я создаю две лямбда-функции. Оба очень похожи (просто различаются по коду). Моя конфигурация "контроллера" разворачивается без проблем, но моя функция "chunker", кажется, имеет проблему при создании s3_notification .. Я включил обе конфигурации для сравнения.

#S3
resource "aws_s3_bucket" "ancb" {
  for_each = toset(var.ancb_bucket)

  bucket = format("ancb-%s-%s-%s",var.env,var.product_name,each.value)
  acl = "private"

  versioning {
    enabled = true
  }

  tags = {
      Environment = var.env
      Terraform = true
  }
}
#Chunker
resource "aws_lambda_function" "ancb_chunker" {

  function_name = format("ancb-chunker-%s-%s",var.env,var.product_name)

  s3_bucket = aws_s3_bucket.ancb["config"].id
  s3_key = var.lambda_zip_chunker

  handler = "handler.chunk"
  runtime = "nodejs8.10"

  role = aws_iam_role.lambda_exec.arn

  environment {
      variables = {
          ORIGINAL_BUCKET = aws_s3_bucket.ancb["original"].id
          TO_PROCESS_BUCKET = aws_s3_bucket.ancb["to-process"].id
          ENVIRONMENT = var.env
          CHUNK_SIZE = 5000
      }
  }
  tags = {
      Environment = var.env
      Terraform = true
  }
  depends_on = [
    aws_s3_bucket_object.ancb["chunker.zip"],
    aws_s3_bucket.ancb["chunker"]
  ]
}
resource "aws_lambda_permission" "ancb_chunker_s3" {

  statement_id = "AllowExecutionFromS3Bucket-Chunker"
  action = "lambda:InvokeFunction"
  function_name = aws_lambda_function.ancb_controller.arn
  principal = "s3.amazonaws.com"
  source_arn = aws_s3_bucket.ancb["original"].arn
}
resource "aws_s3_bucket_notification" "chunker" {
  bucket = aws_s3_bucket.ancb["original"].id

  lambda_function {
    lambda_function_arn = aws_lambda_function.ancb_chunker.arn
    events = ["s3:ObjectCreated:*"]
  }
  depends_on = [
    aws_lambda_permission.ancb_chunker_s3,
    aws_lambda_function.ancb_chunker,
    aws_s3_bucket.ancb["original"]
  ]
}
#Controller
resource "aws_lambda_function" "ancb_controller" {

  function_name = format("ancb-controller-%s-%s",var.env,var.product_name)

  s3_bucket = aws_s3_bucket.ancb["config"].id
  s3_key = var.lambda_zip_controller

  handler = "handler.controller"
  runtime = "nodejs8.10"

  role = aws_iam_role.lambda_exec.arn

  environment {
      variables = {
          DESTINATION_BUCKET = aws_s3_bucket.ancb["destination"].id
          ENVIRONMENT = var.env
          ERROR_BUCKET = aws_s3_bucket.ancb["error"].id
          GEOCODIO_APIKEY = <insert>
          GEOCODIO_ENDPOINT = <insert>
          GEOCODIO_VERSION = <insert>
          ORIGINAL_BUCKET = aws_s3_bucket.ancb["original"].id
          SOURCE_BUCKET = aws_s3_bucket.ancb["source"].id
          TO_PROCESS_BUCKET = aws_s3_bucket.ancb["to-process"].id
          WORKING_BUCKET = aws_s3_bucket.ancb["working"].id
      }
  }
  tags = {
      Environment = var.env
      Terraform = true
  }
  depends_on = [
    aws_s3_bucket_object.ancb["controller.zip"]
  ]
}
resource "aws_lambda_permission" "ancb_controller_s3" {

  statement_id = "AllowExecutionFromS3Bucket-Controller"
  action = "lambda:InvokeFunction"
  function_name = aws_lambda_function.ancb_controller.arn
  principal = "s3.amazonaws.com"
  source_arn = aws_s3_bucket.ancb["source"].arn
}
resource "aws_s3_bucket_notification" "controller" {
  bucket = aws_s3_bucket.ancb["source"].id

  lambda_function {
    lambda_function_arn = aws_lambda_function.ancb_controller.arn
    events = ["s3:ObjectCreated:*"]
  }
  depends_on = [
    aws_lambda_permission.ancb_controller_s3,
    aws_s3_bucket.ancb["source"]
  ]
}

ОБНОВЛЕНИЕ: Если я вручную создаю триггери запустите terraform apply снова, terraform может двигаться вперед без проблем ....

...