AWS Notes
5.6K subscribers
444 photos
42 videos
10 files
2.8K links
AWS Notes — Amazon Web Services Educational and Information Channel

Chat: https://xn--r1a.website/aws_notes_chat

Contacts: @apple_rom, https://www.linkedin.com/in/roman-siewko/
Download Telegram
Полезная статья по установке SSM Manager - есть отсутствующий в документации список используемых SSM менеджером API.
Вообще, по теме доступа для SSM Manager, единственный найденный список, чтобы не использовать встроенную AmazonEC2RoleforSSM - policy для SSM.
В реальности это, видимо, компиляция из официальной доки, которая описыват лишь отдельные права (потому нужно проверять), а полные даются лишь присоединяемой (ManagedPolicy) ролью, чтобы это делать отдельно, а не давать в шаблоне изначально — иначе будут полные права, в частности, на s3, которые есть в AmazonEC2RoleforSSM. Итого, я пока оставляю свои, вручную подобратнные когда-то для SSM-agent (чтобы не было ошибок в логах - уже может устарело, нужно обновить):
- PolicyName: amazon-ssm-agent
PolicyDocument:
Statement:
- Effect: Allow
Action:
- 'ssm:UpdateInstanceInformation'
- 'ssm:ListAssociations'
Resource:
- 'arn:aws:ec2:*:*:instance/*'
- 'arn:aws:ssm:*:*:*'
#ssm #ssm_manager #policy #AmazonEC2RoleforSSM #check #todo
Получаем последние версии AMI ID с помощью SSM Parameter Store.
Amazon Linux 2:

LatestAmiId:
Type: AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>
Description: Latest Amazon Linux 2 AMI ID
Default: /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2
...
ImageId: !Ref LatestAmiId

ECS-optimized:
LatestEcsAmiId:
Type: AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>
Description: Latest ECS-optimized 2 AMI ID
Default: /aws/service/ecs/optimized-ami/amazon-linux/recommended/image_id

#CloudFormation #ami #ami_id #ssm #ssm_parameter
Troposphere - The #troposhere library allows for easier creation of the AWS CloudFormation JSON by writing Python code to describe the AWS resources.
Попытка упростить создание CloudFormation шаблонов (поддерживается также OpenStack). Питонистам может быть полезным, однако на выходе лишь JSON. В общем, для тех, кто не осилил Terraform и ещё не перешёл на Kubernetes.

#CloudFormation #openstack
Stacker is a tool and library used to create & update multiple CloudFormation stacks.
Весьма интересная штука для работы с большим количеством стэков. Написана поверх #troposhere и может быть отличным решением для CI/CD каких-то проектов, не использующих своих централизованных решений.

#stacker #CloudFormation #multiple_stacks
Статья по техническим подробностям внутренней работы Лямбд - первоисточник (pdf).
#lambda
Design VPC #best_practices или как разбить на подсетки VPC, какую схему выбрать для dev/stg/prod, как грамотно организовать VPC для разных целей. Рекомендуемые ссылки почитать:
- Официальная дока
- Пошаговые инструкции с примерами для консоли и AWS CLI (не совсем про дизайн, но может быть полезно)
- Базовые понятия и общие рекомендации (13 пунктов)
- Старенькая, но тоже можно глянуть
- Тоже старенькая, но весьма подробная (25 пунктов)
- Полезное обсуждение на Reddit по вопросу разбивке на CIDR-blocks
- Не про VPC, но полезные общие практики AWS Cloud Design Patterns

#vpc #design #vpc_design #cidr
Для отладки проблем на AWS - мои #best_practices:

- включить логирование с помощью awslogs

- включить vpc flow logs (их можно/нужно складывать в ES для просмотра)

- не забывать / проверить права Network ACL

- не забывать про исходящий трафик, который может быть почему-то закрыт

- смотреть в awslogs-логах на инстансе с проблемами - каких конкретно прав не хватает сервисам типа SSM

- для S3 не забывать про зависимость от регионов

- для cross-account работы S3 не забывать, что у аккаунта из которого идёт доступ даже админу нужно дать права на s3://bucket-in-other-acc (т.к. по умолчанию лишь на свои #check_it)

- не забывать про Route Tables, особенно при VPC-пиринге в разные подсети

- не забывать про текущие ограничения некоторых сервисов, что не всё может делаться через CloudFormation и что новообъявленные фичи не сразу имплементируются (в CloudFormation + зависит от региона)

- не забывать про отличие IAM и S3 policy как resource-based

- не забывать, что для public-ресурсов (например, ES) нельзя использовать IAM role (только user + credentials и уже у юзера может быть роль) - для IAM role нужно использовать ресурсы в VPC

#trace #logs #todo #use_it
Чтобы в #ECS скопировать #task_definition через JSON и потом вставить это при создании другой #task_definition (т.е. сделать условный экспорт-импорт в консоли) - нужно удалить в полученном (скопированном) JSON следующие переменные:

compatibilities
requiresAttributes
taskDefinitionArn
revision
status


Иначе #error: Should only contain "family", "containerDefinitions", "volumes", "taskRoleArn", "networkMode", "placementConstraints", "requiresCompatibilities", "cpu", "memory", "executionRoleArn".
#recommendation - периодически обновлять #AMI (в т.ч. докерных образов, как минимум сервисного) - раз в квартал (так обычно выходят обновления Amazon Linux).
Для срочных патчей (очередная критическая уязвимость чего бы то ни было) - отработать процедуру запуска критических обновлений.
#issue При обновлении #AMI для #ECS Autoscaling group через шаблон - есть проблема для действующих #prod систем. #CloudFormation не учитывает скорости деплоя убиваемых докеров (#task_definition) - новые инстансы (с обновлённым AMI) поднимаются очень быстро и как только они становятся доступными, предыдущие (ещё работающие с набитыми докерами) тупо терминируются. В результате появляется #downtime - пока на поднявшиеся новые инстансы задеплоятся убитые вместе с инстансами докеры.

Обсуждение этой проблемы на Reddit.
Slack Bot на Лямбде.

#slack #bot #lambda
Slack Bot
Удобный каталог типов инстансов #ec2 с параметрами https://ec2instances.info/

#info #comparison
Когда в #CloudFormation #templates нужно иметь переменное количество параметров, то можно использовать Fn::Transform:

Targets:
- Id: !Ref SwarmMaster
Port: 888
- Id: !Ref SwarmWorker1
Port: 888
Fn::Transform:
Name: AWS::Include
Parameters:
Location: !If [ IsProd, !Ref ProdS3linkToYaml, !Ref DevS3linkToYaml ]


#transform можно использовать и для отдельных параметров и для блоков.
#recommendation Для важных (неочевидных, а для кого-то - просто всех) выходных переменных #CloudFormation #templates стоит добавлять описание:

Outputs:
## Common parameters
dnsKong:
Value: !Ref dnsKong
Description: Kong External ELB DNS
Export:
Name: dnsKong