PowerShellでAWS Backupプランを編集し複数リソースを一元管理する方法

PowerShellを使用してAWS Backupプランを編集し、複数のリソースを一元的にバックアップする方法を解説します。AWS Backupは、Amazon EC2、RDS、EBS、DynamoDBなどのリソースを自動的にバックアップ・リストアできるクラウドサービスです。しかし、GUIを使用しての管理は煩雑になりがちであり、特に複数のリソースを一括で管理する場合、手動設定では効率が悪くなります。

そこで、本記事では PowerShellを活用してAWS Backupプランを管理 し、リソースの追加・削除、スケジュール設定の変更、バックアップの一元管理を効率的に行う方法を詳しく説明します。PowerShellスクリプトを利用することで、設定変更の自動化や一括処理が可能となり、運用の負担を大幅に軽減できます。

具体的には以下の内容をカバーします。

  • AWS Backupの基本概念とメリット
  • PowerShellを使ったAWS Backupプランの取得・編集方法
  • バックアップ対象リソースの一括指定
  • 自動化スクリプトの作成と実行方法
  • トラブルシューティングとベストプラクティス

これにより、AWS Backupをより柔軟かつ効率的に活用できるようになり、クラウド環境のデータ保護と運用管理がスムーズに行えるようになります。

AWS Backupの概要と基本概念

AWS Backup は、クラウド環境におけるデータの保護と復旧を効率的に行うための フルマネージド型バックアップサービス です。Amazon EC2、Amazon RDS、Amazon EBS、DynamoDB、EFS、Aurora などのリソースを、 統一されたポリシーのもとで自動バックアップ できるため、運用負担を軽減しながら確実なデータ保護を実現できます。

AWS Backupの主な機能

AWS Backupには以下の主要な機能があります。

  • バックアッププランの作成
  • 自動スケジュールでのバックアップ
  • バックアップの保存期間とライフサイクルの管理
  • 複数のリソースに対する統一的なバックアップポリシー設定
  • バックアップの取得とリストア
  • 手動バックアップおよびスケジュールバックアップ
  • 過去のバックアップデータの確認
  • 必要なタイミングでのリストア(復旧)
  • クロスリージョン・クロスアカウントバックアップ
  • 異なるリージョンやアカウントに対してバックアップデータをコピー
  • 災害復旧(DR)のためのデータ冗長化

AWS Backupを活用するメリット

AWS Backupを利用することで、次のようなメリットが得られます。

  1. 管理の一元化
  • 各AWSリソースのバックアップポリシーを統一的に適用できるため、運用の手間が削減される。
  1. 自動化による人的ミスの防止
  • 手動でのバックアップ作業を減らし、スケジュール設定による 確実なデータ保護 を実現。
  1. コスト最適化
  • 長期保存のデータをライフサイクルポリシーに従って コスト効率の良いストレージ へ移動可能。
  1. セキュリティとコンプライアンス対応
  • 暗号化やIAM(Identity and Access Management)を活用したアクセス制御が可能。
  • 業界のコンプライアンス要件(HIPAA、ISO など)に対応。

PowerShellを活用する理由

通常、AWS Backupの設定や管理は AWSマネジメントコンソール からGUI操作で行えます。しかし、複数のリソースを一括管理する場合、GUIでは手間がかかるため、 PowerShellを使用してスクリプト化することで、より効率的に管理する ことができます。

次の章では、PowerShellを利用するメリットや事前準備について詳しく解説します。

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

AWS Backupの管理には、AWSマネジメントコンソールのGUIを利用する方法がありますが、PowerShellを使用することで以下のような 自動化・効率化 のメリットを得られます。

PowerShellを使うメリット

  1. 一括管理が可能
  • 複数のリソースを一元的に管理し、バックアップの作成・編集・削除を 一括実行 できる。
  1. 自動化による運用負担の軽減
  • スクリプトを作成して定期実行すれば、手動で設定を行う必要がなくなり、 人的ミスを防止 できる。
  1. 再利用性が高い
  • スクリプトをテンプレート化することで、 複数環境(開発・本番)への適用が容易 になる。
  1. CI/CDとの統合が可能
  • PowerShellスクリプトをJenkinsやGitHub Actionsなどと連携させ、 Infrastructure as Code(IaC) として活用できる。

PowerShellを使用するための事前準備

PowerShellを使ってAWS Backupを操作するには、以下の準備が必要です。

1. AWS CLIのインストール

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

  1. AWS CLIの最新バージョンをダウンロード
  1. インストールの確認
   aws --version

正しくインストールされていれば、バージョン情報が表示されます。

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

AWSのPowerShellモジュール(AWS Tools for PowerShell)をインストールします。

Install-Module -Name AWSPowerShell -Scope CurrentUser

インストール後、PowerShellでAWSコマンドを実行できるようになります。

3. AWS認証情報の設定

PowerShellがAWSと接続できるよう、AWSの認証情報(アクセスキー・シークレットキー)を設定します。

  1. IAMユーザーの作成(権限付与)
    AWS マネジメントコンソールで IAMユーザーを作成 し、以下のポリシーをアタッチします。
  • AWSBackupFullAccess(バックアップの管理)
  • AmazonS3FullAccess(S3への保存が必要な場合)
  1. AWS CLIで認証情報を設定
    取得したアクセスキーを設定します。
   aws configure

プロンプトが表示されるので、IAMユーザーの Access Key IDSecret Access Key を入力し、リージョンを設定します。(例: ap-northeast-1

4. PowerShellがAWSに接続できるか確認

設定が完了したら、PowerShellで以下のコマンドを実行し、適切に接続できているか確認します。

Get-AWSRegion

問題なくリージョン一覧が取得できれば、準備完了です。


次の章では、PowerShellを使って 既存のAWS Backupプランを取得する方法 について解説します。

AWS Tools for PowerShellのインストールと設定

AWS BackupをPowerShellで操作するには、AWS Tools for PowerShell を導入し、AWS環境への接続を適切に設定する必要があります。本章では、その手順を詳しく解説します。


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

AWS Tools for PowerShellは、AWSの各種サービスをPowerShell上で管理できるモジュールです。これをインストールすることで、AWS Backupプランの作成・編集・削除などをスクリプトで操作できるようになります。

インストール手順

PowerShellを管理者権限で開き、以下のコマンドを実行します。

Install-Module -Name AWSPowerShell -Scope CurrentUser

もし、スクリプト実行ポリシーの警告が出た場合は、以下のコマンドで変更します。

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

インストール確認
インストールが完了したら、以下のコマンドでモジュールが適用されているか確認します。

Get-Module -ListAvailable -Name AWSPowerShell

2. AWS認証情報の設定

PowerShellを使ってAWSにアクセスするためには、IAMユーザーの認証情報(アクセスキーとシークレットキー) を設定する必要があります。

(1) IAMユーザーの作成

AWSマネジメントコンソールで以下の手順を行います。

  1. IAMコンソール にアクセス(IAM管理ページ
  2. ユーザーの追加」をクリック
  3. 任意のユーザー名を入力し、「プログラムによるアクセス」を有効化
  4. ポリシーのアタッチ
  • AWSBackupFullAccess
  • AmazonS3FullAccess(S3に保存する場合)
  1. ユーザーの作成」を完了し、アクセスキーIDとシークレットアクセスキーを取得

(2) PowerShellで認証情報を設定

取得したアクセスキー情報をもとに、PowerShellで以下のコマンドを実行します。

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

確認
設定が正しく反映されているか、以下のコマンドで確認します。

Get-AWSCredential -ListProfileDetail

3. デフォルトリージョンの設定

AWSにアクセスする際のデフォルトリージョンを設定しておくと、毎回指定する手間が省けます。

(1) 使用可能なリージョン一覧を取得

AWS Backupが対応するリージョンを確認するには、以下のコマンドを実行します。

Get-AWSRegion

(2) デフォルトリージョンを設定

リージョンを指定し、デフォルト設定として保存します。(例: 東京リージョン ap-northeast-1

Initialize-AWSDefaultConfiguration -Region ap-northeast-1

確認
設定したリージョンが適用されているか確認します。

(Get-AWSDefaultConfiguration).Region

4. AWSに接続できるか確認

最後に、AWSとPowerShellの接続をテストします。

Get-AWSService

上記コマンドを実行し、AWSのサービス一覧が表示されれば、正しく接続されています。


まとめ

ここまでで、PowerShellを用いてAWS Backupを管理するための環境が整いました。

  • AWS Tools for PowerShellのインストール
  • IAMユーザーの作成と認証情報の設定
  • デフォルトリージョンの設定
  • 接続確認

次の章では、既存のAWS Backupプランを取得する方法 について詳しく解説します。

既存のAWS Backupプランを取得する方法

PowerShellを使用して、既存のAWS Backupプランを取得し、その内容を確認する方法を解説します。バックアッププランの詳細を取得することで、現在の設定を理解し、適切に編集・管理できるようになります。


1. AWS Backupプランとは?

AWS Backupプランは、以下の情報を含むバックアップスケジュールの管理単位です。

  • バックアップポリシー(スケジュール、保存期間、ライフサイクル)
  • 対象リソースの指定(EC2、RDS、EBS など)
  • クロスリージョン・クロスアカウントコピーの設定
  • タグベースのリソース選択

PowerShellを使って、これらの設定を取得・変更することで、手動操作を省略し、効率的な管理が可能になります。


2. 既存のAWS Backupプラン一覧を取得する

AWS Backupプランの一覧を取得するには、Get-BackupPlanList コマンドを使用します。

Get-BackupPlanList

出力例

BackupPlanId        : 1234abcd-5678-efgh-9012-ijklmnopqrst
BackupPlanName      : DailyBackupPlan
CreationDate        : 2023-01-15T12:00:00Z

このコマンドを実行すると、アカウント内のすべてのバックアッププランのID、名前、作成日時などが一覧表示されます。


3. 特定のバックアッププランの詳細を取得

バックアッププランの詳細情報を確認するには、Get-BackupPlan コマンドを使用し、BackupPlanId を指定します。

Get-BackupPlan -BackupPlanId 1234abcd-5678-efgh-9012-ijklmnopqrst

出力例

BackupPlanId        : 1234abcd-5678-efgh-9012-ijklmnopqrst
BackupPlanName      : DailyBackupPlan
Rules               : {BackupRule1}
AdvancedBackupSettings : {DynamoDB ContinuousBackup}

このコマンドを実行すると、スケジュールや保存期間などの詳細設定を確認できます。


4. バックアッププランに紐づくリソースを取得

特定のバックアッププランに関連するリソース(EC2、RDS、EBSなど)を確認するには、以下のコマンドを使用します。

Get-BackupSelection -BackupPlanId 1234abcd-5678-efgh-9012-ijklmnopqrst

出力例

BackupPlanId    : 1234abcd-5678-efgh-9012-ijklmnopqrst
SelectionName   : CriticalSystems
IamRoleArn      : arn:aws:iam::123456789012:role/AWSBackupRole
Resources       : {arn:aws:ec2:us-east-1:123456789012:instance/i-0abcd1234efgh5678}

この結果から、現在バックアップの対象になっているリソースのARN(Amazon Resource Name)が確認できます。


5. 取得した情報のJSON形式での出力

PowerShellの ConvertTo-Json を活用すると、取得したデータをJSON形式で表示できます。

Get-BackupPlan -BackupPlanId 1234abcd-5678-efgh-9012-ijklmnopqrst | ConvertTo-Json -Depth 3

出力例

{
  "BackupPlanId": "1234abcd-5678-efgh-9012-ijklmnopqrst",
  "BackupPlanName": "DailyBackupPlan",
  "Rules": [
    {
      "RuleName": "DailyBackup",
      "TargetBackupVaultName": "Default",
      "ScheduleExpression": "cron(0 12 * * ? *)",
      "StartWindowMinutes": 60,
      "CompletionWindowMinutes": 120
    }
  ]
}

この出力を利用すれば、スクリプトによる編集や別環境への適用が容易になります。


6. まとめ

  • Get-BackupPlanList:既存のバックアッププランの一覧を取得
  • Get-BackupPlan:特定のバックアッププランの詳細を確認
  • Get-BackupSelection:バックアッププランに関連するリソースを取得
  • ConvertTo-Json を活用すると、取得データを見やすいJSON形式で出力可能

次の章では、PowerShellを使ったAWS Backupプランの編集方法 を解説します。

PowerShellを用いたAWS Backupプランの編集

既存のAWS Backupプランを編集することで、バックアップスケジュールの変更対象リソースの追加・削除 などが可能になります。本章では、PowerShellを使ってバックアッププランを変更する方法を解説します。


1. バックアッププランの取得

バックアッププランを編集する前に、対象となるプランの情報を取得します。

Get-BackupPlanList

このコマンドを実行し、BackupPlanId を取得します。

BackupPlanId        : 1234abcd-5678-efgh-9012-ijklmnopqrst
BackupPlanName      : DailyBackupPlan

次に、詳細情報を確認します。

Get-BackupPlan -BackupPlanId 1234abcd-5678-efgh-9012-ijklmnopqrst | ConvertTo-Json -Depth 3

この情報をもとに、バックアッププランを変更していきます。


2. バックアッププランのスケジュール変更

バックアップスケジュールを変更するには、Update-BackupPlan コマンドを使用します。

(1) 変更前のスケジュールを確認

(Get-BackupPlan -BackupPlanId 1234abcd-5678-efgh-9012-ijklmnopqrst).BackupPlan.Rules

出力例

RuleName                   : DailyBackup
TargetBackupVaultName       : Default
ScheduleExpression          : cron(0 12 * * ? *)
StartWindowMinutes         : 60
CompletionWindowMinutes    : 120

この場合、現在のスケジュールは 毎日12:00 UTC で実行されています。

(2) スケジュールを毎日午前3:00 UTC に変更

PowerShellで以下のようなJSONオブジェクトを作成し、新しいバックアッププランを適用します。

$backupPlan = @{
    BackupPlanName = "DailyBackupPlan"
    Rules = @(@{
        RuleName = "DailyBackup"
        TargetBackupVaultName = "Default"
        ScheduleExpression = "cron(0 3 * * ? *)"  # 変更後: 毎日3:00 UTC
        StartWindowMinutes = 60
        CompletionWindowMinutes = 120
    })
} | ConvertTo-Json -Depth 3

Update-BackupPlan -BackupPlanId "1234abcd-5678-efgh-9012-ijklmnopqrst" -BackupPlan $backupPlan

変更内容

  • ScheduleExpression"cron(0 3 * * ? *)" に変更(毎日 3:00 UTC に実行)

適用確認

Get-BackupPlan -BackupPlanId 1234abcd-5678-efgh-9012-ijklmnopqrst | ConvertTo-Json -Depth 3

変更後のスケジュールが "cron(0 3 * * ? *)" に更新されていれば成功です。


3. バックアップ対象リソースの追加

特定のリソース(EC2, RDS, EBS など)を新たにバックアップ対象に追加するには、Update-BackupSelection を使用します。

(1) 既存のバックアップ対象を確認

Get-BackupSelection -BackupPlanId 1234abcd-5678-efgh-9012-ijklmnopqrst

出力例

BackupPlanId    : 1234abcd-5678-efgh-9012-ijklmnopqrst
SelectionName   : CriticalSystems
Resources       : {arn:aws:ec2:us-east-1:123456789012:instance/i-0abcd1234efgh5678}

現在、EC2インスタンス i-0abcd1234efgh5678 がバックアップ対象になっています。

(2) 新しいリソースを追加

たとえば、新たに EBSボリューム をバックアップ対象に追加する場合、以下のように設定します。

$backupSelection = @{
    SelectionName = "CriticalSystems"
    IamRoleArn = "arn:aws:iam::123456789012:role/AWSBackupRole"
    Resources = @(
        "arn:aws:ec2:us-east-1:123456789012:instance/i-0abcd1234efgh5678",  # 既存のEC2
        "arn:aws:ec2:us-east-1:123456789012:volume/vol-1234abcd5678efgh"  # 新しく追加するEBS
    )
} | ConvertTo-Json -Depth 3

Update-BackupSelection -BackupPlanId "1234abcd-5678-efgh-9012-ijklmnopqrst" -BackupSelection $backupSelection

変更内容

  • Resources に新しいEBSボリュームのARNを追加

適用確認

Get-BackupSelection -BackupPlanId 1234abcd-5678-efgh-9012-ijklmnopqrst

リストに新しいリソースが追加されていれば成功です。


4. バックアップ対象リソースの削除

不要になったリソースをバックアップ対象から削除する場合、対象のリソースをリストから削除 して Update-BackupSelection を実行します。

(1) EC2インスタンスを削除

以下のように、新しいリストを作成し適用します。

$backupSelection = @{
    SelectionName = "CriticalSystems"
    IamRoleArn = "arn:aws:iam::123456789012:role/AWSBackupRole"
    Resources = @(
        "arn:aws:ec2:us-east-1:123456789012:volume/vol-1234abcd5678efgh"  # EBSのみ残す
    )
} | ConvertTo-Json -Depth 3

Update-BackupSelection -BackupPlanId "1234abcd-5678-efgh-9012-ijklmnopqrst" -BackupSelection $backupSelection

5. バックアップボールト(保存先)の変更

バックアップの保存先を変更するには、バックアッププランの TargetBackupVaultName を新しいボールト名に変更します。

$backupPlan = @{
    BackupPlanName = "DailyBackupPlan"
    Rules = @(@{
        RuleName = "DailyBackup"
        TargetBackupVaultName = "NewBackupVault"  # 変更後のボールト名
        ScheduleExpression = "cron(0 3 * * ? *)"
        StartWindowMinutes = 60
        CompletionWindowMinutes = 120
    })
} | ConvertTo-Json -Depth 3

Update-BackupPlan -BackupPlanId "1234abcd-5678-efgh-9012-ijklmnopqrst" -BackupPlan $backupPlan

変更後、以下のコマンドで適用確認を行います。

(Get-BackupPlan -BackupPlanId 1234abcd-5678-efgh-9012-ijklmnopqrst).BackupPlan.Rules

6. まとめ

  • Update-BackupPlan でバックアップスケジュールや保存先を変更
  • Update-BackupSelection でバックアップ対象リソースを追加・削除
  • Get-BackupPlanGet-BackupSelection で変更後の設定を確認

次の章では、バックアップ対象のリソースを複数指定する方法 を詳しく解説します。

バックアップ対象のリソースを複数指定する方法

AWS Backupでは、PowerShellを使用して 複数のリソース(EC2、EBS、RDSなど)を一括でバックアップ対象に設定 できます。本章では、複数リソースをまとめて管理する方法を詳しく解説します。


1. バックアップ対象リソースの指定方法

AWS Backupでは、以下の2つの方法でバックアップ対象を指定できます。

  1. リソースARNを直接指定(個別リソースを指定)
  2. タグベースでリソースを自動選択(特定のタグを持つリソースをすべて対象)

どちらの方法でも、PowerShellで Update-BackupSelection を使って設定できます。


2. リソースARNを直接指定する方法

バックアップ対象リソースを 明示的に指定 する方法です。EC2インスタンスやEBSボリュームなどのARNを取得し、それらをリストに追加します。

(1) 既存のバックアップ対象を確認

Get-BackupSelection -BackupPlanId "1234abcd-5678-efgh-9012-ijklmnopqrst"

(2) 新しいリソースを追加

EC2、EBS、RDSをまとめてバックアップ対象にする場合、以下のように設定します。

$backupSelection = @{
    SelectionName = "MultiResourceBackup"
    IamRoleArn = "arn:aws:iam::123456789012:role/AWSBackupRole"
    Resources = @(
        "arn:aws:ec2:us-east-1:123456789012:instance/i-0abcd1234efgh5678",  # EC2
        "arn:aws:ec2:us-east-1:123456789012:volume/vol-1234abcd5678efgh",  # EBS
        "arn:aws:rds:us-east-1:123456789012:db:mysql-db"  # RDS
    )
} | ConvertTo-Json -Depth 3

Update-BackupSelection -BackupPlanId "1234abcd-5678-efgh-9012-ijklmnopqrst" -BackupSelection $backupSelection

適用確認

Get-BackupSelection -BackupPlanId "1234abcd-5678-efgh-9012-ijklmnopqrst"

出力されたリソース一覧に、新たに追加したリソースが含まれていれば成功です。


3. タグベースでリソースを自動選択する方法

すべての対象リソースを手動で指定するのは手間がかかるため、特定のタグを持つリソースを自動でバックアップ対象にする 方法があります。

(1) どのリソースに適用されるか確認

まず、PowerShellでタグが適用されたリソースを確認します。

Get-EC2Instance | Select-Object -ExpandProperty Tags

特定のタグ (BackupDaily に設定されているリソース) を持つものをバックアップ対象にするには、以下のように記述します。

(2) タグベースのバックアップ対象設定

$backupSelection = @{
    SelectionName = "TagBasedBackup"
    IamRoleArn = "arn:aws:iam::123456789012:role/AWSBackupRole"
    ListOfTags = @(@{
        ConditionKey = "Backup"
        ConditionValue = "Daily"
        ConditionType = "STRINGEQUALS"
    })
} | ConvertTo-Json -Depth 3

Update-BackupSelection -BackupPlanId "1234abcd-5678-efgh-9012-ijklmnopqrst" -BackupSelection $backupSelection

この設定を適用すると、Backup=Daily のタグが付与されたすべてのリソース がバックアップ対象になります。

適用確認

Get-BackupSelection -BackupPlanId "1234abcd-5678-efgh-9012-ijklmnopqrst"

このコマンドを実行し、ListOfTagsBackup=Daily が設定されていれば成功です。


4. ARNとタグベースの組み合わせ

手動指定(ARN指定)とタグベースを組み合わせることも可能です。たとえば、「重要なEC2インスタンスはARN指定」「その他のサーバーはタグベース」といった柔軟な設定ができます。

$backupSelection = @{
    SelectionName = "HybridBackup"
    IamRoleArn = "arn:aws:iam::123456789012:role/AWSBackupRole"
    Resources = @(
        "arn:aws:ec2:us-east-1:123456789012:instance/i-0abcd1234efgh5678"
    )
    ListOfTags = @(@{
        ConditionKey = "Backup"
        ConditionValue = "Weekly"
        ConditionType = "STRINGEQUALS"
    })
} | ConvertTo-Json -Depth 3

Update-BackupSelection -BackupPlanId "1234abcd-5678-efgh-9012-ijklmnopqrst" -BackupSelection $backupSelection

この設定では、特定のEC2インスタンス(ARN指定)と、タグ Backup=Weekly を持つ全リソース をバックアップ対象とします。


5. まとめ

方法メリット設定方法
ARN指定特定のリソースを明確に管理Resources = @("リソースARN")
タグベース一括適用で管理が簡単ListOfTags = @(@{"ConditionKey"="タグ名";"ConditionValue"="値"})
ARN + タグ重要リソースは個別指定、その他はタグ管理ResourcesListOfTags を併用

次の章では、PowerShellスクリプトを使ってAWS Backupプランを自動化する方法 を解説します。

自動化のためのスクリプト作成と実行方法

AWS Backupの設定をPowerShellで管理する際、スクリプトを活用することで定期的な実行や設定の一括適用が可能 になります。本章では、PowerShellスクリプトを作成し、バックアップの管理を自動化する方法を解説します。


1. バックアッププランの自動作成スクリプト

バックアッププランを新規作成し、スケジュールを設定するスクリプトを作成します。

(1) スクリプトの内容

以下のスクリプトは、毎日午前3:00 UTC にバックアップを取得するプランを作成 します。

# バックアッププランの作成
$backupPlan = @{
    BackupPlanName = "AutomatedBackupPlan"
    Rules = @(@{
        RuleName = "DailyBackup"
        TargetBackupVaultName = "Default"
        ScheduleExpression = "cron(0 3 * * ? *)"  # 毎日3:00 UTC
        StartWindowMinutes = 60
        CompletionWindowMinutes = 120
        Lifecycle = @{
            DeleteAfterDays = 30  # 30日間保持
        }
    })
} | ConvertTo-Json -Depth 3

$backupPlanResponse = New-BackupPlan -BackupPlan $backupPlan
$backupPlanId = $backupPlanResponse.BackupPlanId

Write-Host "バックアッププランが作成されました: $backupPlanId"

(2) スクリプトの実行

PowerShellでスクリプトを保存(例: CreateBackupPlan.ps1)し、以下のコマンドで実行します。

powershell -ExecutionPolicy Bypass -File CreateBackupPlan.ps1

成功すると、新しいバックアッププランのIDが表示されます。


2. バックアップ対象の自動追加スクリプト

特定のタグ (Backup=Daily) を持つリソースをバックアップ対象に追加するスクリプトを作成します。

(1) スクリプトの内容

# バックアップ対象の設定
$backupSelection = @{
    SelectionName = "DailyTagBasedBackup"
    IamRoleArn = "arn:aws:iam::123456789012:role/AWSBackupRole"
    ListOfTags = @(@{
        ConditionKey = "Backup"
        ConditionValue = "Daily"
        ConditionType = "STRINGEQUALS"
    })
} | ConvertTo-Json -Depth 3

# 既存のバックアッププランIDを指定
$backupPlanId = "1234abcd-5678-efgh-9012-ijklmnopqrst"

# バックアップ対象の追加
Update-BackupSelection -BackupPlanId $backupPlanId -BackupSelection $backupSelection

Write-Host "バックアップ対象リソースが追加されました。"

(2) スクリプトの実行

powershell -ExecutionPolicy Bypass -File AddBackupSelection.ps1

3. バックアップ実行スクリプト

作成済みのバックアッププランを即時実行するスクリプトを作成します。

(1) スクリプトの内容

# 既存のバックアッププランIDを指定
$backupPlanId = "1234abcd-5678-efgh-9012-ijklmnopqrst"

# バックアップジョブの作成
$backupJob = Start-BackupJob -BackupPlanId $backupPlanId -ResourceArn "arn:aws:ec2:us-east-1:123456789012:instance/i-0abcd1234efgh5678"

Write-Host "バックアップジョブが開始されました。ジョブID: $($backupJob.BackupJobId)"

(2) スクリプトの実行

powershell -ExecutionPolicy Bypass -File RunBackupJob.ps1

バックアップジョブの進行状況は、以下のコマンドで確認できます。

Get-BackupJob -BackupJobId $backupJob.BackupJobId

4. スケジュールタスクを使った自動実行

スクリプトを Windowsのタスクスケジューラ を使って定期実行すると、完全に自動化できます。

(1) タスクスケジューラに登録

以下のコマンドをPowerShellで実行すると、スクリプトが 毎日午前3時に自動実行 されるようになります。

$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-File C:\Scripts\RunBackupJob.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At 3am
Register-ScheduledTask -TaskName "DailyAWSBackup" -Action $action -Trigger $trigger -User "SYSTEM" -RunLevel Highest

(2) タスクの確認

登録したタスクの一覧を確認するには、以下のコマンドを実行します。

Get-ScheduledTask | Where-Object {$_.TaskName -eq "DailyAWSBackup"}

5. まとめ

スクリプト内容
CreateBackupPlan.ps1AWS Backupプランの作成
AddBackupSelection.ps1バックアップ対象の追加
RunBackupJob.ps1バックアップの即時実行
タスクスケジューラバックアップの定期実行

PowerShellスクリプトを使うことで、AWS Backupの管理を 完全自動化 できます。

次の章では、トラブルシューティングとベストプラクティス について解説します。

トラブルシューティングとベストプラクティス

PowerShellを使用してAWS Backupを管理する際、エラーが発生することがあります。本章では、よくあるトラブルの解決方法と、安定した運用のためのベストプラクティス を解説します。


1. よくあるエラーと対処法

(1) 認証エラー (UnauthorizedOperation)

エラー内容

An error occurred (UnauthorizedOperation) when calling the Update-BackupSelection operation.

原因

  • IAMユーザーまたはロールに必要な権限 (AWSBackupFullAccess) が付与されていない。
  • 認証情報 (Access Key / Secret Key) が正しく設定されていない。

解決策

  1. IAMユーザーに AWSBackupFullAccess を付与する。
  2. AWS認証情報を再設定する。
aws configure
  1. IAMロールを再確認し、適切な権限を付与する。

(2) BackupPlanNotFoundException

エラー内容

An error occurred (BackupPlanNotFoundException) when calling the Get-BackupPlan operation.

原因

  • 指定した BackupPlanId が間違っている。
  • バックアッププランが削除されている。

解決策

  1. バックアッププランの一覧を取得し、正しいIDを確認 する。
Get-BackupPlanList
  1. 正しいIDを使って再実行 する。
Get-BackupPlan -BackupPlanId "正しいID"

(3) InvalidParameterValueException

エラー内容

An error occurred (InvalidParameterValueException) when calling the Update-BackupSelection operation.

原因

  • Resources または ListOfTags の値が正しくない。
  • ARN の形式が間違っている。

解決策

  1. バックアップ対象リソースのARNが正しいか確認。
Get-EC2Instance | Select-Object -ExpandProperty InstanceId
  1. ARNの形式が間違っていないか確認。
arn:aws:ec2:us-east-1:123456789012:instance/i-0abcd1234efgh5678
  1. タグの設定が正しいか確認(タグは 大文字・小文字 を区別する)。
Get-EC2Tag

2. ベストプラクティス(安定した運用のために)

(1) IAMポリシーの最小権限を付与

原則として、最小限の権限のみ付与する。
例えば、EC2のバックアップのみ管理する場合は、以下のようなIAMポリシーを適用。

{
    "Effect": "Allow",
    "Action": [
        "backup:CreateBackupPlan",
        "backup:UpdateBackupPlan",
        "backup:DeleteBackupPlan",
        "backup:StartBackupJob",
        "backup:GetBackupPlan",
        "ec2:DescribeInstances"
    ],
    "Resource": "*"
}

(2) バックアップジョブの監視

バックアップジョブの成功・失敗を監視することで、障害発生時にすぐ対応できるようにする。

バックアップジョブのステータスを確認

Get-BackupJob

失敗したジョブのみ表示

Get-BackupJob | Where-Object { $_.State -eq "FAILED" }

(3) ログを記録する

スクリプト実行時に、ログを記録することで問題発生時のトラブルシューティングが容易になる。

PowerShellスクリプトのログ出力

Start-Transcript -Path "C:\Logs\AWSBackupLog.txt" -Append
# バックアップ実行
Start-BackupJob -BackupPlanId "1234abcd-5678-efgh-9012-ijklmnopqrst"
Stop-Transcript

(4) タスクスケジューラでの自動実行

スケジューラを使ってスクリプトを 定期実行 し、バックアップの自動化を実現。

毎日午前3時にスクリプトを実行

$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-File C:\Scripts\RunBackupJob.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At 3am
Register-ScheduledTask -TaskName "DailyAWSBackup" -Action $action -Trigger $trigger -User "SYSTEM" -RunLevel Highest

タスクスケジューラの確認

Get-ScheduledTask | Where-Object {$_.TaskName -eq "DailyAWSBackup"}

3. まとめ

項目内容
認証エラー対策IAMポリシーの権限を確認 (AWSBackupFullAccess)
バックアッププランが見つからないGet-BackupPlanList でIDを確認
リソースARNのミスGet-EC2Instance で正しいARNを取得
ジョブの監視Get-BackupJob で失敗ジョブを確認
ログの記録Start-Transcript でログファイルを出力
定期実行タスクスケジューラ (Register-ScheduledTask) を活用

これらの対策を実施することで、安定したAWS Backupの運用 が可能になります。

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

まとめ

本記事では、PowerShellを使用してAWS Backupプランを管理・編集し、複数のリソースを一元的にバックアップする方法 について解説しました。

1. AWS Backupの基本

  • AWS Backupは、EC2、EBS、RDS などのリソースを自動でバックアップ・復元 できるマネージドサービス。
  • バックアッププランを作成し、スケジュールや保存期間を設定 することで、効率的なデータ保護が可能。

2. PowerShellによるAWS Backup管理のメリット

  • GUI操作を減らし、自動化で作業効率を向上 できる。
  • 複数のリソースを一括管理 し、変更の適用やメンテナンスを容易にする。
  • タスクスケジューラと連携し、定期バックアップの自動化 も可能。

3. 実践したPowerShellスクリプト

  • バックアッププランの取得・編集
  • リソースの追加・削除(ARN指定・タグベース)
  • バックアップジョブの手動実行と監視
  • タスクスケジューラでの自動化

4. トラブルシューティングとベストプラクティス

  • IAM権限 (AWSBackupFullAccess) の設定を確認。
  • Get-BackupPlanList で正しいプランIDを取得。
  • Get-BackupJob でジョブの状態を監視。
  • Start-Transcript でログを記録し、エラー発生時の原因を特定。

5. 今後の応用

この方法を活用すれば、AWS Backupだけでなく、AWS LambdaやS3ライフサイクル管理と組み合わせた高度なバックアップ戦略 も構築可能です。PowerShellスクリプトを継続的に活用し、AWS環境の管理をさらに効率化しましょう。

以上で、PowerShellを用いたAWS Backupの管理方法についての解説を終了します。

コメント

コメントする

目次