PowerShellでAWS EBSボリュームをスナップショットから自動拡張する方法

AWSのEBS(Elastic Block Store)ボリュームは、EC2インスタンスのストレージとして使用されます。しかし、データの増加やアプリケーションの使用状況の変化により、EBSボリュームの容量が不足することがあります。手動で拡張する方法もありますが、頻繁に発生する場合や複数のインスタンスを管理している場合には、手作業では非効率です。

本記事では、PowerShellを使用してEBSボリュームをスナップショットから自動拡張する方法を解説します。PowerShellを活用することで、AWSの管理作業をスクリプトで自動化し、手間を減らすことが可能になります。本記事を通じて、以下の内容を学びます。

  • AWS EBSボリュームの基本概念
  • EBSの容量不足が発生する主な原因
  • PowerShellを利用するメリットと事前準備
  • PowerShellスクリプトを用いたスナップショット作成
  • スナップショットからの新しいEBSボリューム作成
  • EC2インスタンスへのボリュームアタッチと拡張処理
  • スクリプトの自動化と定期実行の設定

この記事を参考にすることで、EBSボリュームの容量不足問題を効率的に解決し、AWS環境の運用負荷を軽減することができます。

目次

AWS EBSボリュームとは


AWSのEBS(Elastic Block Store)は、EC2インスタンス向けのブロックストレージサービスです。EBSボリュームはEC2インスタンスにアタッチされ、永続的なデータストレージとして使用されます。EC2インスタンスが停止・再起動してもデータは保持されるため、AWS環境でのデータ管理において重要な役割を果たします。

EBSの特徴


EBSボリュームには、以下の特徴があります。

  • 永続性:EC2インスタンスを停止・再起動してもデータは保持される。
  • スケーラビリティ:必要に応じて容量を拡張できる。
  • 種類の選択:用途に応じたEBSのタイプ(SSDやHDD)を選べる。
  • スナップショット機能:定期的なバックアップが可能で、スナップショットから復元できる。

EBSの主な用途


EBSは、以下のような用途で利用されます。

  • OSディスク(ルートボリューム):EC2インスタンスのOSが格納されるディスクとして使用。
  • アプリケーションデータの保存:データベースやログデータのストレージとして利用。
  • 高可用性ストレージ:スナップショットを活用し、障害時の復旧を迅速に行う。

EBSボリュームはAWS環境でのデータ管理において欠かせない要素ですが、データの増加に伴い容量不足の問題が発生することがあります。本記事では、PowerShellを活用してEBSのスナップショットを作成し、新しいボリュームへ拡張する方法を解説します。

EBSの容量不足が発生する原因

AWS EBSボリュームの容量不足は、さまざまな要因によって発生します。ボリュームのサイズが不足すると、EC2インスタンスのパフォーマンスが低下し、アプリケーションが正常に動作しなくなる可能性があります。ここでは、EBSの容量不足が発生する主な原因を解説します。

1. データの増加


アプリケーションが稼働し続けることで、以下のようなデータが増加し、ストレージが圧迫されることがあります。

  • データベースのデータ:RDBMSやNoSQLデータベースに保存されるデータの増加
  • ログファイル:システムやアプリケーションのログが蓄積される
  • バックアップファイル:システムの定期バックアップが増加

2. 適切なボリュームサイズの設定ミス


EBSボリュームの作成時に適切なサイズを選択しないと、将来的に容量不足に陥る可能性があります。特に以下のようなケースでは、事前に適切なストレージ計画を立てることが重要です。

  • 想定よりも少ない容量でボリュームを作成した
  • アプリケーションのデータ増加量を見誤った
  • 短期間でデータが急増するワークロードを考慮しなかった

3. 一時ファイルやキャッシュの蓄積


アプリケーションやOSが生成する一時ファイルやキャッシュが、予期せずストレージを圧迫することがあります。特に、以下の要因が影響します。

  • アプリケーションがキャッシュをクリアしない
  • ログローテーションが適切に設定されていない
  • 不要なファイルが手動で削除されていない

4. スナップショットの増加


EBSスナップショットはバックアップや復旧のために重要ですが、古いスナップショットが保持され続けると、ストレージコストと管理負担が増加します。適切なスナップショット管理が行われていないと、不要なスナップショットがディスクを占有し続ける可能性があります。

5. ボリュームの種類とパフォーマンスの問題


EBSにはさまざまな種類のボリュームがあり、選択ミスによりパフォーマンスが影響を受けることがあります。例えば、低速なHDDタイプのEBSボリュームを選択すると、I/O処理の遅延によりアプリケーションが適切に動作しなくなることがあります。その結果、容量不足とともにパフォーマンス低下の問題が発生することがあります。

6. データ保持ポリシーの見直し不足


データの保存期間や不要なデータの削除ルールを適切に設定していないと、古いデータが蓄積され、EBSの容量を圧迫します。定期的なデータクリーンアップを行うことで、不要なストレージ使用量を削減できます。


EBSの容量不足を防ぐには、適切なボリューム管理、データ保持ポリシーの最適化、スナップショットの整理などが重要です。次の章では、PowerShellを活用してEBSボリュームを自動拡張するための準備について解説します。

PowerShellを使うメリットと事前準備

AWS環境でEBSボリュームを拡張する方法はいくつかありますが、PowerShellを使用することで自動化し、運用負担を軽減できます。本章では、PowerShellを利用するメリットと、スクリプトを実行するための事前準備について解説します。

PowerShellを使用するメリット


PowerShellを活用することで、以下のような利点があります。

  1. 自動化による作業負担の軽減
  • AWSマネジメントコンソールを開かずに、コマンドでEBSボリュームの管理が可能
  • 定期的なスナップショット作成や拡張処理をスクリプト化できる
  1. 一貫した運用管理
  • 手作業による設定ミスを防ぎ、統一された処理を実行できる
  • 他のAWSサービスと連携したカスタマイズが可能
  1. Windows環境との親和性
  • Windowsサーバー環境での管理が容易
  • Active Directoryや他のスクリプトと連携しやすい

PowerShellでAWSを操作するための事前準備


PowerShellでAWS EBSボリュームを操作するには、以下の環境設定を行う必要があります。

1. AWS CLIのインストール


PowerShellからAWSを操作するには、AWS Command Line Interface(AWS CLI)をインストールする必要があります。

  • AWS CLIのインストール手順(Windows)
  1. AWS CLI公式サイト からインストーラーをダウンロード
  2. インストーラーを実行し、画面の指示に従ってインストール
  3. インストール完了後、以下のコマンドでバージョンを確認
    powershell aws --version
    出力例:
    aws-cli/2.X.X Windows/10 exe/x86_64

2. AWS PowerShellモジュールのインストール


PowerShell用のAWSモジュールをインストールするには、以下のコマンドを実行します。

Install-Module -Name AWSPowerShell -Scope CurrentUser

インストールが完了したら、以下のコマンドでバージョンを確認できます。

Get-Module -Name AWSPowerShell -ListAvailable

3. AWS認証情報の設定


AWSに接続するためには、IAMユーザーの認証情報を設定する必要があります。事前にAWSコンソールでIAMユーザーを作成し、アクセスキーIDシークレットアクセスキーを取得しておきます。

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

Set-AWSCredential -AccessKey "your-access-key-id" -SecretKey "your-secret-access-key" -StoreAs default

または、AWS CLIを使用して認証情報を設定することも可能です。

aws configure

設定時に以下の情報を入力します。

  • AWS Access Key ID: アクセスキーIDを入力
  • AWS Secret Access Key: シークレットアクセスキーを入力
  • Default region name: 使用するAWSリージョン(例: us-east-1
  • Default output format: json(デフォルトのままでOK)

4. 必要なIAMポリシーの確認


PowerShellスクリプトがEBSを操作できるようにするためには、適切なIAM権限が必要です。IAMポリシーに以下の権限が含まれていることを確認してください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeVolumes",
                "ec2:CreateSnapshot",
                "ec2:ModifyVolume",
                "ec2:AttachVolume",
                "ec2:DescribeInstances"
            ],
            "Resource": "*"
        }
    ]
}

IAMユーザーに適切なポリシーが適用されていない場合、PowerShellスクリプトの実行時にエラーが発生するため、事前に設定を確認しておきましょう。


これでPowerShellを使用してAWS EBSボリュームを操作する準備が整いました。次の章では、PowerShellスクリプトを用いてスナップショットを作成する方法を解説します。

AWS PowerShellモジュールの導入と設定

PowerShellを使用してAWS EBSボリュームを管理するには、AWS PowerShellモジュールを導入し、適切に設定する必要があります。本章では、AWS PowerShellモジュールのインストール方法と、AWSアカウントとの接続設定について解説します。

1. AWS PowerShellモジュールとは


AWS PowerShellモジュールは、PowerShell環境からAWSの各種サービスを操作するためのツールです。

  • EC2の管理(インスタンスの作成・削除、EBSの管理など)
  • S3バケットの操作(オブジェクトのアップロード・ダウンロードなど)
  • IAMの管理(ユーザー・ロール・ポリシーの管理)

EBSボリュームの操作には、このモジュールを使用してスナップショットの作成、ボリュームの拡張、インスタンスへのアタッチなどを実施します。

2. AWS PowerShellモジュールのインストール


AWS PowerShellモジュールをインストールするには、管理者権限でPowerShellを開き、以下のコマンドを実行します。

Install-Module -Name AWSPowerShell -Scope CurrentUser

注意:

  • 初回インストール時には、「信頼されていないリポジトリ」という警告が表示される場合があります。その場合は、「Y」を入力して続行してください。
  • システム全体にインストールする場合は、-Scope AllUsers オプションを追加してください。

3. インストールの確認


AWS PowerShellモジュールが正しくインストールされているか確認するには、次のコマンドを実行します。

Get-Module -Name AWSPowerShell -ListAvailable

出力例:

ModuleType Version    Name          ExportedCommands
---------- -------    ----          ----------------
Script     4.1.23.0  AWSPowerShell {...}

モジュールのバージョン情報が表示されれば、インストールは成功です。

4. AWSアカウントへの接続設定


AWS PowerShellモジュールを使用するには、AWSアカウントとの認証設定が必要です。

(1) AWS CLI を使って認証情報を設定する方法

AWS CLIをインストールしている場合、以下のコマンドを使用して認証情報を設定できます。

aws configure

入力項目:

  • AWS Access Key ID: IAMユーザーのアクセスキー
  • AWS Secret Access Key: IAMユーザーのシークレットキー
  • Default region name: 使用するAWSリージョン(例: us-east-1
  • Default output format: json または table(デフォルトのままでOK)

この方法を使用すると、~/.aws/credentials に認証情報が保存され、PowerShellでも使用可能になります。

(2) PowerShell内で直接認証情報を設定する方法

AWS CLIを使用せずに、PowerShell内で直接認証情報を設定することも可能です。

Set-AWSCredential -AccessKey "your-access-key-id" -SecretKey "your-secret-access-key" -StoreAs default

設定した認証情報を確認するには、以下のコマンドを実行します。

Get-AWSCredential -ListStoredCredentials

5. AWSリージョンの設定


AWSのリージョン(例: us-east-1ap-northeast-1)を指定することで、スクリプトを実行する際の対象リージョンを設定できます。リージョンを設定するには、以下のコマンドを使用します。

Set-DefaultAWSRegion -Region "ap-northeast-1"

現在のリージョン設定を確認するには、以下のコマンドを使用します。

(Get-DefaultAWSRegion).Region

6. インストール後のテスト


PowerShell環境がAWSと正常に接続できているか確認するために、以下のコマンドを実行し、EBSボリュームの一覧を取得してみます。

Get-EC2Volume

正常にEBSボリュームの情報が表示されれば、AWS PowerShellモジュールの導入と設定は完了です。


AWS PowerShellモジュールの導入が完了したら、次のステップでは EBSスナップショットの作成 をPowerShellスクリプトで実行する方法について解説します。

スナップショットを作成するPowerShellスクリプト

EBSボリュームのスナップショットを作成することで、ボリュームのバックアップを取り、必要に応じて復元や拡張が可能になります。本章では、PowerShellを用いてEBSスナップショットを作成する方法を解説します。

1. EBSスナップショットとは


EBSスナップショットは、EBSボリュームのバックアップイメージを取得するための機能です。スナップショットを作成すると、その時点でのデータを保持し、新しいEBSボリュームの作成やボリュームの復元が可能になります。

スナップショットの活用例

  • データのバックアップ
  • EBSボリュームの拡張前のバックアップ
  • 別のリージョンやアカウントへのデータ移行
  • 過去の状態へのロールバック

2. PowerShellでスナップショットを作成する


AWS PowerShellモジュールを使用して、EBSスナップショットを作成するスクリプトを作成します。

(1) スナップショットを作成する基本スクリプト


以下のPowerShellスクリプトを実行すると、指定したEBSボリュームのスナップショットを作成できます。

# 変数の設定
$Region = "ap-northeast-1"  # 使用するAWSリージョン
$VolumeId = "vol-0123456789abcdef0"  # EBSボリュームIDを指定
$Description = "Auto snapshot created via PowerShell"

# スナップショットの作成
$Snapshot = New-EC2Snapshot -VolumeId $VolumeId -Description $Description -Region $Region

# 結果の出力
Write-Output "スナップショット作成完了: ID - $($Snapshot.SnapshotId)"

実行結果の例:

スナップショット作成完了: ID - snap-0a1b2c3d4e5f67890

スクリプトを実行すると、指定したEBSボリュームのスナップショットが作成され、スナップショットIDが出力されます。


(2) 複数のボリュームを対象にスナップショットを作成する


環境内のすべてのEBSボリュームのスナップショットを作成する場合、以下のスクリプトを使用できます。

# 変数の設定
$Region = "ap-northeast-1"  # AWSリージョン

# すべてのEBSボリュームを取得
$Volumes = Get-EC2Volume -Region $Region

# 各ボリュームに対してスナップショットを作成
foreach ($Volume in $Volumes) {
    $VolumeId = $Volume.VolumeId
    $Description = "Auto snapshot of $VolumeId"

    # スナップショットの作成
    $Snapshot = New-EC2Snapshot -VolumeId $VolumeId -Description $Description -Region $Region

    # 結果の出力
    Write-Output "スナップショット作成完了: $VolumeId → $($Snapshot.SnapshotId)"
}

このスクリプトを実行すると、AWSアカウント内のすべてのEBSボリュームのスナップショットが自動的に作成されます。


3. スナップショットの一覧を取得する


作成されたスナップショットを確認するには、以下のコマンドを実行します。

Get-EC2Snapshot -OwnerId self -Region "ap-northeast-1"

特定のボリュームに関連するスナップショットのみを取得する場合は、以下のように実行します。

$VolumeId = "vol-0123456789abcdef0"
Get-EC2Snapshot -Region "ap-northeast-1" | Where-Object { $_.VolumeId -eq $VolumeId }

4. 古いスナップショットの自動削除


不要なスナップショットを削除し、ストレージコストを抑えるために、一定期間経過したスナップショットを自動削除するスクリプトを作成できます。

# 変数の設定
$Region = "ap-northeast-1"
$DaysOld = 30  # 削除するスナップショットの対象日数
$CutoffDate = (Get-Date).AddDays(-$DaysOld)

# 自動削除処理
$Snapshots = Get-EC2Snapshot -OwnerId self -Region $Region
foreach ($Snapshot in $Snapshots) {
    if ($Snapshot.StartTime -lt $CutoffDate) {
        Remove-EC2Snapshot -SnapshotId $Snapshot.SnapshotId -Region $Region -Confirm:$false
        Write-Output "削除完了: $($Snapshot.SnapshotId)"
    }
}

このスクリプトを定期的に実行することで、30日以上経過したスナップショットを自動削除し、不要なストレージコストを削減できます。


まとめ


本章では、PowerShellを使用してEBSスナップショットを作成する方法を解説しました。

  • New-EC2Snapshot コマンドでスナップショットを作成
  • Get-EC2Snapshot でスナップショットの一覧を取得
  • スナップショットの定期的な削除でストレージコストを削減

次の章では、スナップショットを基に新しいEBSボリュームを作成する方法を解説します。

スナップショットから新しいEBSボリュームを作成する方法

スナップショットを利用すると、新しいEBSボリュームを作成し、既存のデータを復元することができます。本章では、PowerShellを使用してスナップショットから新しいEBSボリュームを作成する方法を解説します。


1. スナップショットを基にEBSボリュームを作成する流れ


スナップショットから新しいEBSボリュームを作成するには、以下の手順を実施します。

  1. 使用可能なスナップショットを確認Get-EC2Snapshot
  2. スナップショットを基に新しいEBSボリュームを作成New-EC2Volume
  3. 新しいボリュームの状態を確認Get-EC2Volume

2. スナップショット一覧の取得


まず、利用可能なスナップショットの一覧を取得します。

# 変数の設定
$Region = "ap-northeast-1"

# 自分が所有するスナップショットの一覧を取得
Get-EC2Snapshot -OwnerId self -Region $Region | Select-Object SnapshotId, VolumeId, StartTime, Description

出力例:

SnapshotId        VolumeId        StartTime               Description
-----------       ---------       ----------------       --------------------------
snap-0a1b2c3d4e  vol-0123456789  2024-01-20 12:34:56    Auto snapshot of vol-0123456789
snap-1b2c3d4e5f  vol-0987654321  2024-01-22 14:56:12    Backup before resize

この情報を元に、適切なスナップショットを選択します。


3. スナップショットからEBSボリュームを作成

新しいEBSボリュームを作成するには、以下のスクリプトを使用します。

# 変数の設定
$Region = "ap-northeast-1"
$SnapshotId = "snap-0a1b2c3d4e"  # 使用するスナップショットのID
$NewVolumeSize = 100  # GB単位で指定(元のサイズより大きくできる)

# 新しいEBSボリュームの作成
$NewVolume = New-EC2Volume -SnapshotId $SnapshotId -Size $NewVolumeSize -AvailabilityZone "$Region"a -VolumeType "gp3" -Region $Region

# 作成されたボリュームIDを取得
Write-Output "新しいEBSボリューム作成完了: ID - $($NewVolume.VolumeId)"

4. 作成されたEBSボリュームの確認


新しいEBSボリュームが正しく作成されたか確認するには、以下のコマンドを実行します。

Get-EC2Volume -Region "ap-northeast-1" | Where-Object { $_.VolumeId -eq "vol-新しいボリュームID" }

5. ボリュームサイズの変更(オプション)


作成したEBSボリュームのサイズを変更する場合、以下のコマンドを実行します。

$VolumeId = "vol-新しいボリュームID"
$NewSize = 200  # 変更後のサイズ(GB)

Modify-EC2Volume -VolumeId $VolumeId -Size $NewSize -Region "ap-northeast-1"

Write-Output "EBSボリュームのサイズを $NewSize GB に変更しました。"

6. 新しいボリュームのステータス確認


ボリュームが available 状態になっていれば、EC2インスタンスにアタッチ可能です。

Get-EC2Volume -Region "ap-northeast-1" | Select-Object VolumeId, State, Size, AvailabilityZone

まとめ


本章では、スナップショットから新しいEBSボリュームを作成する方法を解説しました。

  • Get-EC2Snapshot でスナップショット一覧を取得
  • New-EC2Volume でスナップショットを基に新しいEBSボリュームを作成
  • Modify-EC2Volume でボリュームサイズの変更も可能

次の章では、作成したEBSボリュームをEC2インスタンスにアタッチし、拡張処理を行う方法について解説します。

EC2インスタンスへのボリュームアタッチと拡張処理

スナップショットから作成したEBSボリュームをEC2インスタンスにアタッチし、必要に応じてファイルシステムを拡張することで、ディスクの容量を増やすことができます。本章では、PowerShellを使用してボリュームをEC2インスタンスにアタッチし、ディスク容量を拡張する手順を解説します。


1. EC2インスタンスのIDを取得


まず、EBSボリュームをアタッチする対象のEC2インスタンスのIDを確認します。

# 変数の設定
$Region = "ap-northeast-1"

# 実行中のEC2インスタンスの一覧を取得
Get-EC2Instance -Region $Region | Select-Object InstanceId, State, PrivateIpAddress, Tags

出力例:

InstanceId       State     PrivateIpAddress Tags
----------       -----     ---------------  ------
i-0123456789abc  running   192.168.1.100    Name: WebServer
i-0abcdef123456  stopped   192.168.1.200    Name: Database

この情報を元に、適切なEC2インスタンスIDを取得し、次のステップで使用します。


2. 新しいEBSボリュームをEC2インスタンスにアタッチ


次に、作成したEBSボリュームをEC2インスタンスにアタッチします。

# 変数の設定
$Region = "ap-northeast-1"
$InstanceId = "i-0123456789abc"  # 対象のEC2インスタンスID
$VolumeId = "vol-0123456789abcdef0"  # 作成したEBSボリュームID
$DeviceName = "/dev/xvdf"  # Linuxの場合(Windowsでは "/dev/sdf" など)

# EBSボリュームのアタッチ
Register-EC2Volume -InstanceId $InstanceId -VolumeId $VolumeId -Device $DeviceName -Region $Region

Write-Output "EBSボリューム ($VolumeId) を EC2インスタンス ($InstanceId) にアタッチしました。"

デバイス名の指定について:

  • Linux: /dev/xvdf/dev/sdf など
  • Windows: xvdf ではなく xvdhxvdi を使用することが一般的

3. Linuxでのディスク拡張処理


Linuxインスタンスにボリュームをアタッチした後、ファイルシステムを拡張するためには、SSHでログインし、以下のコマンドを実行します。

  1. ボリュームが認識されているか確認
lsblk

出力例:

NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
xvda    202:0    0   50G  0 disk /
xvdf    202:1    0  100G  0 disk 

xvdf が新しくアタッチされたボリュームです。

  1. ファイルシステムを拡張ext4 の場合)
sudo resize2fs /dev/xvdf

xfs ファイルシステムの場合:

sudo xfs_growfs /mnt/data
  1. 拡張後のサイズを確認
df -h

4. Windowsでのディスク拡張処理


Windowsインスタンスの場合、RDPで接続し、以下の手順でディスクを拡張します。

  1. ディスクの管理ツールを開く
  • 「Windowsキー + R」 → diskmgmt.msc を入力 → Enter
  1. EBSボリュームのディスクを右クリックし、「ボリュームの拡張」
  2. 拡張サイズを指定し、「次へ」→「完了」

PowerShellを使用してディスクの拡張を行う場合、以下のコマンドを実行します。

# 使用可能なディスクを表示
Get-Partition

# 指定したディスクのボリュームを拡張(例: Dドライブ)
Resize-Partition -DriveLetter D -Size (Get-PartitionSupportedSize -DriveLetter D).SizeMax

Write-Output "ディスク D の容量を最大限まで拡張しました。"

5. EBSボリュームの状態確認


アタッチされたEBSボリュームが正常に動作しているか確認するには、以下のコマンドを実行します。

Get-EC2VolumeAttachment -Region "ap-northeast-1" | Select-Object VolumeId, InstanceId, State, Device

出力例:

VolumeId        InstanceId       State   Device
----------      ----------       ------  ------
vol-0123456789  i-0123456789abc  attached  /dev/xvdf

まとめ


本章では、スナップショットから作成したEBSボリュームをEC2インスタンスにアタッチし、ディスク容量を拡張する方法を解説しました。

  • Register-EC2Volume を使用してボリュームをアタッチ
  • Linuxでは resize2fs または xfs_growfs で拡張
  • Windowsでは Resize-Partition を使用して拡張

次の章では、この処理を自動化するための定期実行設定について解説します。

自動化の応用:定期実行の設定方法

EBSボリュームのスナップショット作成、拡張処理を自動化することで、手作業の負担を削減し、安定した運用が可能になります。本章では、PowerShellスクリプトを定期実行する方法を解説します。


1. PowerShellスクリプトの準備

以下のスクリプトを作成し、EBSスナップショットの作成とボリューム拡張を自動化します。

# PowerShell スクリプト: AutoExpandEBS.ps1

# AWSリージョン設定
$Region = "ap-northeast-1"

# EC2インスタンスID
$InstanceId = "i-0123456789abc"

# EBSボリュームID(拡張対象)
$VolumeId = "vol-0123456789abcdef0"

# 1. スナップショットを作成
$Snapshot = New-EC2Snapshot -VolumeId $VolumeId -Description "Auto snapshot for volume expansion" -Region $Region
Write-Output "スナップショット作成完了: ID - $($Snapshot.SnapshotId)"

# 2. ボリュームサイズを拡張
$NewSize = 200  # 変更後のサイズ(GB)
Modify-EC2Volume -VolumeId $VolumeId -Size $NewSize -Region $Region
Write-Output "EBSボリュームのサイズを $NewSize GB に拡張しました。"

# 3. 新しいサイズを確認
Start-Sleep -Seconds 10
$UpdatedVolume = Get-EC2Volume -VolumeId $VolumeId -Region $Region
Write-Output "ボリューム拡張後のサイズ: $($UpdatedVolume.Size) GB"

# 4. EC2インスタンスにボリュームをアタッチ
$DeviceName = "/dev/xvdf"
Register-EC2Volume -InstanceId $InstanceId -VolumeId $VolumeId -Device $DeviceName -Region $Region
Write-Output "EBSボリューム ($VolumeId) を EC2インスタンス ($InstanceId) にアタッチしました。"

このスクリプトを定期実行することで、EBSボリュームの自動拡張を実現します。


2. Windowsタスクスケジューラでの定期実行


Windows環境では、タスクスケジューラを使用してPowerShellスクリプトを定期実行できます。

タスクの登録方法

  1. Windowsキー + Rtaskschd.msc を入力 → Enter
  2. 「タスクの作成」をクリック
  3. 「全般」タブ
  • 名前: EBS Auto Expand
  • 「最上位の特権で実行する」にチェックを入れる
  1. 「トリガー」タブ
  • 「新規」 → 「毎日」や「毎週」など適切な頻度を設定
  1. 「操作」タブ
  • 「新規」 → 操作を「プログラムの開始」に設定
  • プログラム/スクリプト: powershell.exe
  • 引数の追加:
    powershell -ExecutionPolicy Bypass -File "C:\Scripts\AutoExpandEBS.ps1"
  1. 「OK」を押して設定完了

これにより、設定したスケジュールでPowerShellスクリプトが実行されるようになります。


3. Linuxでの定期実行(Cronジョブ)


Linux環境では、cronジョブを使用してスクリプトを定期実行できます。

Cronジョブの設定方法

  1. スクリプトを作成/home/ec2-user/AutoExpandEBS.sh
#!/bin/bash
aws ec2 modify-volume --volume-id vol-0123456789abcdef0 --size 200 --region ap-northeast-1
  1. スクリプトに実行権限を付与
chmod +x /home/ec2-user/AutoExpandEBS.sh
  1. Cronジョブの登録
crontab -e

以下の行を追加して、毎日午前3時にスクリプトを実行するよう設定します。

0 3 * * * /home/ec2-user/AutoExpandEBS.sh

変更を保存して終了すれば、定期実行の設定が完了します。


4. LambdaとEventBridgeを使用したAWSネイティブな自動化


AWSのLambda関数とEventBridge(旧CloudWatch Events)を使用することで、AWS上で直接EBSボリュームの自動拡張を行うことも可能です。

(1) Lambda関数の作成


AWS Lambdaを作成し、以下のPythonコードを実行します。

import boto3

region = "ap-northeast-1"
volume_id = "vol-0123456789abcdef0"
new_size = 200

ec2 = boto3.client('ec2', region_name=region)

def lambda_handler(event, context):
    response = ec2.modify_volume(VolumeId=volume_id, Size=new_size)
    print(f"Volume {volume_id} has been resized to {new_size}GB")

(2) EventBridgeルールを作成

  1. AWSマネジメントコンソール → EventBridge に移動
  2. 「ルールの作成」→ スケジュールベースのルールを設定
  3. 「ターゲット」に上記のLambda関数を指定

これで、完全にAWS上での自動実行が可能になります。


まとめ


本章では、EBSボリュームの自動拡張を定期実行する方法を解説しました。

  • Windowsではタスクスケジューラを使用
  • Linuxではcronジョブを使用
  • AWSネイティブな方法としてLambda + EventBridgeを活用

次の章では、記事全体のまとめを行います。

まとめ

本記事では、PowerShellを使用してAWS EBSボリュームをスナップショットから自動拡張する方法について解説しました。EBSボリュームの容量不足はAWS運用においてよく発生する問題ですが、PowerShellスクリプトを活用することで、手作業を削減し、効率的なストレージ管理が可能になります。


学習した主なポイント

  1. EBSボリュームの基本と容量不足の原因
  • データの増加、適切でないストレージサイズ設定、キャッシュの蓄積などが原因
  • 容量不足を防ぐためには、適切なストレージ計画が重要
  1. PowerShellでのAWS環境設定
  • AWS CLIとAWS PowerShellモジュールのインストール
  • IAM権限の設定ec2:DescribeVolumesec2:CreateSnapshot など)
  • リージョンと認証情報の設定
  1. スナップショットの作成と管理
  • New-EC2Snapshot を使用してEBSスナップショットを作成
  • スナップショット一覧の取得古いスナップショットの削除
  1. スナップショットからEBSボリュームを作成
  • New-EC2Volume を使用し、スナップショットを基に新しいボリュームを作成
  • Modify-EC2Volume を用いてサイズ変更も可能
  1. EC2インスタンスへのボリュームアタッチとディスク拡張
  • Register-EC2Volume でインスタンスにボリュームをアタッチ
  • Linuxでは resize2fs、Windowsでは Resize-Partition でディスク拡張
  1. 自動化と定期実行の設定
  • Windows: タスクスケジューラで powershell.exe -ExecutionPolicy Bypass を実行
  • Linux: cronジョブ を設定し、定期的にスクリプトを実行
  • AWSネイティブ: Lambda + EventBridge でAWS上で完全自動化

今後の応用


本記事で解説したPowerShellスクリプトを応用することで、さらに高度な自動化AWSの他のサービスとの連携が可能になります。

  • CloudWatchアラームと連携して、ディスク容量が閾値を超えたら自動拡張
  • EBSボリュームのI/O性能(IOPS)も自動でスケールアップ
  • EC2 Auto Scalingと組み合わせた動的なストレージ管理

PowerShellを活用すれば、AWS環境の管理がより効率的かつ自動化され、運用負担の軽減につながります。ぜひ実践し、運用の最適化を目指してください!

コメント

コメントする

目次