# AWS (Amazon Web Services) ## Навигация - [🏠 Главная страница курса](../../../README.md) - [📚 Модуль 8](../README.md) --- ## Основные сервисы AWS ### 1. Compute Services #### EC2 (Elastic Compute Cloud) - Виртуальные серверы в облаке - Различные типы инстансов (t3, m5, c5, r5, etc.) - Автомасштабирование с Auto Scaling Groups - Spot Instances для экономии ```yaml # EC2 Instance Configuration Resources: WebServerInstance: Type: AWS::EC2::Instance Properties: ImageId: ami-0c02fb55956c7d316 # Amazon Linux 2 InstanceType: t3.micro KeyName: my-key-pair SecurityGroupIds: - !Ref WebServerSecurityGroup UserData: Fn::Base64: !Sub | #!/bin/bash yum update -y yum install -y docker systemctl start docker systemctl enable docker usermod -a -G docker ec2-user docker run -d -p 80:80 nginx Tags: - Key: Name Value: WebServer - Key: Environment Value: Production ``` #### Lambda (Serverless Computing) - Выполнение кода без управления серверами - Оплата только за время выполнения - Автоматическое масштабирование - Интеграция с другими AWS сервисами ```python # Lambda Function Example import json import boto3 def lambda_handler(event, context): """ AWS Lambda function для обработки заказов """ # Получение данных из события order_data = event.get('order', {}) # Валидация данных if not validate_order(order_data): return { 'statusCode': 400, 'body': json.dumps({'error': 'Invalid order data'}) } # Обработка заказа order_id = process_order(order_data) # Отправка уведомления через SNS sns = boto3.client('sns') sns.publish( TopicArn='arn:aws:sns:us-east-1:123456789012:order-notifications', Message=f'Order {order_id} has been processed', Subject='Order Processed' ) return { 'statusCode': 200, 'body': json.dumps({ 'orderId': order_id, 'status': 'processed' }) } def validate_order(order_data): """Валидация данных заказа""" required_fields = ['customerId', 'items', 'total'] return all(field in order_data for field in required_fields) def process_order(order_data): """Обработка заказа""" # Логика обработки заказа return f"ORD-{order_data.get('customerId')}-{int(time.time())}" ``` #### Elastic Beanstalk - Платформа для развертывания приложений - Автоматическое управление инфраструктурой - Поддержка различных языков и фреймворков ```yaml # Elastic Beanstalk Configuration Resources: WebAppEnvironment: Type: AWS::ElasticBeanstalk::Environment Properties: ApplicationName: !Ref WebApplication EnvironmentName: !Sub "${AWS::StackName}-env" SolutionStackName: "64bit Amazon Linux 2 v3.4.0 running Docker" VersionLabel: !Ref ApplicationVersion OptionSettings: - Namespace: aws:autoscaling:launchconfiguration OptionName: InstanceType Value: t3.micro - Namespace: aws:autoscaling:asg OptionName: MinSize Value: "1" - Namespace: aws:autoscaling:asg OptionName: MaxSize Value: "3" ``` ### 2. Storage Services #### S3 (Simple Storage Service) - Объектное хранилище для файлов - Высокая доступность и долговечность - Различные классы хранения - Интеграция с другими AWS сервисами ```yaml # S3 Bucket Configuration Resources: MyBucket: Type: AWS::S3::Bucket Properties: BucketName: my-app-bucket VersioningConfiguration: Status: Enabled PublicAccessBlockConfiguration: BlockPublicAcls: true BlockPublicPolicy: true IgnorePublicAcls: true RestrictPublicBuckets: true LifecycleConfiguration: Rules: - Id: TransitionToIA Status: Enabled Transitions: - StorageClass: STANDARD_IA TransitionInDays: 30 - Id: DeleteOldVersions Status: Enabled NoncurrentVersionTransitions: - StorageClass: GLACIER TransitionInDays: 30 NoncurrentVersionExpirationInDays: 90 ``` #### EBS (Elastic Block Store) - Блочное хранилище для EC2 инстансов - Высокая производительность - Различные типы томов (gp3, io2, st1, sc1) ```yaml # EBS Volume Configuration Resources: MyVolume: Type: AWS::EC2::Volume Properties: Size: 100 VolumeType: gp3 Iops: 3000 Throughput: 125 Encrypted: true AvailabilityZone: !GetAZs[0] Tags: - Key: Name Value: MyDataVolume ``` #### Glacier - Архивное хранилище для долгосрочного хранения - Низкая стоимость - Различные классы доступа ### 3. Database Services #### RDS (Relational Database Service) - Управляемые реляционные базы данных - Поддержка MySQL, PostgreSQL, Oracle, SQL Server - Автоматические бэкапы и патчи - Multi-AZ для высокой доступности ```yaml # RDS Configuration Resources: MyDatabase: Type: AWS::RDS::DBInstance Properties: DBInstanceIdentifier: my-database DBInstanceClass: db.t3.micro Engine: postgres EngineVersion: "13.7" MasterUsername: admin MasterUserPassword: !Ref DatabasePassword AllocatedStorage: 20 StorageType: gp2 VPCSecurityGroups: - !Ref DatabaseSecurityGroup DBSubnetGroupName: !Ref DBSubnetGroup BackupRetentionPeriod: 7 MultiAZ: true StorageEncrypted: true DeletionProtection: true ``` #### DynamoDB - NoSQL база данных - Управляемый сервис - Автоматическое масштабирование - Глобальные таблицы ```yaml # DynamoDB Table Configuration Resources: MyTable: Type: AWS::DynamoDB::Table Properties: TableName: my-table AttributeDefinitions: - AttributeName: id AttributeType: S - AttributeName: timestamp AttributeType: N KeySchema: - AttributeName: id KeyType: HASH - AttributeName: timestamp KeyType: RANGE BillingMode: PAY_PER_REQUEST StreamSpecification: StreamViewType: NEW_AND_OLD_IMAGES GlobalSecondaryIndexes: - IndexName: GSI1 KeySchema: - AttributeName: status KeyType: HASH Projection: ProjectionType: ALL ``` #### Redshift - Data warehouse для аналитики - Columnar storage - Масштабирование кластера ### 4. Networking Services #### VPC (Virtual Private Cloud) - Изолированная виртуальная сеть - Полный контроль над сетевой конфигурацией - Интеграция с on-premises инфраструктурой ```yaml # VPC Configuration Resources: MyVPC: Type: AWS::EC2::VPC Properties: CidrBlock: 10.0.0.0/16 EnableDnsHostnames: true EnableDnsSupport: true Tags: - Key: Name Value: MyVPC PublicSubnet: Type: AWS::EC2::Subnet Properties: VpcId: !Ref MyVPC CidrBlock: 10.0.1.0/24 AvailabilityZone: !Select [0, !GetAZs ''] MapPublicIpOnLaunch: true Tags: - Key: Name Value: PublicSubnet PrivateSubnet: Type: AWS::EC2::Subnet Properties: VpcId: !Ref MyVPC CidrBlock: 10.0.2.0/24 AvailabilityZone: !Select [1, !GetAZs ''] Tags: - Key: Name Value: PrivateSubnet InternetGateway: Type: AWS::EC2::InternetGateway Properties: Tags: - Key: Name Value: MyIGW InternetGatewayAttachment: Type: AWS::EC2::VPCGatewayAttachment Properties: InternetGatewayId: !Ref InternetGateway VpcId: !Ref MyVPC ``` #### CloudFront - CDN для глобального распространения контента - Интеграция с S3 и другими источниками - SSL/TLS сертификаты ```yaml # CloudFront Distribution Resources: MyDistribution: Type: AWS::CloudFront::Distribution Properties: DistributionConfig: Origins: - Id: S3Origin DomainName: !GetAtt MyBucket.RegionalDomainName S3OriginConfig: OriginAccessIdentity: !Sub 'origin-access-identity/cloudfront/${MyOriginAccessIdentity}' DefaultCacheBehavior: TargetOriginId: S3Origin ViewerProtocolPolicy: redirect-to-https AllowedMethods: [GET, HEAD] CachedMethods: [GET, HEAD] ForwardedValues: QueryString: false Cookies: Forward: none Enabled: true DefaultRootObject: index.html PriceClass: PriceClass_100 ``` ### 5. Security Services #### IAM (Identity and Access Management) - Управление пользователями и доступом - Роли и политики - MFA и временные credentials ```yaml # IAM Role Configuration Resources: EC2Role: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: ec2.amazonaws.com Action: sts:AssumeRole Policies: - PolicyName: S3Access PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - s3:GetObject - s3:PutObject Resource: !Sub '${MyBucket}/*' ManagedPolicyArns: - arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy EC2InstanceProfile: Type: AWS::IAM::InstanceProfile Properties: Roles: - !Ref EC2Role ``` #### KMS (Key Management Service) - Управление ключами шифрования - Шифрование данных - Интеграция с другими сервисами ### 6. Monitoring and Logging #### CloudWatch - Мониторинг ресурсов и приложений - Логи и метрики - Алерты и автоматические действия ```yaml # CloudWatch Alarms Resources: HighCPUAlarm: Type: AWS::CloudWatch::Alarm Properties: AlarmName: HighCPUUtilization AlarmDescription: Alarm when CPU exceeds 80% MetricName: CPUUtilization Namespace: AWS/EC2 Statistic: Average Period: 300 EvaluationPeriods: 2 Threshold: 80 ComparisonOperator: GreaterThanThreshold Dimensions: - Name: InstanceId Value: !Ref MyInstance AlarmActions: - !Ref ScaleUpPolicy LowCPUAlarm: Type: AWS::CloudWatch::Alarm Properties: AlarmName: LowCPUUtilization AlarmDescription: Alarm when CPU is below 20% MetricName: CPUUtilization Namespace: AWS/EC2 Statistic: Average Period: 300 EvaluationPeriods: 2 Threshold: 20 ComparisonOperator: LessThanThreshold Dimensions: - Name: InstanceId Value: !Ref MyInstance AlarmActions: - !Ref ScaleDownPolicy ``` #### CloudTrail - Аудит API вызовов - Логирование действий пользователей - Соответствие требованиям ### 7. Application Services #### API Gateway - Управление API - Аутентификация и авторизация - Rate limiting и throttling ```yaml # API Gateway Configuration Resources: MyAPI: Type: AWS::ApiGateway::RestApi Properties: Name: MyAPI Description: My API Gateway EndpointConfiguration: Types: - REGIONAL MyResource: Type: AWS::ApiGateway::Resource Properties: RestApiId: !Ref MyAPI ParentId: !GetAtt MyAPI.RootResourceId PathPart: myresource MyMethod: Type: AWS::ApiGateway::Method Properties: RestApiId: !Ref MyAPI ResourceId: !Ref MyResource HttpMethod: GET AuthorizationType: NONE Integration: Type: AWS_PROXY IntegrationHttpMethod: POST Uri: !Sub 'arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${MyLambdaFunction.Arn}/invocations' ``` #### SNS (Simple Notification Service) - Уведомления и сообщения - Push, SMS, Email - Интеграция с приложениями ```yaml # SNS Topic Configuration Resources: MyTopic: Type: AWS::SNS::Topic Properties: TopicName: my-topic DisplayName: My Topic Subscription: - Protocol: email Endpoint: admin@example.com - Protocol: sqs Endpoint: !GetAtt MyQueue.Arn ``` #### SQS (Simple Queue Service) - Очереди сообщений - Асинхронная обработка - Dead letter queues ```yaml # SQS Queue Configuration Resources: MyQueue: Type: AWS::SQS::Queue Properties: QueueName: my-queue VisibilityTimeoutSeconds: 30 MessageRetentionPeriod: 1209600 ReceiveMessageWaitTimeSeconds: 20 RedrivePolicy: deadLetterTargetArn: !GetAtt MyDeadLetterQueue.Arn maxReceiveCount: 3 MyDeadLetterQueue: Type: AWS::SQS::Queue Properties: QueueName: my-dlq MessageRetentionPeriod: 1209600 ``` ## Лучшие практики AWS ### 1. Security - Используйте IAM роли вместо ключей доступа - Включайте шифрование для всех данных - Регулярно ротируйте ключи - Используйте VPC для изоляции ресурсов ### 2. Cost Optimization - Используйте Spot Instances для не критичных workload - Настройте Lifecycle policies для S3 - Мониторьте использование ресурсов - Используйте Reserved Instances для стабильных workload ### 3. Monitoring - Настройте CloudWatch алерты - Используйте CloudTrail для аудита - Мониторьте затраты с помощью Cost Explorer - Настройте автоматическое масштабирование ### 4. Backup and Recovery - Включите автоматические бэкапы для RDS - Используйте Cross-Region replication для критичных данных - Тестируйте процедуры восстановления - Документируйте disaster recovery планы ### 5. Networking - Используйте приватные подсети для баз данных - Настройте NAT Gateway для исходящего трафика - Используйте VPC Endpoints для AWS сервисов - Настройте Security Groups с минимальными правами