SAM Flashcards
Как деплоить Лямбда функцию без SAM?
нам нужно писать большие сложные CloudFormation файлы
Как файл SAM шаблона связал с CloudFormation?
Какой другой сервис напоминает эта идея?
SAM позволяет определять инфраструктуру Serverless приложения, используя YAML
- Абстрагируемся от деталей реализации
CloudFormation
черезyaml
файл в проприетарном формате (шаблон). - Этот
template.yaml
файл трансформируется в обычный CloudFormation файл.
Эта идея напоминает Elastic Beanstalk
Только Elastic Beanstalk позволяет создавать типовые микросервисные приложения, а НЕ безсерверные.
Какие ресурсы можно объявить в SAM шаблоне?
Lambda, API Gateway, DynamoDB, IAM Roles через Policy Templates
Главные составляющие SAM Template файла - какие?
Каков их синтаксис?
- Заголовок = Свойство в корне проекта Transform: ‘AWS::Serverless-2016-10-31’
- Секция Resources
Синтаксис секции Resources в SAM template файле
практически совпадает с синтаксисом этой секции в CloudFormation template файле.
Но в отличие от CloudFormation шаблона, SAM поддерживает
более выразительные (удобные короткие) конструкции,
в основном - Policy Template’ы.
Какие Type могут иметь ресурсы SAM файла?
каждого ресурса есть Type
, например
-
AWS::Serverless::Function
- код, объявляющий Лямбда функцию -
AWS::Serverless::Api
- код, объявляющий API Gateway -
AWS::Serverless::SimpleTable
- код, объявляющий DynamoDB таблицу
Где должен находиться SAM template файл?
Что это напоминает?
SAM template.yaml файл помещается в репозиторий с кодом приложения.
подобно buildspec.yaml (для CodeBuild),
пододно appspec.yaml (для CodeDeploy),
подобно .ebextension/ (для ElasticBeanstalk)
Как объявить API Gateway в SAM файле?
Какие именно ресурсы создаст CloudFormation?
На самом деле в SAM template файле (и в CloudFormation template файле тоже)
API Gateway НЕ объявляется как отдельный ресурс с типом AWS::Serverless::Api
Вместо этого в секции объявления Лямбда функции выделяется поле Events
, в котором описываются endpoint’ы.
AWS создаст НЕ только Лямбда функцию, но и
API Gateway компоненты Stage + Deployment + RestApi
При объявлении DynamoDB таблицы, что ещё следует указать в SAM файле?
Какой будет синтаксис?
Что конкретно создаст AWS?
Как это называется?
Можно указать в SAM template файле создание DynamoDB таблицы (через ресурс с типом AWS::Serverless::SimpleTable
).
Тогда имеет смысл также указать в объявлении Лямбды атрибут Policies
, а в нём - значение DynamoDBCrudPolicy
В результате для Лямбды автоматически будет сгенерирована IAM Role, содержащая все нужные стандартные policies для работы с DynamoDB (GetItem, Scan, etc)
Policy Templates
Какие CLI команды есть в SAM CLI?
Каковы их псевнодонимы?
Что они делают? Чем отличаются?
Для деплоймента Лямбда функции нужно выполнить 2 команды (у каждой есть short)
sam build - трансформировать SAM template файл в CloudFormation template файл
(но ещё НЕ публиковать этот SAM template файл в S3 bucket).
sam package - трансформироват SAM template файл в CloudFormation template файл и опубликовать этот CF template файл в S3.
sam deploy - применить CloudFormation template файл в сервисе CloudFormation (создав Лямбда функцию).
Более длинные названия
- aws cloudformation package
- aws cloudformation deploy
Какие аргументы есть у aws cloudformation package?
- S3 bucket - в который отправится сгенерированный CloudFormation Template файл
- имя SAM template файла - например, template.yaml
- имя папки - в которую CLI положит сгенерированный CloudFormation Template файл
Какие аргументы есть у aws cloudformation deploy?
- путь до CloudFormation template файла - например, в S3
- имя CloudFormation Stack’а
- capability: CAPABILITY_IAM - сгенерировать IAM роль для Лямбда функции
Чтобы отлаживать Лямбда функцию локально, нужны
- SAM CLI
- AWS Toolkit (plugin для любой IDE)
Что такое Policy Template в SAM?
- В CloudFormation template файле нужно
- отдельно объявлять IAM Policies, перечислять каждую из них поименно
- отдельно объявлять IAM Role
- прикреплять одно к другому
- а их вместе - прикреплять непосредственно к ресурсу
- В SAM template файле можно
- просто указать готовый preset (например, доступ к SQS очереди)
- в секции
Policies
ресурса с типомAWS::Serverless::Function
Какие самые известные Policy Template’ы?
S3ReadPolicy
DynamoDBCrudPolicy
SQSPollerPolicy
Деплоить SAM лямбда функции можно … способами …, при этом используется …
двумя
- через CLI руками
- через Ci/CD
В обоих случаях SAM использует CodeDeploy