#recommendation Используемая практика именования переменных в #CloudFormation #templates у самого Амазана весьма ущербная - параметры начинаются с маленькой буквы p, а ресурсы начинаются с маленькой r:
Ущербность выявляется, когда выходишь за пределы одного стэка (особенно явно в #nested_stacks) — приходится переименовывать "бывшие" в одном стэке ресурсы в параметры в другом, что приводит при такой схеме к смене имени и сильно затрудняет сопровождение, а также плодит ошибки при переиспользование кода.
За многие годы я пришёл к другой схеме именования - параметры и ресурсы (если их нужно передавать) имеют одинаковые имена, лишь только добавляется правило, что все ресурсы начинаютс с маленькой буквы, а параметры с большой.
Кроме того, в имени ресурса почти всегда принципиально видеть тип, потому пример выше преобразуется в:
Сначала кажется, что это как раз добавит путаницу, но очень скоро станет понятно, что обычно совпадающие имена (лишь начинающиеся с разной буквы) встречаются редко (обычно при создании бакетов или юзеров, где передаётся их имя), а возможность поиска по всему проекту(-ам) для последующего оптового переименования в случае надобности - крайне удобна.
pDMZSubnetA
rDMZSubnetA
Ущербность выявляется, когда выходишь за пределы одного стэка (особенно явно в #nested_stacks) — приходится переименовывать "бывшие" в одном стэке ресурсы в параметры в другом, что приводит при такой схеме к смене имени и сильно затрудняет сопровождение, а также плодит ошибки при переиспользование кода.
За многие годы я пришёл к другой схеме именования - параметры и ресурсы (если их нужно передавать) имеют одинаковые имена, лишь только добавляется правило, что все ресурсы начинаютс с маленькой буквы, а параметры с большой.
Кроме того, в имени ресурса почти всегда принципиально видеть тип, потому пример выше преобразуется в:
SubnetDmzA
subnetDmzA
Сначала кажется, что это как раз добавит путаницу, но очень скоро станет понятно, что обычно совпадающие имена (лишь начинающиеся с разной буквы) встречаются редко (обычно при создании бакетов или юзеров, где передаётся их имя), а возможность поиска по всему проекту(-ам) для последующего оптового переименования в случае надобности - крайне удобна.
GitHub
cloudformation-examples/s3/cross-account-cross-region-replication/source-region.yml at master · applerom/cloudformation-examples
AWS CloudFormation code examples. Contribute to applerom/cloudformation-examples development by creating an account on GitHub.
#note При копировании #s3_cp или синхронизации #s3_sync пустые каталоги не создаются, т.к. #S3 работает с объектами (файлами) и не в курсе про каталоги (это лишь путь к объекту).
Если нужно с пустыми - используем сторонние утилиты (например, S3cmd).
При особо страстном желании, можно добавить энный плюсик в просьбу добавления такого функционала в официальную версию.
Если нужно с пустыми - используем сторонние утилиты (например, S3cmd).
При особо страстном желании, можно добавить энный плюсик в просьбу добавления такого функционала в официальную версию.
s3tools.org
Amazon S3 Tools: Command Line S3 Client and S3 Backup for Windows, Linux: s3cmd, s3express
S3Cmd, S3Express: Fully-Featured S3 Command Line Tools and S3 Backup Software for Windows, Linux and Mac. More than 60 command line options, including multipart uploads, encryption, incremental backup, s3 sync, ACL and Metadata management, S3 bucket size…
#note После применения (изменения) #IAM_role на инстанс, права изменяются (обновляются) где-то через 30 секунд, а после добавления в #role новой #policy — где-то 2-3 минуты.
При проблемах на амазоне максимальное время применения #IAM — 5-6 минут. Если прошло больше и всё равно не работает, то "проблема на вашей стороне".
При проблемах на амазоне максимальное время применения #IAM — 5-6 минут. Если прошло больше и всё равно не работает, то "проблема на вашей стороне".
#note Чтобы задать #json-запрос для #aws_cli со своими параметрами:
aws --region=eu-west-2 deploy create-deployment --cli-input-json "file://create-deployment.json"
Чтобы получить структуру параметров - используем ключик --generate-cli-skeleton.Amazon
Generate CLI Skeleton and CLI Input JSON Parameters - AWS Command Line Interface
Use the generate-cli-skeleton option to create a template for parameter input.
В общем случае стоит избегать использования #IAM #ManagedPolicy, т.к. граждане в Амазоне не утруждают себя использованием ограниченных #permissions в них и запросто ставят "жирные" #policy.
Например, в AmazonEC2RoleforSSM, которое рекомендуется для работы с #SSM #Session_Manager, имеется правило на работу #s3 с любыми ресурсами:
#ужас #сколькоможнотерпеть
Например, в AmazonEC2RoleforSSM, которое рекомендуется для работы с #SSM #Session_Manager, имеется правило на работу #s3 с любыми ресурсами:
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:PutObject",
"s3:GetObject",
"s3:GetEncryptionConfiguration",
"s3:AbortMultipartUpload",
"s3:ListMultipartUploadParts",
"s3:ListBucket",
"s3:ListBucketMultipartUploads"
],
"Resource": "*"
}#ужас #сколькоможнотерпеть
Amazon
Tutorial: Remotely Manage Your Amazon EC2 Instances - Amazon Elastic Compute Cloud
Learn how to quickly execute a command using Amazon EC2 Run Command.
При изменении #EBS с обычного на #iops, нужно учитывать, что эта операция может занять некоторое время (до 40 минут для 200ГБ), а вернуть обратно (на обычный) можно будет лишь через шесть часов, иначе #error:
Wait at least 6 hours between modifications per EBS volume.
Кроме того, операция возвращения будет ещё более длительной (раза в два дольше - до двух часов на 200ГБ).
Wait at least 6 hours between modifications per EBS volume.
Кроме того, операция возвращения будет ещё более длительной (раза в два дольше - до двух часов на 200ГБ).
Пример реализации #bucket_policy для нескольких #OriginAccessIdentity в одном #s3 бакете.
policyBucketFiles:
Type: AWS::S3::BucketPolicy
Properties:
Bucket: !Ref bucketFiles
PolicyDocument:
Statement:
- Sid: Access for Cloudfront-files
Effect: Allow
Principal:
CanonicalUser: !GetAtt [originAccessIdentityBucketFiles, 'S3CanonicalUserId']
Action:
- 's3:GetObject'
Resource:
- !Join ['',['arn:aws:s3:::', !Ref bucketFiles, '/files/*']]
- !Join ['',['arn:aws:s3:::', !Ref bucketFiles, '/files_public/*']]
- Sid: Access for SwitchOver Cloudfront-files
Effect: Allow
Principal:
CanonicalUser: !Ref CanonicalUserFilesSwitchOver
Action:
- 's3:GetObject'
Resource:
- !Join ['',['arn:aws:s3:::', !Ref bucketFiles, '/files/*']]
- !Join ['',['arn:aws:s3:::', !Ref bucketFiles, '/files_public/*']]
- Sid: Access for replication account
Effect: Allow
Principal:
AWS: !Join ['',['arn:aws:iam::', !Ref AccountReplication, ':root']]
Action:
- 's3:*'
Resource:
- !Join ['',['arn:aws:s3:::', !Ref bucketFiles ]]
- !Join ['',['arn:aws:s3:::', !Ref bucketFiles, '/*']]
#CloudFormation #templates #examples
policyBucketFiles:
Type: AWS::S3::BucketPolicy
Properties:
Bucket: !Ref bucketFiles
PolicyDocument:
Statement:
- Sid: Access for Cloudfront-files
Effect: Allow
Principal:
CanonicalUser: !GetAtt [originAccessIdentityBucketFiles, 'S3CanonicalUserId']
Action:
- 's3:GetObject'
Resource:
- !Join ['',['arn:aws:s3:::', !Ref bucketFiles, '/files/*']]
- !Join ['',['arn:aws:s3:::', !Ref bucketFiles, '/files_public/*']]
- Sid: Access for SwitchOver Cloudfront-files
Effect: Allow
Principal:
CanonicalUser: !Ref CanonicalUserFilesSwitchOver
Action:
- 's3:GetObject'
Resource:
- !Join ['',['arn:aws:s3:::', !Ref bucketFiles, '/files/*']]
- !Join ['',['arn:aws:s3:::', !Ref bucketFiles, '/files_public/*']]
- Sid: Access for replication account
Effect: Allow
Principal:
AWS: !Join ['',['arn:aws:iam::', !Ref AccountReplication, ':root']]
Action:
- 's3:*'
Resource:
- !Join ['',['arn:aws:s3:::', !Ref bucketFiles ]]
- !Join ['',['arn:aws:s3:::', !Ref bucketFiles, '/*']]
#CloudFormation #templates #examples
Бывает, что, казалось бы, банальное копирование файлов в #s3 бакет:
This XML file does not appear to have any style information associated with it. The document tree is shown below.
Чтобы исправить — повторяем копирование на источнике с добавлением нужных #ACL #permissions с помощью ключика --acl bucket-owner-full-control, который сразу обеспечит каждому объекту нужные права.
aws s3 cp ./ s3://some-bucket/files --recursive
Когда это происходит из другого аккаунта, когда бакет расположен в другом регионе или с локального компьютера (между бакетами и т.п. не самые ординарные случаи), даёт странный эффект (#issue) — всё благополучно копируется, но после сам владелец бакета с админскими правами не может получить скопированное, получая #error:An error occurred (AccessDenied) when calling the GetObject operation: Access DeniedИ даже через консоль получаем ошибку доступа к файлам:
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<Error> <Code>AccessDenied</Code> <Message>Access Denied</Message>...
Причина - у Owner-а бакета нет никаких прав на записанное (картинка ниже).Чтобы исправить — повторяем копирование на источнике с добавлением нужных #ACL #permissions с помощью ключика --acl bucket-owner-full-control, который сразу обеспечит каждому объекту нужные права.
aws s3 cp ./ s3://some-bucket/files --recursive --acl bucket-owner-full-controlБывает нужно узнать, когда была добавлена фича в #CloudFormation - для этого есть #history (или просто можно подписаться на обновления).
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/ReleaseHistory.html
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/ReleaseHistory.html
Amazon
Release history - AWS CloudFormation
Find the revision dates, related releases, and important changes to the CloudFormation documentation.
Forwarded from CatOps
Я на какое-то время пропал, но вот вернулся)
На прошлой неделе отгремел AWS re:Invent, так что новости про Амазон сыпались со всех сторон. Я постарался собрать всё интересное (субъективно) в виде дайджеста.
Computing:
- AWS Outposts
- Arm-based Amazon EC2 A1 Instances
- Firecracker - легковесная виртуализация на Rust с открытым кодом
- Предиктивный скейлинг EC2 с ML под капотом
- Гибернейт для EC2
Данные:
- Amazon Aurora Global Database - одна реляционка на несколько(!) регионов
- DynamoDB Support for Transactions
- AWS DataSync - автоматизация передачи данных между хранилищами внутри AWS (S3, EFS)
- AWS Transfer for SFTP - SFTP для S3
- Amazon EFS now Supports Access Across Accounts and VPCs
- Amazon Timestream - новая time-series DB от AWS
- S3 Object Lock - запрет на удаление данных в S3 на заданный период
- S3 Intelligent-Tiering - новый сторейдж-класс для S3
- AWS Lake Formation - сервис для создания безопасных data lakes
- Amazon Quantum Ledger Database (QLDB) - треккинг датафлоу между приложениями
- Amazon Managed Blockchain - ну вы поняли 😉
Приложения:
- AWS App Mesh - Service Mesh от AWS
- Application Load Balancer can now Invoke Lambda Functions to Serve HTTP(S) Requests
- AWS License Manager - для упрощения управлением сторонних лицензий
- AWS Lambda Supports Ruby
- Custom Runtimes для AWS Lambda
- Managed Streaming for Kafka - Kafka без Кафки
- Amazon Forecast - прогнозы от AWS по любым(?) вашим данным
#aws
Продолжение >>
На прошлой неделе отгремел AWS re:Invent, так что новости про Амазон сыпались со всех сторон. Я постарался собрать всё интересное (субъективно) в виде дайджеста.
Computing:
- AWS Outposts
- Arm-based Amazon EC2 A1 Instances
- Firecracker - легковесная виртуализация на Rust с открытым кодом
- Предиктивный скейлинг EC2 с ML под капотом
- Гибернейт для EC2
Данные:
- Amazon Aurora Global Database - одна реляционка на несколько(!) регионов
- DynamoDB Support for Transactions
- AWS DataSync - автоматизация передачи данных между хранилищами внутри AWS (S3, EFS)
- AWS Transfer for SFTP - SFTP для S3
- Amazon EFS now Supports Access Across Accounts and VPCs
- Amazon Timestream - новая time-series DB от AWS
- S3 Object Lock - запрет на удаление данных в S3 на заданный период
- S3 Intelligent-Tiering - новый сторейдж-класс для S3
- AWS Lake Formation - сервис для создания безопасных data lakes
- Amazon Quantum Ledger Database (QLDB) - треккинг датафлоу между приложениями
- Amazon Managed Blockchain - ну вы поняли 😉
Приложения:
- AWS App Mesh - Service Mesh от AWS
- Application Load Balancer can now Invoke Lambda Functions to Serve HTTP(S) Requests
- AWS License Manager - для упрощения управлением сторонних лицензий
- AWS Lambda Supports Ruby
- Custom Runtimes для AWS Lambda
- Managed Streaming for Kafka - Kafka без Кафки
- Amazon Forecast - прогнозы от AWS по любым(?) вашим данным
#aws
Продолжение >>
AWS Notes
#issue При обновлении #AMI для #ECS Autoscaling group через шаблон - есть проблема для действующих #prod систем. #CloudFormation не учитывает скорости деплоя убиваемых докеров (#task_definition) - новые инстансы (с обновлённым AMI) поднимаются очень быстро…
Для решения такой проблемы можно использовать специально обученную #Lambda, которая триггерится перед удалением инстанс в #ECS cluster, когда обновляется #AMI инстанса:
https://aws.amazon.com/blogs/compute/how-to-automate-container-instance-draining-in-amazon-ecs/
https://aws.amazon.com/blogs/compute/how-to-automate-container-instance-draining-in-amazon-ecs/
Amazon
How to Automate Container Instance Draining in Amazon ECS | Amazon Web Services
Update 24 Aug 2023: The approach described in this post relies on a recursive AWS Lambda function. Lambda announced a recursion control to detect and stop Lambda functions in July 2023. Accounts having recursive Lambda functions were automatically opted-out…
При планировании новых проектов стоит учитывать новые #AWS #region, которые есть сейчас и которые откроются в ближайшем будущем. Например, для питерских проектов может быть важным, что вскоре появится #AWS в Швеции, а для болгарских - что в Италии.
https://aws.amazon.com/about-aws/global-infrastructure/
https://aws.amazon.com/about-aws/global-infrastructure/
Не стоит забывать, что #aws_cli поддерживает linux pipes, а потому, например, для для #s3 многие операции с файлами в бакете можно делать без предварительного их сохранения (используя stdin/stdout):
https://loige.co/aws-command-line-s3-content-from-stdin-or-to-stdout/
https://loige.co/aws-command-line-s3-content-from-stdin-or-to-stdout/
loige.co
AWS Command line: S3 content from stdin or to stdout
The AWS CLI s3 cp command supports streaming content to and from S3 using stdin/stdout with the - argument. This enables powerful pipelines without intermediary files.
Это боль, когда у тебя больше пяти #AWS_accont (т.к. на текущий момент максимум 5 аккаунтов в history при переключении). Пока амазонозаводчики не порешали это у себя - можно использовать плагин под #Chrome для переключения ролей.
https://chrome.google.com/webstore/detail/aws-extend-switch-roles/jpmkfafbacpgapdghgdpembnojdlgkdl?hl=en
Такой же для #Firefox:
https://addons.mozilla.org/en-US/firefox/addon/aws-extend-switch-roles3/
https://chrome.google.com/webstore/detail/aws-extend-switch-roles/jpmkfafbacpgapdghgdpembnojdlgkdl?hl=en
Такой же для #Firefox:
https://addons.mozilla.org/en-US/firefox/addon/aws-extend-switch-roles3/
Google
AWS Extend Switch Roles - Chrome Web Store
Extend your AWS IAM switching roles. You can set the configuration like aws config format