PowerShellでAWS Batchのコンピューティング環境を制御し、オンデマンドとスポットインスタンスを使い分ける方法

AWS Batchを利用する際に、コンピューティング環境の管理はコストとパフォーマンスの最適化に直結します。特に、オンデマンドインスタンスとスポットインスタンスの適切な使い分けは、コスト削減と運用の安定性の両面で重要なポイントとなります。

PowerShellを活用すれば、AWS Batchのコンピューティング環境を効率的に制御し、リソースを柔軟に管理することが可能です。本記事では、AWS Batchの基本から、PowerShellによるインスタンスの制御方法、オンデマンドとスポットインスタンスの使い分け、さらには動的な変更手法までを詳しく解説します。

この知識を活用することで、AWS Batchの運用をより最適化し、コストを抑えつつも安定した環境を構築できるようになります。

目次

AWS Batchとコンピューティング環境の基本


AWS Batchは、大量のバッチ処理ジョブを効率的にスケジューリングし、管理するためのマネージドサービスです。AWS Batchを利用することで、インフラストラクチャの設定やスケーリングを自動化し、複雑なワークロードをシンプルに管理できます。

AWS Batchの主要コンポーネント


AWS Batchは、以下の主要コンポーネントで構成されています。

1. ジョブ


AWS Batchで実行されるタスクを「ジョブ」と呼びます。各ジョブはDockerコンテナとして実行され、計算処理を担います。

2. ジョブ定義


ジョブの実行環境や設定を定義するもので、コンテナイメージや環境変数、メモリ・CPUリソースの割り当てなどを指定できます。

3. ジョブキュー


ジョブを実行する順番を管理するキューです。優先度を設定することで、特定のジョブを優先的に実行させることも可能です。

4. コンピューティング環境


ジョブを実行するEC2インスタンスやFargate環境を管理します。コンピューティング環境には、オンデマンドインスタンスとスポットインスタンスを使用することができます。

コンピューティング環境の役割


コンピューティング環境は、AWS Batchジョブを実行するためのリソースを提供する役割を担います。リソースの自動スケーリング機能により、ワークロードに応じて必要なインスタンス数を増減させることができます。

本記事では、PowerShellを使用して、このコンピューティング環境を制御し、オンデマンドインスタンスとスポットインスタンスを適切に使い分ける方法について解説していきます。

オンデマンドインスタンスとスポットインスタンスの違い


AWS Batchのコンピューティング環境では、オンデマンドインスタンスとスポットインスタンスの2種類のEC2インスタンスを利用できます。それぞれの特性を理解し、適切に使い分けることが、コスト削減と安定性の向上につながります。

オンデマンドインスタンスとは


オンデマンドインスタンスは、必要なときに即座に起動し、利用した分だけ料金が発生する従量課金型のインスタンスです。

メリット

  • 安定性が高い:インスタンスが中断されることなく、確実に実行される。
  • 予測可能なパフォーマンス:リソースが確保されており、急なジョブの停止が発生しない。

デメリット

  • コストが高い:スポットインスタンスと比較して、料金が割高。
  • 柔軟性が低い:リソースを常に確保するため、コスト最適化が難しい。

スポットインスタンスとは


スポットインスタンスは、AWSの未使用リソースを低価格で利用できるインスタンスです。ただし、リソースが必要になった場合、AWSによって予告なくインスタンスが中断される可能性があります。

メリット

  • コスト削減:オンデマンドインスタンスの最大90%引きで利用可能。
  • スケールアウトが容易:低コストで大量のインスタンスを稼働させることが可能。

デメリット

  • インスタンスが中断されるリスク:AWSの需要状況によって、インスタンスが停止する可能性がある。
  • 安定した処理が難しい:長時間のバッチ処理には不向き。

オンデマンドとスポットの使い分け戦略


AWS Batchでコストを抑えつつ、処理の安定性を確保するには、オンデマンドインスタンスとスポットインスタンスを組み合わせるのが効果的です。

  • 安定性が求められるワークロード → オンデマンドインスタンスを利用
  • 短時間で終了するバッチ処理や補助的な計算 → スポットインスタンスを活用
  • オンデマンドとスポットを併用し、ジョブキューの優先度を設定して適切に振り分ける

次のセクションでは、PowerShellを使用してAWS SDKをセットアップし、コンピューティング環境を制御する方法を解説します。

PowerShellを使用したAWS SDKのセットアップ


PowerShellを利用してAWS Batchのコンピューティング環境を制御するには、AWS Tools for PowerShell(AWS SDK for PowerShell)のインストールとセットアップが必要です。このセクションでは、AWS SDKの導入手順と初期設定について詳しく説明します。

AWS SDK for PowerShellのインストール


AWS SDK for PowerShellは、Windows環境だけでなく、macOSやLinuxでも利用可能です。以下の手順でインストールを行います。

1. PowerShellのバージョン確認


PowerShellのバージョンが5.1以上であることを確認してください。以下のコマンドでバージョンを確認できます。

$PSVersionTable.PSVersion

PowerShell 7(PowerShell Core)の場合も問題なく動作します。

2. AWS Tools for PowerShellのインストール


以下のコマンドを実行して、AWS SDK for PowerShellをインストールします。

Install-Module -Name AWS.Tools.Installer -Scope CurrentUser
Install-AWSToolsModule AWS.Tools.Batch,AWS.Tools.EC2 -Confirm:$false

このコマンドは、AWS BatchとEC2を操作するためのモジュールをインストールします。

3. インストールの確認


インストールが成功したかを確認するには、以下のコマンドを実行してください。

Get-Module -ListAvailable AWS.Tools.*

一覧の中に AWS.Tools.Batch や AWS.Tools.EC2 が含まれていれば、インストール成功です。

AWS認証情報の設定


AWSのAPIをPowerShellで利用するためには、認証情報を設定する必要があります。

1. AWS認証情報の取得


AWSマネジメントコンソールからIAMユーザーを作成し、アクセスキーとシークレットキーを取得してください。

2. 認証情報の設定


以下のコマンドを実行し、AWSの認証情報をPowerShellに設定します。

Set-AWSCredential -AccessKey "YOUR_ACCESS_KEY" -SecretKey "YOUR_SECRET_KEY" -StoreAs "MyAWSProfile"

ここで "MyAWSProfile" は、設定するプロファイル名です。今後の操作でこのプロファイルを使用できます。

3. プロファイルを使用した接続確認


AWS CLIと同様に、設定したプロファイルを使ってAWSの接続テストを行います。

Get-BatchJobQueue -ProfileName "MyAWSProfile"

エラーなくジョブキューの情報が取得できれば、セットアップは完了です。

まとめ


このセクションでは、PowerShellを使ってAWS SDKをセットアップする方法を解説しました。次のセクションでは、PowerShellを活用してAWS Batchのジョブキューやコンピューティング環境を操作する方法について解説します。

PowerShellでAWS Batchのジョブキューとコンピューティング環境を操作する方法


PowerShellを使用すると、AWS Batchのジョブキューやコンピューティング環境をプログラム的に制御できます。本セクションでは、PowerShellスクリプトを用いた具体的な操作方法を解説します。

ジョブキューの管理


ジョブキューは、AWS Batchジョブの実行順序を決定する重要な要素です。PowerShellを使用して、ジョブキューの一覧取得、新規作成、削除などの操作を行うことができます。

1. 既存のジョブキューを一覧表示


以下のPowerShellコマンドで、現在存在するジョブキューの一覧を取得できます。

Get-BatchJobQueue -ProfileName "MyAWSProfile"

このコマンドを実行すると、ジョブキューの名前やステータスが表示されます。

2. 新しいジョブキューを作成


新しいジョブキューを作成するには、以下のコマンドを使用します。

New-BatchJobQueue -JobQueueName "MyJobQueue" -ComputeEnvironmentOrder @(@{ComputeEnvironment="MyComputeEnv"; Order=1}) -State "ENABLED" -Priority 1 -ProfileName "MyAWSProfile"

ここでは、ジョブキュー名 (MyJobQueue) や 関連付けるコンピューティング環境 (MyComputeEnv) を指定しています。

3. ジョブキューの削除


不要なジョブキューを削除する場合は、次のコマンドを実行します。

Remove-BatchJobQueue -JobQueueName "MyJobQueue" -ProfileName "MyAWSProfile"

この操作を行う前に、ジョブキューの状態を DISABLED に変更しておく必要があります。

コンピューティング環境の管理


AWS Batchのジョブは、コンピューティング環境上で実行されます。PowerShellを用いることで、コンピューティング環境の作成や変更、削除を行えます。

1. 既存のコンピューティング環境を一覧表示


現在のコンピューティング環境を確認するには、以下のコマンドを実行します。

Get-BatchComputeEnvironment -ProfileName "MyAWSProfile"

これにより、環境名や現在のステータス(ENABLED か DISABLED)を確認できます。

2. 新しいコンピューティング環境の作成


新規にコンピューティング環境を作成する場合、次のコマンドを使用します。

New-BatchComputeEnvironment -ComputeEnvironmentName "MyComputeEnv" -Type "MANAGED" -State "ENABLED" -ServiceRole "arn:aws:iam::123456789012:role/service-role/AWSBatchServiceRole" -ComputeResources @{
    Type="EC2";
    MinvCpus=0;
    MaxvCpus=16;
    DesiredvCpus=4;
    InstanceTypes=@("m5.large");
    Subnets=@("subnet-abc123");
    SecurityGroupIds=@("sg-12345678");
} -ProfileName "MyAWSProfile"

このスクリプトでは、

  • ComputeEnvironmentName で環境名を指定
  • MaxvCpus で最大CPU数を制限
  • InstanceTypes でEC2インスタンスの種類 (m5.large) を指定
  • Subnets や SecurityGroupIds でネットワーク設定

を行っています。

3. コンピューティング環境の削除


不要になったコンピューティング環境を削除するには、以下の手順を実行します。

まず、環境を DISABLED に変更します。

Update-BatchComputeEnvironment -ComputeEnvironmentName "MyComputeEnv" -State "DISABLED" -ProfileName "MyAWSProfile"

その後、削除を実行します。

Remove-BatchComputeEnvironment -ComputeEnvironmentName "MyComputeEnv" -ProfileName "MyAWSProfile"

まとめ


このセクションでは、PowerShellを使用してAWS Batchのジョブキューとコンピューティング環境を管理する方法を解説しました。次のセクションでは、オンデマンドインスタンスを利用する場合のPowerShellスクリプトについて具体的に解説します。

オンデマンドインスタンスを利用する場合のPowerShellスクリプト


AWS Batchのコンピューティング環境でオンデマンドインスタンスを利用すると、インスタンスの中断リスクを避け、安定した処理を実行できます。このセクションでは、PowerShellを用いたオンデマンドインスタンスの設定・管理方法を解説します。

オンデマンドインスタンスを使用したコンピューティング環境の作成


以下のPowerShellスクリプトを実行すると、オンデマンドインスタンスのみを利用するコンピューティング環境を作成できます。

New-BatchComputeEnvironment -ComputeEnvironmentName "OnDemandComputeEnv" `
  -Type "MANAGED" `
  -State "ENABLED" `
  -ServiceRole "arn:aws:iam::123456789012:role/service-role/AWSBatchServiceRole" `
  -ComputeResources @{
      Type="EC2";
      MinvCpus=0;
      MaxvCpus=16;
      DesiredvCpus=4;
      InstanceTypes=@("m5.large");
      AllocationStrategy="BEST_FIT";
      Subnets=@("subnet-abc123");
      SecurityGroupIds=@("sg-12345678");
      InstanceRole="arn:aws:iam::123456789012:instance-profile/AmazonEC2ContainerServiceforAWSBatch";
      Tags=@{"Name"="OnDemandBatchInstance"}
  } `
  -ProfileName "MyAWSProfile"

スクリプトのポイント

  • ComputeEnvironmentName: 環境名を “OnDemandComputeEnv” に指定
  • Type="MANAGED": AWS Batchが自動的に管理する環境を作成
  • InstanceTypes=@("m5.large"): オンデマンドで確保しやすいインスタンスタイプを指定
  • AllocationStrategy="BEST_FIT": 最適なインスタンスを自動選択
  • DesiredvCpus=4: デフォルトで4vCPUのリソースを確保
  • Tags: インスタンスに “OnDemandBatchInstance” というタグを付与

ジョブキューにオンデマンド環境を関連付ける


作成したオンデマンド環境をAWS Batchジョブキューに関連付けるには、以下のコマンドを実行します。

New-BatchJobQueue -JobQueueName "OnDemandQueue" `
  -ComputeEnvironmentOrder @(@{ComputeEnvironment="OnDemandComputeEnv"; Order=1}) `
  -State "ENABLED" `
  -Priority 1 `
  -ProfileName "MyAWSProfile"

ジョブキューの役割
この設定により、ジョブが “OnDemandQueue” に送信された場合、オンデマンドインスタンス上で実行されるようになります。

オンデマンドインスタンスの利用状況を確認する


オンデマンドインスタンスの稼働状況をPowerShellで確認するには、以下のコマンドを使用します。

Get-BatchComputeEnvironment -ComputeEnvironmentName "OnDemandComputeEnv" -ProfileName "MyAWSProfile"

これにより、vCPUの使用状況やインスタンスの稼働状態を確認できます。

オンデマンドインスタンスのスケーリングを変更する


運用中に必要なCPUリソースを変更する場合は、次のコマンドを実行します。

Update-BatchComputeEnvironment -ComputeEnvironmentName "OnDemandComputeEnv" `
  -ComputeResources @{MinvCpus=2; MaxvCpus=32; DesiredvCpus=8} `
  -ProfileName "MyAWSProfile"

このスクリプトでは、

  • MinvCpus=2 → 最小2vCPUを確保
  • MaxvCpus=32 → 最大32vCPUまで拡張可能
  • DesiredvCpus=8 → 現在の要求vCPU数を8に変更

といった設定が可能になります。

オンデマンド環境の削除


不要になった場合は、以下の手順で環境を削除できます。

  1. 環境を無効化
Update-BatchComputeEnvironment -ComputeEnvironmentName "OnDemandComputeEnv" -State "DISABLED" -ProfileName "MyAWSProfile"
  1. 環境を削除
Remove-BatchComputeEnvironment -ComputeEnvironmentName "OnDemandComputeEnv" -ProfileName "MyAWSProfile"

まとめ


このセクションでは、PowerShellを使ってオンデマンドインスタンスのみを利用するコンピューティング環境を作成・管理する方法を解説しました。

  • New-BatchComputeEnvironment コマンドを使ってオンデマンド環境を作成
  • New-BatchJobQueue でジョブキューを設定し、環境に関連付け
  • Update-BatchComputeEnvironment でスケール調整
  • Remove-BatchComputeEnvironment で不要な環境を削除

次のセクションでは、スポットインスタンスを活用してコストを削減するPowerShellスクリプトを紹介します。

スポットインスタンスを利用する場合のPowerShellスクリプト


スポットインスタンスは、AWSの未使用リソースを低コストで利用できるインスタンスです。AWS Batchでスポットインスタンスを使用することで、コストを大幅に削減できますが、AWSによる強制終了のリスクがあるため、適切な管理が必要です。このセクションでは、PowerShellを用いてスポットインスタンスを活用する方法を解説します。


スポットインスタンスを使用したコンピューティング環境の作成


以下のPowerShellスクリプトを実行すると、スポットインスタンスのみを利用するコンピューティング環境を作成できます。

New-BatchComputeEnvironment -ComputeEnvironmentName "SpotComputeEnv" `
  -Type "MANAGED" `
  -State "ENABLED" `
  -ServiceRole "arn:aws:iam::123456789012:role/service-role/AWSBatchServiceRole" `
  -ComputeResources @{
      Type="SPOT";
      MinvCpus=0;
      MaxvCpus=64;
      DesiredvCpus=8;
      InstanceTypes=@("m5.large","m5.xlarge");
      AllocationStrategy="SPOT_CAPACITY_OPTIMIZED";
      SpotIamFleetRole="arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-role";
      Subnets=@("subnet-abc123");
      SecurityGroupIds=@("sg-12345678");
      InstanceRole="arn:aws:iam::123456789012:instance-profile/AmazonEC2ContainerServiceforAWSBatch";
      Tags=@{"Name"="SpotBatchInstance"}
  } `
  -ProfileName "MyAWSProfile"

スクリプトのポイント

  • Type="SPOT" → スポットインスタンスを利用する環境を作成
  • InstanceTypes=@("m5.large","m5.xlarge") → スポット価格の変動に対応できるよう、複数のインスタンスを指定
  • AllocationStrategy="SPOT_CAPACITY_OPTIMIZED" → 最も中断されにくいインスタンスをAWSが自動選択
  • SpotIamFleetRole → スポットフリートのIAMロールを指定(事前に作成が必要)
  • MaxvCpus=64 → コストを抑えつつ、大量のリソースを確保可能

ジョブキューにスポット環境を関連付ける


スポット環境をジョブキューに設定することで、ジョブがスポットインスタンス上で実行されるようになります。

New-BatchJobQueue -JobQueueName "SpotQueue" `
  -ComputeEnvironmentOrder @(@{ComputeEnvironment="SpotComputeEnv"; Order=1}) `
  -State "ENABLED" `
  -Priority 2 `
  -ProfileName "MyAWSProfile"

ポイント

  • Priority 2 → オンデマンド環境よりも優先順位を低く設定(オンデマンドが利用できない場合にスポットを使用)

スポットインスタンスの利用状況を確認する


スポットインスタンスの現在の利用状況を確認するには、以下のコマンドを実行します。

Get-BatchComputeEnvironment -ComputeEnvironmentName "SpotComputeEnv" -ProfileName "MyAWSProfile"

これにより、

  • 現在のvCPUの利用状況
  • 稼働中のインスタンス数
  • スポットインスタンスの価格変動

を確認できます。


スポットインスタンスのスケーリングを変更する


スポットインスタンスのスケールを変更する場合、次のコマンドを実行します。

Update-BatchComputeEnvironment -ComputeEnvironmentName "SpotComputeEnv" `
  -ComputeResources @{MinvCpus=4; MaxvCpus=128; DesiredvCpus=16} `
  -ProfileName "MyAWSProfile"

このスクリプトでは、

  • MinvCpus=4 → 最低4vCPUを確保
  • MaxvCpus=128 → 最大128vCPUまで拡張可能
  • DesiredvCpus=16 → 現在の要求vCPU数を16に変更

といった設定が可能になります。


スポット環境の削除


不要になった場合は、以下の手順で環境を削除できます。

  1. 環境を無効化
Update-BatchComputeEnvironment -ComputeEnvironmentName "SpotComputeEnv" -State "DISABLED" -ProfileName "MyAWSProfile"
  1. 環境を削除
Remove-BatchComputeEnvironment -ComputeEnvironmentName "SpotComputeEnv" -ProfileName "MyAWSProfile"

スポットインスタンスの活用ポイント


スポットインスタンスは低コストで利用できますが、突然中断されるリスクがあるため、以下の活用戦略が有効です。

  • 耐障害性のあるジョブで使用 → ジョブが途中で中断されても影響が少ない処理(例: 分散計算)に適用
  • オンデマンドとの併用 → 安定性が求められる処理はオンデマンド、コスト削減が可能な処理はスポットで実行
  • 複数のインスタンスタイプを指定 → 特定のインスタンスが高騰した場合でも、他のタイプを選択できるように設定

まとめ


このセクションでは、PowerShellを使ってスポットインスタンスを利用するコンピューティング環境を作成・管理する方法を解説しました。

  • New-BatchComputeEnvironment でスポット環境を作成
  • New-BatchJobQueue でジョブキューを作成し、環境に関連付け
  • Update-BatchComputeEnvironment でスケール調整
  • Remove-BatchComputeEnvironment で不要な環境を削除

次のセクションでは、オンデマンドとスポットインスタンスを状況に応じて使い分ける戦略について詳しく解説します。

状況に応じたインスタンスの使い分け戦略


AWS Batchでは、オンデマンドインスタンスとスポットインスタンスを適切に使い分けることで、コスト削減と処理の安定性を両立できます。本セクションでは、どのような状況でどのインスタンスを利用すべきか、具体的な戦略を解説します。


オンデマンドとスポットの使い分け基準


AWS Batchのワークロードの性質に応じて、適切なインスタンスタイプを選択する必要があります。以下の基準をもとに、適切な環境を選択しましょう。

オンデマンドインスタンスが適しているケース

  • 中断されると困るバッチ処理(例: データベースの更新、トランザクション処理)
  • 厳密なSLAが必要なワークロード(例: 定時実行のジョブ、重要なデータ処理)
  • 計算時間が長いジョブ(例: 24時間以上かかるシミュレーション)

スポットインスタンスが適しているケース

  • 再開可能なワークロード(例: 並列分散処理、機械学習のトレーニング)
  • コストを最小化したい場合(例: 補助的なバッチ処理、予測モデルの生成)
  • 短時間で終了するジョブ(例: 数分〜数時間で終わる軽量処理)

オンデマンドとスポットの併用戦略


オンデマンドとスポットを適切に組み合わせることで、安定性とコストのバランスを最適化できます。以下の方法で、AWS Batchの環境を構築しましょう。

1. 優先順位の異なるジョブキューを作成


ジョブの性質に応じて、オンデマンドキューとスポットキューを作成し、優先度を設定します。

New-BatchJobQueue -JobQueueName "OnDemandQueue" `
  -ComputeEnvironmentOrder @(@{ComputeEnvironment="OnDemandComputeEnv"; Order=1}) `
  -State "ENABLED" `
  -Priority 1 `
  -ProfileName "MyAWSProfile"
New-BatchJobQueue -JobQueueName "SpotQueue" `
  -ComputeEnvironmentOrder @(@{ComputeEnvironment="SpotComputeEnv"; Order=1}) `
  -State "ENABLED" `
  -Priority 2 `
  -ProfileName "MyAWSProfile"

ポイント

  • オンデマンドキュー (OnDemandQueue) の 優先度を1(高い) に設定
  • スポットキュー (SpotQueue) の 優先度を2(低い) に設定
  • まずオンデマンドで実行し、リソースが足りない場合にスポットを使用

2. 予算に応じたスケール設定


AWS Batchのスケール戦略を適切に調整し、コストとパフォーマンスの最適化を図ります。

Update-BatchComputeEnvironment -ComputeEnvironmentName "SpotComputeEnv" `
  -ComputeResources @{MinvCpus=4; MaxvCpus=64; DesiredvCpus=16} `
  -ProfileName "MyAWSProfile"

調整ポイント

  • 予算がある場合 → MaxvCpus を高めに設定し、スケールアップを許容
  • コストを抑えたい場合 → MaxvCpus を低めに設定し、スポットの使用率を増加

3. AWS Auto Scalingを活用する


AWS Batchのコンピューティング環境をAuto Scalingと組み合わせることで、最適なリソース配分を自動化できます。

Update-BatchComputeEnvironment -ComputeEnvironmentName "SpotComputeEnv" `
  -ComputeResources @{MinvCpus=0; MaxvCpus=128; DesiredvCpus=8} `
  -ProfileName "MyAWSProfile"

ポイント

  • MinvCpus=0 にすることで、使っていないときはリソースを0にする
  • MaxvCpus=128 に設定し、負荷が高まった場合に自動でスケールアップ

状況別のベストプラクティス


AWS Batchの運用において、以下のような戦略を活用すると、リソースを効果的に利用できます。

ケース1: コスト重視のバッチ処理


スポットインスタンスを優先的に利用し、ジョブキューの優先度を調整

  • スポットインスタンスをメインで利用
  • オンデマンドはバックアップ用途

ケース2: 安定した運用が必要な業務処理


オンデマンドインスタンスを優先し、一部スポットを利用

  • 主要なジョブはオンデマンドで実行
  • 補助的な処理はスポットインスタンスで動作

ケース3: 計算量が多い機械学習ジョブ


スポットインスタンスを大量に利用し、中断に備えてジョブを分割

  • 並列実行が可能なジョブはスポットインスタンスでコスト削減
  • 長時間の処理には一部オンデマンドを使用

まとめ


このセクションでは、AWS Batchのオンデマンドインスタンスとスポットインスタンスの使い分け戦略について解説しました。

  • ジョブの性質に応じて適切なインスタンスを選択(安定性 vs コスト削減)
  • オンデマンドとスポットのジョブキューを分け、優先度を調整
  • AWS Auto Scalingを活用し、負荷に応じたスケール調整を自動化

次のセクションでは、PowerShellを活用したAWS Batch環境の動的変更方法について、実践的な演習を交えて解説します。

実践演習:PowerShellでAWS Batch環境を動的に変更する


AWS Batchの運用では、状況に応じてコンピューティング環境の設定を動的に変更することが求められます。例えば、急な処理の増加に対応するためにCPUリソースを拡張したり、コスト削減のためにスポットインスタンスの比率を増やしたりすることが可能です。本セクションでは、PowerShellを活用してAWS Batch環境を動的に変更する方法を、具体的な演習形式で解説します。


演習1: オンデマンドインスタンスのスケーリングを変更する


AWS Batchのオンデマンド環境において、必要なリソース量を増減する操作をPowerShellで実行します。

1. 現在のコンピューティング環境を確認


まず、現在の環境設定を取得し、CPUリソースの状態を確認します。

Get-BatchComputeEnvironment -ComputeEnvironmentName "OnDemandComputeEnv" -ProfileName "MyAWSProfile"

表示される情報の中に DesiredvCpus の値があるので、現在の設定を把握します。

2. リソースのスケーリングを変更


PowerShellを使用して、オンデマンド環境の最大CPU数(MaxvCpus)を増加させます。

Update-BatchComputeEnvironment -ComputeEnvironmentName "OnDemandComputeEnv" `
  -ComputeResources @{MinvCpus=2; MaxvCpus=32; DesiredvCpus=8} `
  -ProfileName "MyAWSProfile"

設定変更のポイント

  • MinvCpus=2 → 最低2vCPUを確保(処理がないときでも2vCPUを維持)
  • MaxvCpus=32 → 最大32vCPUまで拡張可能(負荷が増えた際にスケールアップ)
  • DesiredvCpus=8 → 現在の要求vCPU数を8に変更(即座に適用)

演習2: スポットインスタンスの比率を増やす


AWS Batchのコストを削減するために、スポットインスタンスの割合を増やし、オンデマンド環境のリソースを抑える設定を行います。

1. スポット環境の拡張


スポット環境の最大CPU数を拡大し、AWSにより多くのスポットインスタンスを割り当てられるようにします。

Update-BatchComputeEnvironment -ComputeEnvironmentName "SpotComputeEnv" `
  -ComputeResources @{MinvCpus=4; MaxvCpus=128; DesiredvCpus=32} `
  -ProfileName "MyAWSProfile"

2. オンデマンド環境の縮小


オンデマンド環境の最大CPU数を制限し、スポットインスタンスをより優先するように設定を変更します。

Update-BatchComputeEnvironment -ComputeEnvironmentName "OnDemandComputeEnv" `
  -ComputeResources @{MinvCpus=2; MaxvCpus=8; DesiredvCpus=4} `
  -ProfileName "MyAWSProfile"

ポイント

  • スポット環境の MaxvCpus を増やすことで、スポットインスタンスの利用機会を拡大
  • オンデマンド環境の MaxvCpus を減らし、費用を抑える

演習3: コンピューティング環境の一時停止と再開


AWS Batchのコンピューティング環境を一時的に停止し、コストを削減することが可能です。例えば、業務時間外は環境を無効化し、必要なときに再開するといった運用が考えられます。

1. 環境を一時停止(DISABLEDに設定)

Update-BatchComputeEnvironment -ComputeEnvironmentName "OnDemandComputeEnv" -State "DISABLED" -ProfileName "MyAWSProfile"
Update-BatchComputeEnvironment -ComputeEnvironmentName "SpotComputeEnv" -State "DISABLED" -ProfileName "MyAWSProfile"

この操作を行うと、環境内のインスタンスが自動で停止され、新たなジョブの割り当てが行われなくなります。

2. 環境を再開(ENABLEDに設定)


環境を再び有効化し、AWS Batchジョブを処理できるようにします。

Update-BatchComputeEnvironment -ComputeEnvironmentName "OnDemandComputeEnv" -State "ENABLED" -ProfileName "MyAWSProfile"
Update-BatchComputeEnvironment -ComputeEnvironmentName "SpotComputeEnv" -State "ENABLED" -ProfileName "MyAWSProfile"

演習4: AWS Batchジョブのキャンセル


特定のAWS Batchジョブをキャンセルすることも可能です。ジョブIDを指定して、処理を停止します。

1. 実行中のジョブを確認


まず、実行中のジョブIDを取得します。

Get-BatchJob -JobQueue "OnDemandQueue" -ProfileName "MyAWSProfile"

この出力から、キャンセルしたいジョブの JobId をメモします。

2. ジョブをキャンセル


取得した JobId を使って、AWS Batchのジョブをキャンセルします。

Cancel-BatchJob -JobId "12345678-abcdefg-9012345" -ProfileName "MyAWSProfile"

まとめ


このセクションでは、PowerShellを使ってAWS Batch環境を動的に変更する方法を実践形式で解説しました。

  • CPUリソースの拡張・縮小(オンデマンド・スポットインスタンスの調整)
  • コスト削減のためのスポットインスタンス活用
  • コンピューティング環境の一時停止と再開(コスト最適化)
  • AWS Batchジョブのキャンセル(不要な処理を停止)

PowerShellを活用することで、AWS Batchの環境を動的に制御し、状況に応じた最適なリソース管理が可能になります。

次のセクションでは、本記事のまとめを行います。

まとめ


本記事では、PowerShellを活用してAWS Batchのコンピューティング環境を制御し、オンデマンドインスタンスとスポットインスタンスを使い分ける方法について解説しました。

主なポイントは以下の通りです。

  • AWS Batchの基本とコンピューティング環境の役割
  • オンデマンドインスタンスとスポットインスタンスの違いと使い分け戦略
  • PowerShellを使用したAWS SDKのセットアップ
  • PowerShellによるAWS Batchのジョブキューとコンピューティング環境の管理
  • オンデマンド環境の構築とスケール調整
  • スポットインスタンスを活用したコスト最適化
  • 動的なリソース管理(スケーリング、一時停止、ジョブキャンセル)

PowerShellを活用することで、AWS Batchのリソースを柔軟に制御し、コストを最適化しつつ、必要な計算リソースを確保することが可能になります。

今後は、オンデマンドとスポットインスタンスの適切なバランスを保ちながら、AWS Auto ScalingやCloudWatchと組み合わせて更に高度な制御を行うことも検討できます。

本記事を参考に、PowerShellを活用したAWS Batchの管理を実践し、効率的なクラウドリソースの運用に役立ててください。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次