コンピューティング - SunHigh105/AWS_SAA GitHub Wiki
EC2
インスタンスタイプ
- 汎用: A, M, T
- メモリ最適化: R, X
- メモリ内の大きいデータセットを処理するワークロードに対して高速なパフォーマンスを実現
- コンピューティング最適化: C
- 高パフォーマンスが要求されるワークロード向け
- ストレージ最適化: D, H, I
- 大規模データに対する高いシーケンシャル読み取りおよび書き込みアクセスを必要とするワークロード用に設計
- 数万回の低レイテンシーとランダム I/O オペレーション/秒 (IOPS) をアプリケーションに提供するように最適化
- 高速コンピューティング: F, G, P
- GPU(グラフィック描画用半導体チップ)が必要な時に利用
- ゲーミング処理、グラフィック処理、機械学習の処理向け
- ハードウェア専有: ホストHWのレベルで他のAWSアカウントに属するインスタンスから物理的に分離 (同じAWSアカウントのインスタンスとは共有する可能性あり)
- Dedicated Host: 別のIAMグループと物理サーバを共有せず、物理サーバを占有
- オンデマンドインスタンス
- 利用時間で課金
- スポットインスタンス
- 未使用のEC2インスタンス利用 一時的な容量拡張に最適
- 最大90%割引
- スポットインスタンスを終了する
- リクエストが有効である限り新たなインスタンスが起動される
- リクエストをキャンセル→スポットインスタンスを終了
- リザーブドインスタンス
- 1年か3年の期間を決めて前払い
- 有効期限が切れる前にインスタンスを終了しないと、オンデマンド価格を請求される
- 期限前に利用終了する場合、マーケットプレイスで販売することでコスト損失を減らせる
- スケジュールドリザーブドインスタンスは今後の利用ができなくなった
- オンデマンドキャパシティ予約
- スケジュールドリザーブドインスタンスの代わりに使用
- 1年間または3年間のコミットメント期間なし
- 特定の期間中EC2を利用できるよう、事前にキャパシティを予約
- Saving Plansやリージョンごとのリザーブドインスタンスをキャパシティ予約に使用すると、請求額を割引できる
- Saving Plans
- コスト削減が可能な購入プラン
- Compute Saving Plan
- EC2 Instance Saving Plans
- ベアメタルサーバ(クラウド用語)
- 「ベアメタル」自体は「何もないまっさらなサーバ」を指す
- ホストコンピュータのOSなどに直接アクセスする特殊なワークロードに利用
ストレージタイプ
- 汎用SSD
- スループット最適化HDD: 高スループット アクセス頻度高 コスト最適
- EBSプロビジョンどIOPS SSD: 低レイテンシ 高コスト
- コールドHDD: アクセス頻度低 低コスト
インスタンスのライフサイクル
- インスタンス実行中(running)は課金
- 休止準備中は課金
- リザーブドインスタンスは完全削除(terminated)しても契約期間中は課金
プレイスメントグループ
単一アベイラビリティゾーン内でインスタンスを論理的にグループ化 パフォーマンスや耐障害性の向上
- クラスター
- ノード間通信に必要な低レイテンシ・高スループットのパフォーマンスを実現
- パーティション
- インスタンスの複数の論理パーティションに分散
- ハードウェア障害の頻度軽減
- スプレッド
- 少数のインスタンスを基盤となるハードウェア全体に配置
- それぞれ独自のネットワークおよび電源のある異なるラックに配置
- 少数のインスタンスを基盤となるハードウェア全体に配置
- ブートストラップ
- AWSリソースを起動するときBashシェルスクリプトを利用
- ゴールデンイメージ
- 既存リソース(EC2, RDS, EBS)のスナップショット
- 起動時間の短縮ができる
- ユーザデータ
- インスタンス起動時にスクリプトを実行できる
AMI (Amazon Machine Image)
- 含まれるもの
- 一つまたは複数のEBSスナップショット
- instande-store-backed AMI
- インスタンスのルートボリュームのテンプレート
- 起動許可
- ブロックデバイスマッピング
EC2 Image Builder
- AWSまたはオンプレミスで使用するための仮想マシンとコンテナイメージの構築・テスト・及びデプロイを簡素化するためのツール
- グラフィカルなインタフェース、組み込み自動化、AWSが提供するセキュリティ設定により、イメージの最新化でセキュアに保つ労力を大幅軽減
フリート
- EC2フリート
- オンデマンド、リザーブド、スポットインスタンスの購入オプションを一緒に使用
- 複数のAZにまたがり複数のインスタンスタイプを起動できる
- スポットフリート
- スポットインスタンスのセット
- フリートで定めた容量を満たすまでスポットインスタンスを起動
ROA (Route Origin Authorization)
- RIRを介して作成されるドキュメント
- Amazonが特定のAS番号のアドレス範囲を公開することを承認
- パブリクにルーティング可能なIPv4またはIPv6アドレス範囲の一部または全部をオンプレミスネットワークからAWSアカウントに導入
- 参考: Amazon EC2 で自分の IP アドレスを使用する (BYOIP)
モニタリング
- デフォルト...CPU使用率、ネットワーク使用率、ディスクパフォーマンス、ディスク読み書き
- カスタム...メモリ使用率、ディスクスワップの使用率、ディスクベースの使用状況etc
Elastic Fabric Adapter(EFA)
- 機能が追加されたENA(Elastic Network Adapter)
- HPC(High Performance Computing)と機械学習アプリケーションを高速化するため、EC2にアタッチできるネットワークデバイス
その他
- 削除保護の有効化
- インスタンスの誤削除を防ぐ
DisableApiTermination
属性を有効にする
- 1リージョンで実行できるオンデマンドインスタンスの最大数
- vCPU ベースのオンデマンドインスタンス制限に変更となった
- vCPU: 実行中のインスタンスに接続されている仮想中央処理ユニット
- それ以前は最大20
- vCPU ベースのオンデマンドインスタンス制限に変更となった
- インスタンスメタデータ取得
- リンクローカルアドレスから取得
http://169.254.169.254/latest/meta-data/
or
http://[fd00:ec2::254]/latest/meta-data/
Auto Scaling
- 設定手順
- AMIを準備
- 起動設定
- Auto Scalingグループ設定
起動設定
※ドキュメントでは起動設定を使用しないことが強くお勧めされている
- EC2インスタンスを起動するために使用する設定テンプレート
- インスタンスの情報を指定
- AMIのID
- インスタンスタイプ
- キーペア
- セキュリティグループなど
- 関連づけできる起動設定は1つだけ
- 起動設定の変更には新たな起動設定を作成し置き換える必要あり
Auto Scaringグループ
- 論理的なインスタンスの集合
- グループサイズは、希望する容量と設定したインスタンスの数によって異なる
- 設定内容
- 希望する容量: AutoScalingが実行されてない状態でのインスタンス数
- 最小キャパシティ: スケールイン(インスタンス削除)時の下限のインスタンス数
- 最大キャパシティ: スケールアウト時に起動するインスタンスの最大数
- ヘルスチェック
- デフォルト: EC2
- ELBのヘルスチェックを有効にすることもできる
グループのサイズのスケーリング
- 現在のインスタンスレベルの常時維持
- 指定されたインスタンス数を常に維持
- 手動スケーリング
- 最も基本的な方法
- 最大容量, 最小容量, 希望する容量の変更のみを指定
- スケジューリングによるスケーリング
- 日付と時刻に基づいて自動的に実行
- 需要に基づくスケーリング(動的スケーリング)
- 需要の変化に応じてAutoScalingグループを動的にサイズ変更
- 予測スケーリング
スケールインの順序(デフォルト)
- インスタンス数(多いAZ優先)
- 起動設定の古いAZ優先
- 次の課金発生までの時間が最も短いインスタンス優先
- ランダム
その他
- SQSキューサイズ(メッセージの数)に応じた設定も可能
- スケーリングがうまくいかない場合、24時間経つと自動停止
- Desired capacity: 既存のAuto Scalingグループのサイズを手動で変更して、稼働するインスタンス数を増減できる
- クールダウン期間
- 前のスケーリングが実行されるまでに追加のインスタンスの実行/起動が一定期間できない
- デフォルト: 300秒
Elastic IP
- 静的なIPアドレス割り当て
- 利用していない時間ごとに請求発生
- フローティングIP: Elastic IPをフローティングすることで即時に別のEC2インスタンスへトラフィックを切り替えられる
Lambda
- 1日あたり数個〜一秒あたり数千レベルまで自動スケーリング可能
- 一時ボリューム量は最大512MB
- Invocation: Lambda関数の名前空間にあるメトリクス イベントまたはAPI呼び出しに応じて呼び出される関数の回数を測定
Lambda Layer
- 複数のLambda関数で共通するコンポーネントをLambda Layerとして定義し参照できる (5つまで)
エイリアス
- 特定のバージョンのLambda関数を指す
- エイリアスは一意のARN(Amazon Resource Name)を持つ
イベントソースマッピング
- Lambdaのリソースをイベントソースから読み取りLambda関数を呼び出す
- Lambda関数を直接呼び出さないサービスのストリームまたはキューからアイテムを処理できる
- エイリアスARNを用いれば、関数のバージョン変更があってもマッピングを更新する必要がない
Lambdaエッジ
- LambdaとCloudFrontのエッジロケーション機能を合わせたサービス
- 世界中でユーザに近いロケーションにおいてコード実行できる
- サーバ管理を行わずWebアプリをグローバルに分散させパフォーマンス向上
Lambdaコンソールでの継続的デリバリーによるアプリケーションの作成
他のAWSサービスでの使用
- Amazon Kinesis Data Firehose で AWS Lambda を使用する
- Amazon Aurora MySQL DB クラスターからの Lambda 関数の呼び出し
- (postgresも可)
- データ更新イベント(INSERT, DELETE, UPDATE)をトリガーにLambdaを実行
- IAMポリシーを作成し、LambdaのIAMロールにアタッチ → DBクラスターの
aws_default_lambda_role
パラメータにIAMロールのARNを設定
ECS (Elastic Container Service)
- dockerなどコンテナ化されたアプリケーションをAWS上で簡単に実行・スケール
サービスの負荷分散
- サービスのタスク間でトラフィックを均等に分散
- EC2でホスト: ALB, NLB, CLBをサポート
- Fargateでホスト: ALB, NLBをサポート
Fargate
- サーバレスで従量課金制のコンピューティングエンジン
- サーバ管理(EC2のインスタンスタイプ選択、クラスターのプロビジョニングとスケール等)
- ECSとEKSに対応
EKS
- AWSでKubernetesを簡単に実行できるようにするマネージド型サービス
- 2019/12よりFargate上でKubernetesの利用が可能に
AWS Elastic Beanstalk
- アプリケーションのデプロイと管理を簡素化
- 容量のプロビジョニング、ロードバランシング、スケーリング、およびアプリケーション状態モニタリングなどを自動的に処理
- ECSなどのDockerにホストされたWebアプリケーションにも対応
- ECSを使用して複数コンテナのデプロイを調整、ECSのタスク処理
- 参考: マルチコンテナ Docker プラットフォーム (Amazon Linux AMI) の使用