Files
Alexander Abakumov 15e744da49 Initial commit: Complete Software Architecture course with 11 modules
- Added comprehensive course structure with 11 modules
- Included theoretical content, practical examples, and tasks
- Multi-language code examples (Java, Rust, Node.js, Python)
- Detailed analysis of architectural approaches and trade-offs
- Complete caching strategies documentation
- Architecture examples from real-world systems (Twitter, Netflix, Uber)
- Structured navigation and learning path
- Ready for educational use
2025-09-09 22:08:07 +03:00

16 KiB

AWS (Amazon Web Services)

Навигация


Основные сервисы AWS

1. Compute Services

EC2 (Elastic Compute Cloud)

  • Виртуальные серверы в облаке
  • Различные типы инстансов (t3, m5, c5, r5, etc.)
  • Автомасштабирование с Auto Scaling Groups
  • Spot Instances для экономии
# 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 сервисами
# 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

  • Платформа для развертывания приложений
  • Автоматическое управление инфраструктурой
  • Поддержка различных языков и фреймворков
# 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 сервисами
# 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)
# 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 для высокой доступности
# 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 база данных
  • Управляемый сервис
  • Автоматическое масштабирование
  • Глобальные таблицы
# 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 инфраструктурой
# 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 сертификаты
# 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
# 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

  • Мониторинг ресурсов и приложений
  • Логи и метрики
  • Алерты и автоматические действия
# 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
# 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
  • Интеграция с приложениями
# 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
# 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 с минимальными правами