AWS 落穂拾い (Computing)
[履歴] [最終更新] (2022/09/23 23:12:52)
最近の投稿
注目の記事

EC2 Placement Groups

  • Placement Group Strategies
    • Cluster → ある AZ 内の同じ rack 内に配置することで、インスタンス間の通信遅延を小さくします。
    • Spread → 異なる AZ に配置することに加え、ある AZ 内において利用するハードウェアが重複しないように配置します。
      • AZ 内のインスタンス数の上限が 7 となります。
    • Partition → ある AZ 内に最大 7 の partition を作成し、partition 内に EC2 インスタンスを配置します。Partition 間でハードウェアが重複しないようにします。
      • EC2 インスタンスは partition の情報を metadata として取得できます。
  • EC2 インスタンスを stop した状態で CLI を利用すれば、Placement Group にインスタンスを出し入れできます。Change the placement group for an instance

Placement Group を作成しておきます。

Uploaded Image

EC2 インスタンス起動時にパラメータとして placement group を指定できます。

Uploaded Image

EC2 Enhanced networking (拡張ネットワーク)

EC2 インスタンス purchasing options

  • Instance purchasing options
  • On-Demand Instances。
  • Spot Instances → 停止されることがある代わりに低料金です。
  • SP と RI Compute Savings Plans and Reserved Instances
    • Compute Savings Plans → Fargate や Lambda にも適用されます。低割引率。
    • EC2 Instance Savings Plans → 高割引率。
    • Convertible Reserved Instances → 低割引率。
    • Standard Reserved Instances → 高割引率。
  • Dedicated Hosts
    • 物理サーバを予約します。
    • Windows Server, Microsoft SQL Server といった、per-socket, per-core でライセンス料金が発生するソフトウェア利用時に活用できます。
    • host affinity を設定することで、同じ Dedicated Host でインスタンスが再起動するように設定できます。
  • Dedicated Instances
    • socket や core は見えません。Differences between Dedicated Hosts and Dedicated Instances
    • BYOL (Bring Your Own License) は基本的にサポートされません。
    • 他の AWS アカウントとは独立した物理サーバでインスタンスを起動する必要がある場合に活用します。
    • VPC tenancy または EC2 Instance 設定の tenancy について、いずれか片方が dedicated となっている場合は、結果として dedicated instance となります。下記参照。

Uploaded Image

Configure instance tenancy with a launch configuration

EC2 インスタンスのメトリクス

  • Monitor Amazon EC2
  • CPU、Network に関するメトリクスが CloudWatch に連携されます。
  • Disk に関するメトリクスは、インスタンスストアについてのみ CloudWatch に連携されます。Instance metrics
  • Types of status checks
    • System status checks → AWS が管理するハードウェアレベルでのチェックです。インスタンスを stop して start すると、別のハードウェアにマイグレーションされるため、暫定的な対処法として有効です。
    • Instance status checks → ハードウェアの上で動作するインスタンス VM のチェックです。
  • メモリのメトリクスを取得するためには、CloudWatch Agent が必要です。Collect metrics and logs from Amazon EC2 instances and on-premises servers with the CloudWatch agent

EC2 インスタンスのストレージ

Uploaded Image

Storage

  • EBS
    • ネットワーク的にインスタンスにアタッチされます
    • Snapshot は S3 に保存されます。
    • io2 Block Express を利用すれば、約 25 万 IOPS まで性能が出せます。Amazon EBS volume types
    • gp2/gp3 の最大 IOPS は 16,000 です。
  • Instance Store (Ephemeral Disk)
    • EBS よりも高い IOPS 性能となります。
    • EC2 インスタンスと物理的に一体となっており、インスタンスを Stop するとデータが消失します。(reboot では消えません。)

HPC (high-performance computing)

Auto Scaling Groups

  • 動的スケーリングポリシー Dynamic scaling for Amazon EC2 Auto Scaling
    • Target Tracking Scaling → 例: ASG (Auto Scaling Group) の平均 CPU 使用率が 40% になるように動的スケーリング。
    • Simple / Step Scaling → 例: 上記 CPU 使用率が 70% 以上 / 30% 以下になり CloudWatch alerm がトリガされたら 2 unit 追加 / 1 unit 削除。
  • Scheduled Actions → 例: 金曜日の 18時になったら min capacity を 20 に変更。Scheduled scaling for Amazon EC2 Auto Scaling
  • Predictive Scaling Predictive scaling for Amazon EC2 Auto Scaling
    • 過去のワークロードの履歴から未来を推定して、スケーリング。
  • スケーリング判断時に利用される CloudWatch メトリクスの例。Monitor predictive scaling metrics with CloudWatch
    • ASG 平均 CPU 使用率。
    • EC2 インスタンスあたりのリクエスト数。
    • ネットワーク In/Out 通信料、等。
  • Spot Fleet → Spot インスタンスと On-Demand インスタンスを併用。Spot Fleet
  • Lifecycle Hooks → インスタンスが起動または終了した際の処理を指定可能です。Amazon EC2 Auto Scaling lifecycle hooks
  • AMI の更新 Replace Auto Scaling instances based on an instance refresh
    • Launch template/configuration を更新し、インスタンスを手動で terminate します。
    • または、Auto Scaling の EC2 Instance Refresh 機能を利用します。
  • Instance Refresh
    • 最小の healthy percentage を指定します。
    • インスタンスが使用可能になるまでの warm-up time を指定します。
  • Launch template の更新
    • ALB target group は同じ ASG とし、ASG 内の Launch template バージョンを更新する方法、または
    • ASG を新規に用意して ALB target group として追加し、新旧 ASG (ALB target group) へのトラフィックを split する方法、または
    • ALB と ASG のセットを新規に用意して、Route53 CNAME Weighted record を利用して、新旧 ALB へのトラフィックを制御する方法。
  • インスタンスの削除と新規作成の順序について。
    • Unhealthy となったインスタンスについては、削除されてから新規作成されます。
    • AZ のリバランス時には、新規作成されたインスタンスが稼働し始めてから、旧インスタンスを削除します。Amazon EC2 Auto Scaling benefits

ECS、Fargate

  • ECS クラスタ
    • EC2 インスタンスを Auto Scaling Group で起動する方法と、Fargate を利用する方法があります。What is AWS Fargate?
  • IAM ロール
  • Task
  • Service
    • Task を管理して常時起動するための機能です。Amazon ECS services
    • ALB を前段に設置して、Service 内の Task (コンテナプロセス) のポート番号に動的に紐付け可能です。Application Load Balancer
  • Specifying sensitive data using Secrets Manager
    • Secret Manager や SSM Parameter Store を用いて、Task の環境変数に認証情報などを渡すことができます。
  • Amazon ECS task networking
    • 既定値の awsvpc では、各 Task が VPC 内の ENI と Private IP を持ちます。
  • Service auto scaling
    • 内部的には Application Auto Scaling を利用しています。What is Application Auto Scaling?
    • EC2 Auto Scaling と同様の機能をコンテナレベルで提供します。
      • Target Tracking
      • Step Scaling
      • Scheduled Scaling
  • Fargate Spot
    • ECS を Fargate で利用する場合に利用できます。
  • ECS を EC2 インスタンスで利用する場合、前述の Spot Instance を ASG で管理して利用できます。
  • ECR

Lambda

  • CPU は RAM に依存して決定されます
  • その他の制限 Lambda quotas
    • 最大 15 分でタイムアウトします。
    • /tmp ストレージが既定では 512 MB 利用できます。
    • デプロイ時のパッケージは zip 圧縮された状態で 50 MB、unzip 状態で 250 MB の制限があります。
    • 同時実行数には 1000 のリミットが存在します。上限緩和が可能です。
    • Lambda でコンテナイメージを用いる際、イメージサイズには 10GB の制限があります。
    • Lambda リクエスト時の request/response には、同期実行で 6 MB、非同期実行時で 256 KB の制限があります。
  • X-Ray Using AWS Lambda with AWS X-Ray
    • Lambda には Cold と Warm 状態があり、Cold 状態の場合、invoke するまでに 100ms 程度の latency が発生します。Understanding how functions warmers work
    • Lambda から他の AWS マネージドサービスを起動する際にも latency が発生します。
    • X-Ray を用いると、連鎖する latency を可視化できます。
      • 参考: プログラミング言語 SDK からも X-Ray を利用できます。AWS X-Ray API
  • 権限 Lambda execution role
    • 必要な権限を持つ IAM ロールを Lambda に設定します。
    • Lambda の resource-based policy を設定して、他からの invoke を許可できます。Using resource-based policies for Lambda
  • Lambda に ENI を持たせて、VPC 内に配置することができます。VPC networking for Lambda
  • Lambda の実行ログは CloudWatch Logs に格納されます。
  • Lambda のメトリクスは CloudWatch Metrics で確認できます。
  • Lambda 実行時の IAM ロールには、CloudWatch への書き込み権限を付与しておく必要があります。Lambda execution role
  • 非同期処理を実行する Lambda。Asynchronous invocation
    • invoke もとは S3、SNS、CloudWatch Events 等です。
    • 失敗時のリトライは Lambda 自身が行います。最大3回。
      • DLQ (dead-letter-queue) を SNS または SQS に指定できます。
      • リトライ処理が重複しても問題ないように、idempotent (冪等性) を持つようにします。
    • 非同期実行 lambda function の結果を、SQS や SNS、Lambda、EventBridge bus に連携できます。
  • Lambda event source mappings
    • SQS、DynamoDB Streams、Kinesis Data Streams 等の、lambda を invoke できないリソースを polling します。
    • polling した結果 event で lambda function を batch 実行します。
      • function の実行が失敗した時はリトライされます。
      • リトライ処理が重複しても問題ないように、idempotent (冪等性) を持つようにします。
  • Lambda function versions
    • Lambda をデプロイするとバージョンが新規に作成されます。
    • バージョンは immutable です。
    • $LATEST は最新のバージョンを指します。
  • Lambda function aliases
    • バージョンを指すポインタです。mutable です。
    • $LATEST を指すこともできます。
    • 二つのバージョンを比率を指定して指すこともできます。
    • エイリアスからエイリアスを指すことはできません。
    • 例: API Gateway で Lambda エイリアスを指す場合、エイリアスが指す Lambda バージョンを更新する際に API Gateway 側の設定変更は発生しません。
  • Creating and sharing Lambda layers
    • 複数の関数から共通して利用したい処理を layer として扱うことができます。
  • CodeDeploy Deployment configurations on an AWS Lambda compute platform
    • 上記エイリアスが指すバージョンの更新をサポートします。
    • Linear → 例: 10%/3分 のペースで比率を調整。
    • Canary → 例: まず 10% で試してみて、5分間問題が起きなければ 100% 切り換え。
    • ALlAtOnce → 一括でバージョンを切り換え。
    • デプロイ前後に hook を入れて、ヘルスチェックを実施できます。
  • API Gateway の他に、ALB を Lambda の前段に設定することもできます。

ALB、NLB、CLB

  • ALB は WebSocket にも対応しています。Listener configuration
  • Gateway Load Balancer (GWLB) What is a Gateway Load Balancer?
    • IP レイヤ (レイヤ3、Network Layer) における LB です。
    • L7 の ALB や L4 の NLB よりも低レイヤです。
  • ALB target group → EC2 インスタンス、ECS タスク、Lambda、Private IP アドレス。Target type
  • NLB は AZ(subnet) 毎に 1 つの静的 IP を持ちます。Availability Zones
    • EIP をアサインすることもできます。
    • つまり、ALB と異なり、NLB は固定 IP を持つことができます。
  • NLB target group → EC2 インスタンス、Private IP アドレス、ALB。Target type
    • 固定 IP を持つ NLB の target に ALB を設定することで、固定 IP で ALB にアクセスできます。
  • NLB にセキュリティグループを設定することはできません。
    • Client IP preservation を有効化している場合、NLB target の EC2 インスタンス等のセキュリティグループで許可すべき IP は、NLB の IP ではなく、NLB のクライアントの IP となります。
  • GWLB target group → EC2 インスタンス、Private IP アドレス。Target groups for your Gateway Load Balancers
  • Cross-zone load balancing
    • ALB では有効になっており、無効化できません。
    • NLB、GWLB では無効になっており、有効化すると料金が発生します。

Cross-zone load balancing が無効である場合

Uploaded Image

Cross-zone load balancing が有効である場合

Uploaded Image

  • Sticky Sessions (Session Affinity) Sticky sessions for your Application Load Balancer
    • CLB、ALB で利用可能です。
    • 同じバックエンドに接続されるように cookie を利用します。
  • ルーティングアルゴリズム
    • Least Outstanding Requests → pending/unfinished なリクエスト数が最小のインスタンスにルーティングします。ALB、CLB(L7) で利用できます。Routing algorithm
    • Round Robin → ALB と CLB(L4) で利用できます。
    • Flow Hash → プロトコル、src/dst ip/port、TCP sequence number で生成した hash 値によってルーティングします。NLB で利用できます。Sticky Sessions のように同じ target にルーティングされます。Network Load Balancer overview

API Gateway

AWS AppSync

Route53

  • Alias Choosing between alias and non-alias records
    • CNAME と似ていますが、AWS リソースを指す、Route53 独自の概念です。
      • ELB、CloudFront、API Gateway、Beanstalk、S3 Websites、VPCE、同じ zone 内の Route53 レコード 等。
      • EC2 DNS name に対する Alias 登録はできません。
    • DNS zone 名に関する挙動が CNAME とは異なります。
      • 例: example.com zone において example.com に対する CNAME を登録はできませんが、www.example.com に対しては CNAME 登録が可能です。Zone Apex
      • Alias の場合は example.com に対しても登録できます。
    • TTL 値は AWS リソース毎に既定値が用いられます。
  • Routing Policy Choosing a routing policy
    • Simple
      • A レコードを複数登録した場合に、ルーティング先を選択するのは client 側です。
    • Weighted
      • 同じレコードを複数登録した場合に、ルーティング先を Route53 側で重み付けできます。
    • Latency-based
      • 同じレコードを複数登録した場合に、遅延 (latency) が小さくなるようにルーティングされます。
    • Geolocation
      • Latency-based と異なり、user の location に依存して、解決される先を決定します。
      • 解決できない場合の default location のレコードを登録しておく必要があります。
    • Failover
      • Primary として登録したレコードと、secondary として登録したレコードを準備します。
      • Primary 側の health check が失敗すると、secondary のレコードで名前解決 (ルーティング) するようになります。
  • Traffic flow Using traffic flow to route DNS traffic
    • 上記 routing policy の設定が複雑化していくと管理が難しくなります。
    • 可視化して管理を手助けするツールです。
  • Hosted Zone Working with hosted zones
    • Public
      • ネームサーバがインターネットに公開されます。
      • DNSSEC を利用できます。
    • Private
      • VPC に紐付けて、VPC 内から利用します。
      • インターネットから利用することはできず、そのため DNSSEC はサポートされません。
      • VPC 設定 enableDnsHostnames、enableDnsSupport を有効化する必要があります。
  • Health Check Types of Amazon Route 53 health checks
    • simple routing policy はルーティングが単一であることを想定した仕様のため、Health check は利用できません。
    • 判定方法について How Amazon Route 53 chooses records when health checking is configured
    • 種別
      • AWS リソースのエンドポイントを監視。
        • public な AWS リソースに対してのみ利用できます。
          • health check 自身は private な AWS リソースエンドポイントを監視できず、CloudWatch の併用が必要です。
        • 2xx または 3xx を返した場合に pass となります。
        • 約 15 ロケーションの global なアクセス元から health check します。
          • アクセスもと IP を AWS リソース側で許可しておく必要があります。
        • Search string を設定しておくことで、レスポンス内のテキストをもとに health check できます。How Route 53 determines the status of health checks that monitor an endpoint
      • 他の health check を監視 (calculated health checks)。
        • 他の child health check を束ねる parent health check を設定できます。
        • child が何個 pass すれば parent が pass となるかを設定します。
      • CloudWatch Alarms を監視。
        • Private Hosted Zone における health check として利用できます。Public Hosted Zone でも利用できます。
        • VPC 外に存在する health checker は、Private な AWS リソースのエンドポイントを直接は監視できません。Configuring failover in a private hosted zone
          • CloudWatch Metric を作成して、CloudWatch Alarm を紐付けます。
          • health checker で CloudWatch Alarm を監視します。
  • failover の種別 Active-active and active-passive failover
    • Active-Active
      • 上述の Failover Routing Policy を用いない場合です。
      • Health Check 結果が unhealthy でない resource がクエリ結果として返される候補となります。
    • Active-Passive
      • 上述の Failover Routing Policy を用いる場合です。
  • Getting started with Route 53 Resolver
  • AWS 内であれば、Inbound Endpoint および Outbound Endpoint は不要です。

AWS Global Accelerator

  • What is AWS Global Accelerator?
  • AnyCast IP (複数のサーバに同じ IP で到達でき、一番近くのサーバが応答) が 2 つ割り当てられます。
  • インターネット上の経路を短縮することで、アプリケーションとの通信を高速化するためのサービスです。
  • CloudFront と異なり、キャッシュしません。
  • CloudFront と異なり、HTTP(S) だけでなく TCP/UDP にも対応します。
  • EIP、EC2 インスタンス、ALB、NLB 等に対応します。
  • バックエンドのアプリケーションのヘルスチェックも可能です。
  • AWS Shield による DDoS 対策にもなります。
  • 種別
    • standard accelerator
      • 負荷分散を目的としています。
      • ユーザに近く、health check 結果が healthy なエンドポイントに到達します。
    • Custom routing accelerator
      • 特定の EC2 インスタンスの IP と Port に到達することを目的としています。
      • オンラインゲームにおけるマッチメイキングの例のように、複数のユーザが同じ EC2 インスタンスに到達する必要がある場合に活用されます。
      • VPC subnet を endpoint 作成時に指定し、Subnet 内の EC2 インスタンスに到達します。

EC2 AMI

  • 他の AWS アカウントから利用するためには、AMI を共有します。Share an AMI with specific AWS accounts
  • AMI は、あるリージョンに属するリソースです。他のリージョンから参照して利用することはできず、コピーが必要です。Copy an AMI
関連ページ
    Kinesis Kinesis Streams データは 3 AZ にレプリケーションされます。Amazon Kinesis Data Streams FAQs 24 時間 (既定値) から 1 年までデータ保持できます。Changing the Data Retention Period SQS と異なり、ストリームのデータを再処理できます。