AWS完全に理解する

2022-03-05に作成

AWSに対して学習した際のアウトプットを記します。

基本的には、以下から対応するサービスの資料を参照してまとめてます。

サービス別資料 | AWS クラウドサービス活用資料集

所有者限定モードのためこのボードには投稿できません ボードとは?

AWS Batch完全に理解した

AWS Batchとは

バッチコンピューティングワークロードを提供してくれるコンピューティングリソースです。

AWS Batch とは - AWS Batch

学習成果

ほぼ下記資料の要約です。

20190911 AWS Black Belt Online Seminar AWS Batch (PDF)

バッチコンピューティングにおけるクラウド活用

  • このAWS Batchにおけるバッチコンピューティングとは、シミュレーションなどの高負荷処理をスパコンやクラスタなどで順次実行するような処理のことを意味する
  • 定型業務におけるバッチ処理については、AWS Batchでは想定していない(!)
    • SQSなどによるバッチ処理の待機みたいなものを前提としている?
  • 多数のジョブを同時実行して処理時間を短縮する

AWS Batch: 概要

  • スケジューラや計算ノードなどの管理が不要
  • Dockerコンテナイメージをもとにジョブの作成
  • AWS Batchの利用自体は無料
    • EC2インスタンスに課金
  • バッチコンピューティング環境の提供
    • ジョブキュー
    • コンピューティング環境
    • タイムアウト、リトライ処理

AWS Batch: 他サービスの方が適しているケース

  • コンテナ化が難しい
  • 既存のジョブスケジューラからの移行が難しい
    • AWS ParallelCluster
  • 1つのジョブが数行など短時間で終わる
    • AWS Step Functions + AWS Lambda
    • S3 Batch
  • 機械学習用と
    • Amazon SageMaker

AWS Batch: アーキテクチャ

ジョブ定義

  • ジョブ作成時のテンプレート
    • コンテナイメージ
      • コンテナ内の実行コマンド
      • パラメータ
      • 再試行戦略・タイムアウト戦略
    • IAM Role
    • 要求性能
    • など

ジョブ

  • AWS Batchによって実行される作業単位
    • 元となるジョブ定義
    • 投入先ジョブキュー
    • コンテナイメージ
    • 要求性能
    • シングルジョブ or 配列ジョブ
    • ジョブの依存関係
    • など

ジョブキュー

  • 投入されたジョブの待ち行列となる場所
    • 実行先コンピューティング環境
    • ジョブキューの優先度
      • ジョブの優先度じゃなくて、キューの優先度らしい

コンピューティング環境

  • 実際に計算を行うECSクラスター
    • マネージド or アンマネージド
    • AMI
    • EC2起動テンプレート
    • オンデマンド or スポット
    • 最小vCPU数、最大vCPU数
      • 最小vCPU数を0に設定すると、ジョブのない時はインスタンスを起動しないことが可能
    • 許可されたインスタンスタイプ
    • VPC, Subnet, SecurityGroup
    • など

コンテナレジストリ

  • Dockerコンテナイメージ置き場
    • ECR
    • Docker Hub
    • など

ストレージ

  • 永続化が必要なデータの保存先
    • S3
      • 基本的には第1候補
      • マウントして扱うことができない
    • EFS
      • NFSによりマウント可能
      • パフォーマンスが利用要領に依存する
    • FSx for Lustre
      • マウント可能かつ高スループットでS3とも連携可能
      • 専用クライアントが必要なために独自AMIの作成が必要

AWS Batch: 機能

機能説明

  • ジョブの状態遷移
    1. Submitted
      1.1 Pending(遷移しない場合もある)
    2. Runnable
      • EC2インスタンスの状態を待っている状態
      • ジョブの要求リソースが確保できない場合はここで停止する
    3. Starting(遷移しない場合もある)
    4. Running
    5. Succeeded or FAILED
  • ジョブの順序
    • 配列ジョブ
      • 複数の子ジョブを作成可能
      • 子ジョブは自分の配列IDを取得可能
    • ジョブ依存関係
      • 依存関係に指定したジョブが完了したら実行可能になる

機能

  • Amazon SNSにジョブ状態の変化を通知可能
  • ジョブパターンの種類を設定可能
    • 集約パターン
    • 前処理パターン
    • シーケンシャルパターン
  • マルチノードによる並列ジョブも作成可能

活用方法

  • ジョブの投入方法
    • マネージメントコンソールから
    • CLIから
    • S3へのファイルアップロードをトリガーにしたAWS Lambdaから
    • Amazon EventBridgeから
  • スポットインスタンスを活用するとよい
    • 優先度の低いスポット用ジョブキューと優先度の高いオンデマンド用ジョブキューを分ける
    • スポット用バッチが失敗した場合にSNS経由でオンデマンド用バッチを実行する
  • 複雑なジョブワークフローにはAWS Step Functionsと併用するとよい
  • 基本的に、バッチ実行中に落ちてしまった場合のことを考える必要がある
    • 冪等である必要がある
    • 一度失敗してもやり直すだけでよい仕組みである必要がある