Эффективное развертывание лямбд (разворачивайте только те, которые изменились) с помощью Terraform / CloudFormation / Something else - PullRequest
0 голосов
/ 13 декабря 2018

До сих пор я использовал CloudFormation для развертывания своих лямбд.Я считаю этот процесс очень медленным и неэффективным, например.это может занять несколько минут, но это займет всего несколько секунд, если развернуть эту функцию 1?Большинство функций не изменились бы, но я считаю, что CloudFormation не делает различий и все равно развернет.Есть ли способ, которым я могу сделать это более эффективно?Как проверить, что изменилось и только развернуть изменения?

Еще одно преимущество - возможно, у меня может быть меньше версий?

Ответы [ 4 ]

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

try https://serverless.com. Легко для развертывания лямбда-функций, а также вы можете создавать другие ресурсы, такие как корзина DynamodB или S3, с несколькими строками.

1) Создать безсерверный проект.

serverless create --template aws-nodejs --path my-service

2) запишите вашу функцию login в файле handler.js и разверните.

serverless deploy 

3) вы можете создать несколько функций в одном сервисе.Кроме того, у вас есть возможность развернуть только одну функцию.

serverless deploy // for all the functions in one service
serverless deploy function -f functionName //deploy function with name 'functionName'

Вы также можете просматривать журналы с терминала, безсерверная структура также имеет поддержку плагинов, например, вы можете написать свой исходный код в машинописном тексте и безсерверный плагин для машинописного текста.все остальное сделаю сам.Я уже давно пользуюсь сервером, и это лучшее решение, которое я нашел для непрерывной интеграции.Стоит попробовать.

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

Я использую aws cli в конвейере gitlab для развертывания и обновления моих лямбд при фиксации.

Я архивирую содержимое.Загрузите его на S3 и запустите обновление функции с новым артефактом на S3.

Это намного быстрее, чем запуск шаблона Cloud Formation:

# Filename
FILENAME="${ARTIFACT_ID}-${version}-$BUILD_NUMBER.zip"
zip -r -D $FILENAME ./*
# Copy the bundle to s3
aws s3 cp $FILENAME "s3://$S3_BUCKET/$FILENAME"
# Trigger update of lambda function
aws lambda update-function-code --function-name $LAMBDA_FUNCTION_NAME --s3-bucket $S3_BUCKET --s3-key $FILENAME

Надеюсь, это поможет.

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

Я создал этот модуль Terraform для решения именно этой проблемы.Даже установки source_code_hash недостаточно, поскольку при создании zip-файлов они обычно включают некоторые метаданные файловой системы.С моим модулем хеш должен быть стабильным (меняется только при изменении источника).Модуль специфичен для Python, но стабильность хэша может быть применена к любой среде выполнения.

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

Вы можете использовать source_code_hash ресурса aws_lambda_function, чтобы Terraform проверил, изменилась ли функция Lambda.Если ничего не изменилось, новая версия не будет загружена, и в вашем плане не будет внесено никаких изменений.

Это указано в качестве примера в документации :

resource "aws_lambda_function" "test_lambda" {
  filename         = "lambda_function_payload.zip"
  function_name    = "lambda_function_name"
  role             = "${aws_iam_role.iam_for_lambda.arn}"
  handler          = "exports.test"
  source_code_hash = "${base64sha256(file("lambda_function_payload.zip"))}"
  runtime          = "nodejs8.10"

  environment {
    variables = {
      foo = "bar"
    }
  }
}
...