Amazon DVA-C02: Бессерверные вычисления и AWS Lambda — Руководство по подготовке
Часть AWS Developer Associate DVA-C02 — Руководство по подготовке. Практикуйтесь с проверенными ответами в центре экзаменов Amazon, или пройдите тесты на время на ExamRoll.io.
Версии, псевдонимы, слои и пакетирование
Версии Lambda — это неизменяемые снимки (snapshots) кода и конфигурации, создаваемые с помощью API PublishVersion (например, boto3.client(’lambda’).publish_version(FunctionName=‘MyFunc’)). Используйте версии для создания воспроизводимых релизов, а затем создавайте псевдонимы (aliases) (с помощью boto3.client(’lambda’).create_alias или update_alias) как стабильные указатели, которые также могут содержать конфигурацию маршрутизации для распределения трафика между версиями при постепенном развертывании. Слои (layers) предоставляют способ совместного использования общих нативных библиотек или пакетов среды выполнения; publish_layer_version позволяет подключать зависимости (например, скомпилированные бинарные файлы) отдельно от пакета функции, что уменьшает размер сборок и ускоряет холодные старты. Для пакетирования предпочитайте небольшие zip-архивы для быстрых развертываний (или загрузку через S3 для крупных артефактов) и используйте контейнерные образы, когда вам нужны значительные по размеру бинарные файлы или кастомные среды выполнения; команда docker build + aws lambda create-function –package-type Image зарегистрирует образы, хранящиеся в ECR (контейнерные образы поддерживают гораздо большие размеры). Распространенные ошибки включают встраивание учетных данных в переменные окружения, превышение лимитов на размер пакета развертывания и забывчивость о том, что слои версионируются и неизменяемы: обновляйте зависимости, публикуя новую версию слоя и обновляя конфигурацию функции. Для программных откатов обновите псевдоним, чтобы он указывал на предыдущую версию (boto3.client(’lambda’).update_alias(FunctionName=‘MyFunc’, Name=‘prod’, FunctionVersion=‘3’)), чтобы минимизировать влияние на операционную деятельность.
Среда выполнения, настройка производительности и смягчение холодных стартов
Производительность CPU в Lambda масштабируется вместе с памятью, поэтому улучшение нагрузок, ограниченных производительностью CPU, обычно достигается увеличением параметра MemorySize (через UpdateFunctionConfiguration), а не изменением отдельного параметра CPU. Измеряйте показатели с помощью AWS X-Ray и метрик CloudWatch, чтобы найти оптимальное соотношение между длительностью выполнения и стоимостью. На холодные старты влияют размер пакета, код инициализации, использование сети VPC (задержка подключения ENI) и среда выполнения языка. Смягчить их можно, сократив код инициализации, переместив тяжелые библиотеки в слои, используя Provisioned Concurrency (put_provisioned_concurrency_config) или применяя контейнерные образы с оптимизированными точками входа (entrypoints). Для функций, подключенных к VPC, избегайте всплесков задержек при холодных стартах, используя VPC-эндпоинты для S3/DynamoDB или RDS Proxy для ограничения постоянного пересоздания соединений и затрат на NAT Gateway. Убедитесь, что роль выполнения Lambda включает управляемую политику AWSLambdaVPCAccessExecutionRole и что в подсетях достаточно IP-адресов для ENI. Остерегайтесь таких ловушек, как синхронные тайм-ауты: устанавливайте тайм-аут функции меньше, чем у зависимых сервисов, чтобы внешние вызывающие системы получали согласованную модель обработки сбоев, и используйте токены идемпотентности для повторных попыток, поскольку сервисы, такие как SQS, SNS и Kinesis, обеспечивают семантику доставки «как минимум один раз» (at-least-once).
Доступ к VPC, эфемерное хранилище и средства контроля безопасности
Когда вы размещаете Lambda-функцию в VPC, необходимо настроить идентификаторы подсетей (subnet IDs) и группы безопасности (security groups) в конфигурации функции. После этого функция использует ENI в этих подсетях и нуждается в сетевых путях к внешним сервисам. Чтобы получить доступ к S3 или DynamoDB без NAT, создайте VPC-эндпоинты (типа Gateway для S3, типа Interface для многих других сервисов). Для баз данных предпочитайте использовать RDS Proxy для создания пула соединений и сокращения пикового создания новых подключений. Каталог /tmp предоставляет эфемерное хранилище для среды выполнения и доступен для записи во время вызова; при необходимости настройте больший объем эфемерного хранилища (параметр EphemeralStorage), но по возможности проектируйте функции без состояния (stateless). Защищайте секреты, храня их в AWS Secrets Manager или Parameter Store (SSM) и предоставляя роли Lambda минимальные необходимые привилегии (least privilege). Получайте секреты во время холодного старта с помощью boto3.client(‘secretsmanager’).get_secret_value(SecretId=arn) или используйте переменные окружения, зашифрованные с помощью ключа KMS, указанного в параметре KMSKeyArn функции. Распространенные ошибки разработчиков включают отсутствие VPC-эндпоинтов, что приводит к тайм-аутам, встраивание ключей в открытом виде в код и неэффективную ротацию или кэширование секретов, что приводит к троттлингу (регулированию) вызовов API Secrets Manager.
Интеграция с источниками событий, обработка ошибок, локальное тестирование и стратегии развертывания
Lambda нативно интегрируется со многими источниками событий: уведомлениями S3, DynamoDB Streams, Kinesis, SQS и API Gateway. Для потоковых источников настраивайте размер пакета (batch size) и parallelizationFactor, отслеживайте IteratorAge и обрабатывайте частичные сбои, поскольку Lambda будет повторять обработку неудавшихся пакетов и может блокировать последующую обработку при постоянных ошибках. Для асинхронных вызовов используйте очереди недоставленных сообщений (DLQ) или Destinations для перехвата сбоев (настройте асинхронный вызов с назначениями onFailure/onSuccess). Функции, запускаемые по триггеру S3, должны быть защищены от рекурсивных вызовов при обратной записи в тот же бакет путем проверки ключей объектов или использования тегов объектов. Локальное тестирование лучше всего проводить с помощью AWS SAM CLI (sam build; sam local invoke; sam local start-api) или контейнеризированных сред выполнения Lambda; в модульных тестах можно использовать moto или локальные моки, но интеграционные тесты следует запускать на реальных ресурсах AWS во временных тестовых аккаунтах. При развертывании следует использовать версионированные функции и псевдонимы (aliases) со смещением трафика через CodeDeploy или UpdateAlias с RoutingConfig для выполнения канареечных или линейных развертываний; для верификации реализуйте хуки PreTraffic и PostTraffic. Типичные ловушки — это игнорирование идемпотентности при повторных попытках, необработка частичных ответов BatchGetItem (проверяйте UnprocessedKeys) и использование слишком широких IAM-ролей для выполнения.
Практическая задача: Сценарий использования
Сценарий: Компания PhotoSpot Inc использует Lambda-функцию на Python, которая обрабатывает изображения, загруженные в S3, записывает метаданные в DynamoDB и вызывает сторонний API для оптимизации изображений. Функции требуется высокая производительность при холодном старте, безопасное хранение учетных данных API, возможность безопасного отката и доступ к RDS Proxy в VPC для обогащения метаданных.
Задача: Уменьшить задержку холодного старта для загрузок, видимых пользователям, защитить и ротировать ключ стороннего API, а также обеспечить безопасные откаты без простоя и контролируемое смещение трафика.
Рекомендуемый подход:
- Создавайте и публикуйте неизменяемые (immutable) релизы: используйте AWS CLI или boto3 для обновления кода, затем публикуйте версию с помощью
undefined
и создавайте/обновляйте псевдоним (alias) с помощью
undefined
. 2. Смягчайте холодные старты: настройте Provisioned Concurrency для псевдонима с помощью
undefined
и переместите тяжелые нативные библиотеки в опубликованный слой (
undefined
). 3. Защищайте учетные данные: храните ключ стороннего API в AWS Secrets Manager, предоставьте IAM-роли Lambda минимально необходимые привилегии и получайте ключ при холодном старте с помощью
undefined
вместо встраивания секретов в код или хранения в незашифрованных переменных окружения. 4. Работа с VPC и подключениями: разместите функцию в приватных подсетях с группами безопасности, используйте RDS Proxy для доступа к БД, чтобы избежать «шторма подключений», и создайте VPC endpoint для S3, чтобы чтение изображений не требовало NAT.
Обоснование: Использование версий и псевдонимов (aliases) со смещением трафика обеспечивает безопасное развертывание и немедленный откат путем перенаправления псевдонима. Provisioned Concurrency и слои уменьшают задержку инициализации, а Secrets Manager централизует ротацию учетных данных и минимизирует риск их раскрытия. RDS Proxy и VPC endpoints снижают задержку и операционные затраты за счет уменьшения постоянного пересоздания подключений и зависимости от NAT.
Все домены · Amazon API Gateway и интеграция приложений →
Отработать эти вопросы → · Тесты на время на ExamRoll.io →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
Сдайте экзамен →