yandex-cloud / terraform-provider-yandex

Terraform Yandex provider
https://www.terraform.io/docs/providers/yandex/
Mozilla Public License 2.0
199 stars 109 forks source link

Состояние триггера функции (enabled/paused) #424

Open max-arnold opened 4 months ago

max-arnold commented 4 months ago

Товарищи разработчики, а добавьте в Terraform провайдер возможность создавать yandex_function_trigger в приостановленном состоянии (paused).

Такой триггер удобно держать на DLQ и запускать вручную после разбора причин по которым в очередь что-то свалилось.

Для SQS так можно, см флаг enabled: https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lambda_event_source_mapping#enabled

Это распространенная практика https://theburningmonk.com/2024/01/how-would-you-reprocess-lambda-dead-letter-queue-messages-on-demand/

opportunity356 commented 3 months ago

@max-arnold спасибо за ваш issue. Обсудил с коллегами из Serverless. В данный момент API сервиса не поддерживает создание триггера в остановленном состоянии. Соответственно пока что нельзя поддержать подобный функционал в terraform.

Команда сервиса завела фича-реквест, но сроки реализации пока не известны.

max-arnold commented 2 months ago

Временно обошёл проблему так:

resource "yandex_function_trigger" "event_dl" {
  name = "event-dl"
  message_queue {
    queue_id           = yandex_message_queue.event_dl.arn
    service_account_id = var.yc_service_account_id
    batch_cutoff       = 0
    batch_size         = 10
    visibility_timeout = 120
  }
  function {
    id                 = module.function_event_task.function_id
    service_account_id = var.yc_service_account_id
  }
  provisioner "local-exec" {
    interpreter = ["/bin/bash", "-c"]
    command     = <<-EOT
yc --config <(jq '{profiles: {"dynamic": {"service-account-key": .}}}' yc-service-account-key.json) --profile dynamic --cloud-id ${var.yc_cloud_id} --folder-id ${var.yc_folder_id} serverless trigger pause --name ${self.name}
EOT
  }
}