Развертывание нескольких лямбда-функций с помощью terraform - PullRequest
0 голосов
/ 09 ноября 2018

Не отмечайте это как дубликат из-за этого SO Ответ

У меня есть ресурс "aws_lambda_function", и он отлично работает.

Теперь я хочу развернуть другую лямбда-функцию, я попытался скопировать весь блок с другим обработчиком и псевдонимом, но он выдает ошибку. Есть ли другой способ сделать это.

Заранее спасибо.

Обновление

Вот код терраформы:

resource "aws_lambda_function" "api_service" {
  function_name = "${substr("${local.api_artifact_name}", 0, min(64, length(local.api_artifact_name)))}"

  # Artifacts bucket
  s3_bucket = "${local.artifacts_bucket_name}"
  s3_key    = "${module.artifact-upload.artifact_key}"

  # "index" is the filename within the zip file (main.js) and "handler"
  # is the name of the property under which the handler function was
  # exported in that file.
  handler = "index.api"

  runtime = "nodejs8.10"
  role    = "${module.api-service-iam.iam_role_arn}"

  # Optional, but ensures that things don't constantly refresh during local development
  source_code_hash = "${base64sha256(file("${local.api_dist_dir}"))}"

  environment {
    variables  =  {
      ...
    }
  }
}

Теперь ресурс api_service успешно развертывает одну лямбда-функцию, но как я могу развернуть, скажем, 5 таких функций?

All these Lambda functions will be invoked by an API Gateway later.

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Так что, в основном, ответ все время смотрел прямо в мое лицо.

Я скопировал весь блок ресурсов и внес следующие изменения:

resource "aws_lambda_function" "lambda-1" {
  function_name = "lambda-1-${substr("${local.api_artifact_name}", 0, min(64, length(local.api_artifact_name)))}"

  # Artifacts bucket
  s3_bucket = "${local.artifacts_bucket_name}"
  s3_key    = "${module.artifact-upload.artifact_key}"

  # "index" is the filename within the zip file (main.js) and "handler"
  # is the name of the property under which the handler function was
  # exported in that file.
  handler = "lambda-1/index.api"

  runtime = "nodejs8.10"
  role    = "${module.api-service-iam.iam_role_arn}"

  # Optional, but ensures that things don't constantly refresh during local development
  source_code_hash = "${base64sha256(file("${local.api_dist_dir}"))}"

}

resource "aws_lambda_function" "lambda-2" {
  function_name = "lambda-2-${substr("${local.api_artifact_name}", 0, min(64, length(local.api_artifact_name)))}"

  # Artifacts bucket
  s3_bucket = "${local.artifacts_bucket_name}"
  s3_key    = "${module.artifact-upload.artifact_key}"

  # "index" is the filename within the zip file (main.js) and "handler"
  # is the name of the property under which the handler function was
  # exported in that file.
  handler = "lambda-2/index.api"

  runtime = "nodejs8.10"
  role    = "${module.api-service-iam.iam_role_arn}"

  # Optional, but ensures that things don't constantly refresh during local development
  source_code_hash = "${base64sha256(file("${local.api_dist_dir}"))}"

}

Убедитесь, что у них разные имена функций

0 голосов
/ 12 декабря 2018

Я в основном создаю один каталог на лямбду, с соглашением об именовании для таких артефактов, как policy.json, ssm_parameters.json.

1) Я использую внешний источник данных, чтобы получить список лямбда-функций в каталоге и получить все метаданные, необходимые для каждой лямбды 2) Я использую count = "N" для развертывания каждого лямбда-ресурса.

...