SAM Flashcards

1
Q

Как деплоить Лямбда функцию без SAM?

A

нам нужно писать большие сложные CloudFormation файлы

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Как файл SAM шаблона связал с CloudFormation?
Какой другой сервис напоминает эта идея?

A

SAM позволяет определять инфраструктуру Serverless приложения, используя YAML

  • Абстрагируемся от деталей реализации CloudFormation через yaml файл в проприетарном формате (шаблон).
  • Этот template.yaml файл трансформируется в обычный CloudFormation файл.

Эта идея напоминает Elastic Beanstalk
Только Elastic Beanstalk позволяет создавать типовые микросервисные приложения, а НЕ безсерверные.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Какие ресурсы можно объявить в SAM шаблоне?

A

Lambda, API Gateway, DynamoDB, IAM Roles через Policy Templates

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Главные составляющие SAM Template файла - какие?
Каков их синтаксис?

A
  • Заголовок = Свойство в корне проекта Transform: ‘AWS::Serverless-2016-10-31’
  • Секция Resources

Синтаксис секции Resources в SAM template файле
практически совпадает с синтаксисом этой секции в CloudFormation template файле.
Но в отличие от CloudFormation шаблона, SAM поддерживает
более выразительные (удобные короткие) конструкции,
в основном - Policy Template’ы.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Какие Type могут иметь ресурсы SAM файла?

A

каждого ресурса есть Type, например

  • AWS::Serverless::Function - код, объявляющий Лямбда функцию
  • AWS::Serverless::Api - код, объявляющий API Gateway
  • AWS::Serverless::SimpleTable - код, объявляющий DynamoDB таблицу
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Где должен находиться SAM template файл?
Что это напоминает?

A

SAM template.yaml файл помещается в репозиторий с кодом приложения.

подобно buildspec.yaml (для CodeBuild),
пододно appspec.yaml (для CodeDeploy),
подобно .ebextension/ (для ElasticBeanstalk)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Как объявить API Gateway в SAM файле?
Какие именно ресурсы создаст CloudFormation?

A

На самом деле в SAM template файле (и в CloudFormation template файле тоже)
API Gateway НЕ объявляется как отдельный ресурс с типом AWS::Serverless::Api

Вместо этого в секции объявления Лямбда функции выделяется поле Events , в котором описываются endpoint’ы.

AWS создаст НЕ только Лямбда функцию, но и
API Gateway компоненты Stage + Deployment + RestApi

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

При объявлении DynamoDB таблицы, что ещё следует указать в SAM файле?
Какой будет синтаксис?
Что конкретно создаст AWS?
Как это называется?

A

Можно указать в SAM template файле создание DynamoDB таблицы (через ресурс с типом AWS::Serverless::SimpleTable).

Тогда имеет смысл также указать в объявлении Лямбды атрибут Policies, а в нём - значение DynamoDBCrudPolicy

В результате для Лямбды автоматически будет сгенерирована IAM Role, содержащая все нужные стандартные policies для работы с DynamoDB (GetItem, Scan, etc)

Policy Templates

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Какие CLI команды есть в SAM CLI?
Каковы их псевнодонимы?
Что они делают? Чем отличаются?

A

Для деплоймента Лямбда функции нужно выполнить 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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Какие аргументы есть у aws cloudformation package?

A
  • S3 bucket - в который отправится сгенерированный CloudFormation Template файл
  • имя SAM template файла - например, template.yaml
  • имя папки - в которую CLI положит сгенерированный CloudFormation Template файл
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Какие аргументы есть у aws cloudformation deploy?

A
  • путь до CloudFormation template файла - например, в S3
  • имя CloudFormation Stack’а
  • capability: CAPABILITY_IAM - сгенерировать IAM роль для Лямбда функции
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Чтобы отлаживать Лямбда функцию локально, нужны

A
  • SAM CLI
  • AWS Toolkit (plugin для любой IDE)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Что такое Policy Template в SAM?

A
  • В CloudFormation template файле нужно
    • отдельно объявлять IAM Policies, перечислять каждую из них поименно
    • отдельно объявлять IAM Role
    • прикреплять одно к другому
    • а их вместе - прикреплять непосредственно к ресурсу
  • В SAM template файле можно
    • просто указать готовый preset (например, доступ к SQS очереди)
    • в секции Policies ресурса с типом AWS::Serverless::Function
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Какие самые известные Policy Template’ы?

A
  • S3ReadPolicy
  • DynamoDBCrudPolicy
  • SQSPollerPolicy
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Деплоить SAM лямбда функции можно … способами …, при этом используется …

A

двумя
- через CLI руками
- через Ci/CD
В обоих случаях SAM использует CodeDeploy

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Как задеплоить Лямбда функцию определённым образом через SAM? Например, через canary

A

В секции ресурса типа AWS::Serverless::Function указываем секцию DeploymentPreference

Деплоймент может иметь один из трёх типов (стратегию).

17
Q

Стратегии деплоймента Лямбды в CodeDeploy?
Что это напоминает?

A
  • Linear - постепенно смещать трафик (по 10% в минуту), пока не переведёт 100%
  • Canary - сместить 10%, проверить, сместить ещё 90%
  • AllAtOnce - самый быстрый и опасный

Абсолютно такие же стратегии CodeDeploy предлагает и для приложения в ECS кластере.