AWS
Co tato dovednost pokrývá
Praktické příkazy a konfigurace AWS CLI pro IAM, EC2, ECS, S3, RDS a Lambda, doplněné o nastavení AWS CLI, CodeBuild, logování/monitoring a optimalizaci nákladů — tedy běžnou denní práci potřebnou pro cloudový vývoj na AWS.
Kdy ji použít
- Zakládání IAM uživatelů, skupin, rolí, instance profiles a politik
- Konfigurace AWS CLI (profily, přihlašovací údaje, proměnné prostředí) pro nové prostředí
- Spouštění, zastavování nebo zabezpečování EC2 instancí a security groups
- Nastavení EC2 Auto Scaling pro danou zátěž
- Nasazování kontejnerových workloadů do ECS/Fargate včetně task definitions a listenerů load balanceru
- Správa S3 bucketů, storage tříd a bucket policies
- Zřízení instance databáze RDS
- Vytváření nebo konfigurace funkce AWS Lambda
- Nastavení CodeBuild projektu pro CI/CD
- Kontrola možností logování/monitoringu nebo plánování optimalizace nákladů na AWS
- První seznámení s AWS
Identity and Access Management (IAM)
IAM je služba AWS pro řízení přístupu k prostředkům AWS. Umožňuje spravovat uživatele, skupiny, role a oprávnění.
Koncepty IAM
- Uživatelé (Users): Jednotlivé identity s přihlašovacími údaji.
- Skupiny (Groups): Kolekce uživatelů se sdílenými oprávněními.
- Role (Roles): Přiřaditelná oprávnění pro služby nebo uživatele.
- Politiky (Policies): JSON dokumenty definující povolené/zakázané akce.
Časté příkazy IAM
Výpis rolí:
aws iam list-roles --profile bf-gsgteaser-sandbox
Vytvoření instance profile:
aws iam create-instance-profile --instance-profile-name test_ec2_ssm_profile --profile bf-gsgteaser-sandbox
Přidání role do instance profile:
aws iam add-role-to-instance-profile --instance-profile-name test_ec2_ssm_profile --role-name test_ec2_ssm --profile bf-gsgteaser-sandbox
Výpis instance profiles:
aws iam list-instance-profiles --profile bf-gsgteaser-sandbox
Vytvoření uživatele a skupiny:
aws iam create-user --user-name john-doe
aws iam create-group --group-name developers
aws iam add-user-to-group --user-name john-doe --group-name developers
Připojení spravované politiky:
aws iam attach-user-policy \
--user-name john-doe \
--policy-arn arn:aws:iam::aws:policy/ReadOnlyAccess
Vytvoření a připojení vlastní politiky:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
aws iam create-policy \
--policy-name MyCustomPolicy \
--policy-document file://policy.json
aws iam attach-user-policy \
--user-name john-doe \
--policy-arn arn:aws:iam::123456789012:policy/MyCustomPolicy
Vytvoření role pro EC2:
aws iam create-role \
--role-name EC2-ReadOnly \
--assume-role-policy-document file://trust-policy.json
Trust policy pro EC2 roli (trust-policy.json):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
Připojení role k EC2 instanci (přes instance profile):
aws ec2 associate-iam-instance-profile \
--instance-id i-1234567890abcdef0 \
--iam-instance-profile Name=EC2-ReadOnly-Profile
Doporučené postupy pro IAM
- Princip nejmenších oprávnění: Udělujte pouze nezbytná oprávnění.
- Používejte skupiny a role: Přiřazujte oprávnění skupinám/rolím místo jednotlivým uživatelům.
- Zapněte MFA: Vyžadujte vícefaktorové ověření pro privilegované uživatele.
- Rotujte přihlašovací údaje: Pravidelně měňte přístupové klíče a hesla.
- Sledujte aktivitu: Používejte CloudTrail a IAM Access Analyzer.
- Provádějte pravidelné audity: Kontrolujte a odstraňujte nepoužívané uživatele, role a politiky.
- Podmínky v politikách: Používejte policy conditions pro další zabezpečení.
- Service Control Policies: Aplikujte SCP v AWS Organizations pro kontrolu na úrovni účtu.
Konfigurace AWS CLI
Profily
aws configure --profile myprofile
aws s3 ls --profile myprofile
Proměnné prostředí
export AWS_ACCESS_KEY_ID=your_access_key
export AWS_SECRET_ACCESS_KEY=your_secret_key
export AWS_DEFAULT_REGION=us-east-1
Nástroje pro vývojáře
AWS CodeBuild
Výpis projektů a buildů:
aws codebuild list-projects --profile testuser-sandbox
aws codebuild list-builds --profile testuser-sandbox
Vlastnosti:
- Spravované build prostředí (žádné servery ke správě)
- Podpora více jazyků
- Integrace CI/CD s CodePipeline
- Vlastní Docker images
- Paralelní buildy
Logování a monitoring
- CloudWatch: Metriky, logy, alarmy
- CloudTrail: Auditování a governance
- X-Ray: Distribuované trasování aplikací
- AWS Config: Sledování shody s předpisy (compliance)
- Trusted Advisor: Kontroly zabezpečení, nákladů a výkonu
Optimalizace nákladů
- Přizpůsobte velikost prostředků skutečným potřebám (right-sizing)
- Používejte Reserved nebo Savings Plans pro předvídatelné workloady
- Zavádějte Auto Scaling
- Sledujte spotřebu pomocí Cost Explorer
- Odstraňujte nepoužívané prostředky
Amazon EC2
Typy instancí
- Obecné účely: T3, M5, M6g
- Optimalizované na výpočet: C5, C6g
- Optimalizované na paměť: R5, R6g, X1, X1e
- Optimalizované na úložiště: I3, D2, D3
- Akcelerovaný výpočet: P3, P4, G4dn, G5
Příkazy EC2
aws ec2 run-instances --image-id ami-0abcdef1234567890 \
--count 1 --instance-type t2.micro \
--key-name my-key-pair \
--security-group-ids sg-12345678 \
--subnet-id subnet-12345678
Spuštění/zastavení/ukončení:
aws ec2 start-instances --instance-ids i-1234567890abcdef0
aws ec2 stop-instances --instance-ids i-1234567890abcdef0
aws ec2 terminate-instances --instance-ids i-1234567890abcdef0
Příklad security group:
aws ec2 create-security-group --group-name my-sg --description "My security group"
aws ec2 authorize-security-group-ingress \
--group-id sg-12345678 --protocol tcp --port 22 --cidr 0.0.0.0/0
0.0.0.0/0 otevírá port 22 celému internetu — v produkci omezte --cidr na známý rozsah IP adres.
EC2 Auto Scaling
Launch Configurations jsou zastaralé — nové typy instancí a funkce jsou dostupné pouze přes Launch Templates.
aws ec2 create-launch-template \
--launch-template-name my-lt \
--launch-template-data '{"ImageId":"ami-0abcdef1234567890","InstanceType":"t2.micro"}'
aws autoscaling create-auto-scaling-group \
--auto-scaling-group-name my-asg \
--launch-template LaunchTemplateName=my-lt,Version='$Latest' \
--min-size 1 --max-size 10 --desired-capacity 2 \
--availability-zones us-east-1a
Amazon ECS
Příklad task definition (Fargate):
{
"family": "my-app",
"taskRoleArn": "arn:aws:iam::123456789012:role/ecsTaskRole",
"executionRoleArn": "arn:aws:iam::123456789012:role/ecsTaskExecutionRole",
"networkMode": "awsvpc",
"requiresCompatibilities": ["FARGATE"],
"cpu": "256",
"memory": "512",
"containerDefinitions": [
{
"name": "my-container",
"image": "nginx:latest",
"essential": true,
"portMappings": [{"containerPort": 80,"protocol": "tcp"}]
}
]
}
Registrace task definition:
aws ecs register-task-definition --cli-input-json file://task-definition.json
Vytvoření listeneru (správný formát JSON):
aws elbv2 create-listener \
--load-balancer-arn arn:aws:elasticloadbalancing:... \
--protocol HTTP --port 80 \
--default-actions '[{"Type":"forward","TargetGroupArn":"arn:aws:elasticloadbalancing:..."}]'
Amazon S3
- Buckets: Kontejnery pro objekty
- Objekty: Soubory s metadaty
- Klíče (Keys): Jedinečné identifikátory objektů
- Regiony: Geografické umístění úložiště
Bezpečná změna storage class:
aws s3 cp s3://my-bucket/myfile.txt s3://my-bucket/myfile.txt \
--storage-class STANDARD_IA --metadata-directive COPY
Příklad bucket policy:
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-bucket/*"
}]
}
Amazon RDS
Vytvoření DB instance:
aws rds create-db-instance \
--db-instance-identifier mydb \
--db-instance-class db.t2.micro \
--engine mysql \
--master-username admin \
--master-user-password mypassword \
--allocated-storage 20 \
--backup-retention-period 7 \
--storage-encrypted
Zálohy a snapshoty:
aws rds create-db-snapshot --db-instance-identifier mydb --db-snapshot-identifier mydb-snapshot-1
aws rds describe-db-snapshots --db-instance-identifier mydb
Automatické zálohy (--backup-retention-period) a šifrování at rest (--storage-encrypted) nastavte už při vytváření instance; přístup omezte security groups místo veřejné dostupnosti.
AWS Lambda
Vytvoření funkce:
aws lambda create-function \
--function-name my-function \
--runtime python3.9 \
--role arn:aws:iam::123456789012:role/lambda-role \
--handler lambda_function.lambda_handler \
--code S3Bucket=my-bucket,S3Key=function.zip
Přidání S3 triggeru:
aws lambda add-permission \
--function-name my-function \
--principal s3.amazonaws.com \
--statement-id s3invoke \
--action lambda:InvokeFunction \
--source-arn arn:aws:s3:::my-bucket
Další časté triggery: API Gateway (HTTP požadavky), DynamoDB Streams (změny v tabulce), EventBridge (naplánované nebo event-driven spouštění).
Proměnné prostředí, paměť, timeout a vrstvy (layers):
aws lambda update-function-configuration \
--function-name my-function \
--environment "Variables={STAGE=prod}" \
--memory-size 256 \
--timeout 15 \
--layers arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1
Začínáme
- Založte účet AWS a nastavte upozornění na vyúčtování.
- Nastavte AWS CLI a profily.
- Naučte se základy IAM a vytvořte uživatele/role.
- Prozkoumejte služby AWS přes konzoli.
- Začněte se službami ve free tier.
- Zaveďte monitoring, logování a zabezpečení od samého začátku.