В дополнение к ec2 - ещё и отличный каталог типов инстансов для #RDS - https://ec2instances.info/rds/
#info #comparison
#info #comparison
При конструировании DNS для #s3 бакет нужно быть максимально внимательным - неоднозначное толкование официальной документации, где говорится про «you can use either of these endpoints» в реальности может давать различные проблемы.
С одной стороны, используя вариант с
С одной стороны, используя вариант с
.s3.amazonaws.comдаёт в результате перенаправление, а значит изначально #error #307 и лишь потом нужный файл/страницу. Это может приводить к некорректной работе критическим к такому поведению вещей. Например, когда через s3 бакеты подтягиваются конфиг-файлы #nginx, то такое поведение даст ошибку «unexpected end of file, expecting ";" or "}" in /etc/nginx/conf.d/...», т.к. получив 307 он не будет делать ещё один запрос по новому location из ответа. Потому правильно использовать именно вариант типа:
!Join ['',[!Ref Bucket, '.s3-', !Ref 'AWS::Region' , '.amazonaws.com' ]]Однако бывает и противоположная ситуация, например, с регионом N.Virginia. Для #CloudFront #Origin (в том числе для Logging бакета)
DomainName вариант bucket.s3-us-east-1.amazonaws.com даёт стабильные #error 502 для #distribution. Правильный вариант с bucket.s3.amazonaws.com:Origins:#issue
- DomainName: !Join ['',[!Ref Bucket, '.s3.amazonaws.com' ]]
Amazon
Buckets overview - Amazon Simple Storage Service
Store all of your files, known as objects, within a uniquely named Amazon S3 bucket.
Если при использовании #pg_dump получаем #error схемы #topology
1. Сменить владельца расширения #rdsadmin на #rds_superuser.
2. Сменить владельца объектов с помощью функции.
pg_dump: [archiver (db)] query failed: ERROR: permission denied for schema topologyили другого #PostGIS расширения для #Postgres #RDS, то нужно выполнить следующие спеллы:
1. Сменить владельца расширения #rdsadmin на #rds_superuser.
2. Сменить владельца объектов с помощью функции.
alter schema topology owner to rds_superuser;
CREATE FUNCTION exec(text) returns text language plpgsql volatile AS $f$ BEGIN EXECUTE $1; RETURN $1; END; $f$;
SELECT exec('ALTER TABLE ' || quote_ident(s.nspname) || '.' || quote_ident(s.relname) || ' OWNER TO rds_superuser;')
FROM (
SELECT nspname, relname
FROM pg_class c JOIN pg_namespace n ON (c.relnamespace = n.oid)
WHERE nspname in ('tiger','topology') AND
relkind IN ('r','S','v') ORDER BY relkind = 'S')
s;Amazon
Common DBA tasks for Amazon RDS for PostgreSQL - Amazon Relational Database Service
Learn how to perform some common DBA tasks on DB instances running the Amazon RDS for PostgreSQL database engine.
Рекомендуемый минимальный #db_instance_type для #RDS #Postgres - db.t2.small (minimum size - 20GB), т.к. db.t2.micro не поддерживает шифрование.
#encryption
#encryption
Amazon
Encrypting Amazon RDS resources - Amazon Relational Database Service
Secure your RDS data by encrypting your DB instances.
#credits и #baseline для #t2 и #t3 инстансов - не забываем, что у #t3 два процессора даже для #nano, накопленные кредиты не сбрасываются в течении недели после остановки, да и просто всё выгодней, а цена ниже (чем у #t2).
Amazon
Key concepts for burstable performance instances - Amazon Elastic Compute Cloud
Understand the key concepts and definitions of CPU performance for burstable performance instances.
#CloudFront нельзя завести на #internal #LoadBalancer, т.к. он не умеет (не может) работать с элементами в #VPC, потому с #CloudFront — только #public (#internet-facing) #LoadBalancer.
#DynamoDB #docker образ для локального #development - https://hub.docker.com/r/amazon/dynamodb-local/.
Завести #external (internet-facing/#public) #LoadBalancer (#ELB/#ALB/#NLB) на расположенные в #private #subnet виртуалки никаких проблем нет. Просто указываем для него, как и положено, #DMZ #subnet (#public):
А виртуалкам, расположенным и в #private_subnet добавляем в #security_group правила полного доступа с данного балансера:
#CloudFormation #templates
albExt:
Type: AWS::ElasticLoadBalancingV2::LoadBalancer
Properties:
Name: externalAlb
Scheme: internet-facing
Subnets: # DMZ if public
- !ImportValue subnetVpc4DmzA
- !ImportValue subnetVpc4DmzB
SecurityGroups:
- !Ref sgAlb
А виртуалкам, расположенным и в #private_subnet добавляем в #security_group правила полного доступа с данного балансера:
sgInstance:
Type: AWS::EC2::SecurityGroup
Properties:
VpcId: !ImportValue vpc4
GroupDescription: Full access for ALB
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 0
ToPort: 65535
SourceSecurityGroupId: !Ref sgAlb
Description: All TCP trafic - only for ALB
#CloudFormation #templates
Amazon Web Services, Inc.
Attach EC2 instances with private IP addresses to an internet-facing load balancer
I have an internet-facing Elastic Load Balancing (ELB) load balancer. I want to attach backend Amazon Elastic Compute Cloud (Amazon EC2) instances located in a private subnet.
Чтобы защитить #CloudFormation стэки от удаления/изменения (#termination_protection неудобно и даёт лишь защиту от удаления) в каком-то аккаунте (предполагая, что он входит в AWS #Organizations), можно добавить следующее #SCP:
"CloudFormation CRUD Deny"
"CloudFormation CRUD Deny"
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1539948147000",
"Effect": "Deny",
"Action": [
"cloudformation:CreateChangeSet",
"cloudformation:CreateStack",
"cloudformation:CreateStackInstances",
"cloudformation:CreateStackSet",
"cloudformation:CreateUploadBucket",
"cloudformation:DeleteChangeSet",
"cloudformation:DeleteStack",
"cloudformation:DeleteStackInstances",
"cloudformation:DeleteStackSet",
"cloudformation:ExecuteChangeSet",
"cloudformation:SetStackPolicy",
"cloudformation:UpdateStack",
"cloudformation:UpdateStackInstances",
"cloudformation:UpdateStackSet",
"cloudformation:UpdateTerminationProtection"
],
"Resource": [
"*"
]
}
]
}
#blue_green_deploymentПри использовании #DNS #Alias нужно учитывать, что #HostedZoneId разный для разных Alias Target.
Для #CloudFront он фиксированный Z2FDTNDATAQYW2:
Для #LoadBalancer нужно получать его через #GetAtt, для #ELB это:
Для #ALB это:
Для #alias на другую #RecordSet нужно получать #HostedZoneId домена:
def Result = sh( script: 'aws route53 list-hosted-zones-by-name --dns-name '+gos.MainDomain, returnStdout: true )
def ResultJson = readJSON ( text: Result )
Stack['dns']['params']['HostedZoneIdDomain'] = ResultJson['HostedZones'][0]['Id'].split('/')[2]
Для #CloudFront он фиксированный Z2FDTNDATAQYW2:
aliasSite:
Type: AWS::Route53::RecordSet
Properties:
HostedZoneName: !Join ['', [!Ref MainDomain, '.']]
Name: !Ref MainDomain
Type: A
AliasTarget:
DNSName: !Ref CnameSite
HostedZoneId: Z2FDTNDATAQYW2
Для #LoadBalancer нужно получать его через #GetAtt, для #ELB это:
HostedZoneId1:
Value: !GetAtt [elbExt, 'CanonicalHostedZoneNameID']Для #ALB это:
HostedZoneId1:
Value: !GetAtt [albExt, 'CanonicalHostedZoneID']Для #alias на другую #RecordSet нужно получать #HostedZoneId домена:
def Result = sh( script: 'aws route53 list-hosted-zones-by-name --dns-name '+gos.MainDomain, returnStdout: true )
def ResultJson = readJSON ( text: Result )
Stack['dns']['params']['HostedZoneIdDomain'] = ResultJson['HostedZones'][0]['Id'].split('/')[2]
Amazon
Values specific for simple alias records - Amazon Route 53
When you create alias records, you specify the following values. For more information, see .
При использовании #ELB (созданного через #CloudFormation) с большим количеством инстансов, стоит помнить про фичу Cross-Zone Load Balancing, которая отключена по умолчанию (при создании балансера через консоль - включена по умолчанию).
Итого: для #ELB её нужно включать для более гладкого распределения трафика. У #ALB всегда включена, у #NLB - нужно включать самому.
Итого: для #ELB её нужно включать для более гладкого распределения трафика. У #ALB всегда включена, у #NLB - нужно включать самому.
Amazon
How Elastic Load Balancing works - Elastic Load Balancing
Learn more about how Elastic Load Balancing works.
Пример использования Amazon #Connect + #Lambda +Amazon #Lex для реализации #ASR (Automatic #Speech_Recognition).
Greenice
Creating a Call-Center Bot with AWS Connect and Amazon Lex
A case study of an attempt to use AWS Lex in pair with AWS Connect to create a chatbot that takes the orders for an online shop! Was it a success or fail?
Для #ECS наконец появились образы на базе #AMILinux2 - ECS-Optimized Amazon Linux 2 AMI. Для автоматического получения добавляем '-2' в конце. Или скрипт для #CloudFormation #templates:
for region in $(aws ec2 describe-regions --region us-east-1 --query 'Regions[].[RegionName]' --output text | sort); \
do printf " ${region}:\n AmiId: \
$(aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/recommended/image_id \
--query 'Parameters[0].[Value]' --output text --region $region)\n" ; done
Amazon
Amazon ECS-Optimized Amazon Linux 2 AMI - Amazon Elastic Container Service
The Amazon ECS-optimized Amazon Linux 2 AMI is the recommended AMI to use for launching your Amazon ECS container instances. Amazon ECS provides separate Amazon ECS-optimized Amazon Linux 2 AMIs for x86 and arm64 architecture.
Использование #Lambda в #VPC сильно замедляет её старт, точней очень сильно (10 секунд плюс). #issue
theburningmonk.com
I’m afraid you’re thinking about AWS Lambda cold starts all wrong
Learn to build production-ready serverless applications on AWS
Используя какую-то #IAM роль для переключения в другую роль, нужно не забывать про role chaining:
Using the credentials for one role to assume a different role is called role chaining. When you use role chaining, your new credentials are limited to
Это в, в частности, объясняет раздражающую всех проблему при использовании AWS #SSO - когда через час сбразывается сессия.
Using the credentials for one role to assume a different role is called role chaining. When you use role chaining, your new credentials are limited to
a maximum duration of one hour. Это в, в частности, объясняет раздражающую всех проблему при использовании AWS #SSO - когда через час сбразывается сессия.
Amazon
Methods to assume a role - AWS Identity and Access Management
Learn the different methods you can use to assume an IAM role.
Cloud Custodian https://capitalone.github.io/cloud-custodian/docs/index.html подойдёт для реализации #compliance, проверки #policy и всевозможных требований к различным #environment. При этом #serverless и помимо #AWS поддерживает также #Azure и #google #GCP.