PowerShellでOCI Computeインスタンスを自動操作する方法を徹底解説

PowerShellを使用してOracle Cloud Infrastructure (OCI)のComputeインスタンスを効率的に起動・停止する方法は、多忙なクラウド管理者にとって重要なスキルです。本記事では、OCIの基本概要から、PowerShellを活用した自動化手法までを分かりやすく解説します。これにより、クラウドリソースを必要に応じて効率的に管理し、コストの最適化や操作の迅速化を実現できます。初心者でもすぐに始められるよう、実践的な例とともに手順を詳しく説明します。

目次

Oracle Cloud Infrastructure (OCI) の概要とPowerShellの役割

Oracle Cloud Infrastructure (OCI)は、高度なパフォーマンスとスケーラビリティを提供するクラウドプラットフォームです。Computeインスタンスをはじめ、ストレージやネットワークサービスなど幅広い機能を備え、エンタープライズ向けのクラウドソリューションとして注目されています。

OCIの基本機能

OCIは以下のような主要な機能を提供しています。

Compute

仮想マシンやベアメタルインスタンスを利用して、高性能なコンピューティングリソースを活用できます。

Storage

ブロックストレージやオブジェクトストレージを使用して、データを安全に保存・管理できます。

Networking

柔軟な仮想クラウドネットワーク (VCN) を利用して、安全で高性能な通信を実現します。

PowerShellを活用する利点

PowerShellは、Windowsを中心に多くの環境で使用されるスクリプト言語で、OCIリソースの管理においても以下のようなメリットがあります。

操作の自動化

手動操作をスクリプト化することで、反復作業を効率化できます。

簡潔なリソース管理

PowerShellコマンドレットを使用することで、複雑なAPI操作を簡単に実行できます。

他ツールとの連携

PowerShellは、他のクラウドやオンプレミスツールとも簡単に連携でき、統合的な管理が可能です。

OCIとPowerShellを組み合わせることで、クラウドリソースを効率的かつ柔軟に管理し、運用業務の負担を軽減することができます。

OCI環境の事前準備

PowerShellを使用してOracle Cloud Infrastructure (OCI) を操作する前に、必要な環境を整えることが重要です。このセクションでは、OCIアカウントのセットアップからAPIキーの生成、PowerShell環境のインストールまでを解説します。

OCIアカウントのセットアップ

アカウントの作成

  1. OCIの公式ウェブサイト にアクセスします。
  2. 無料アカウントを作成し、クレジットカード情報を登録してOCIコンソールにアクセスできるようにします。
  3. アカウント作成後、ログインしてOCIダッシュボードに移動します。

テナンシーIDの取得

OCIダッシュボードから、「テナンシー」 を選択し、テナンシーIDをコピーします。これを後で使用します。

APIキーの生成

PowerShellからOCIリソースを操作するには、APIキーを生成して設定する必要があります。

キーの生成方法

  1. ローカル環境でSSHを使用して鍵を生成します。
   ssh-keygen -t rsa -b 2048 -f ~/.oci/oci_api_key
  1. 公開鍵(oci_api_key.pub)をOCIのユーザ設定にアップロードします。
  • OCIダッシュボードから 「ユーザー設定」 → 「APIキー」 → 「APIキーの追加」 を選択。
  • 公開鍵をアップロードし、キーIDを取得します。

PowerShellのインストールとセットアップ

PowerShellを使用するために、OCI PowerShellモジュールをインストールします。

PowerShellの準備

  1. PowerShellのバージョン確認
    PowerShell 7.0以上を推奨します。以下のコマンドでバージョンを確認できます。
   $PSVersionTable.PSVersion
  1. PowerShellの更新
    古いバージョンの場合、最新バージョンをPowerShell公式サイトからダウンロードしてインストールします。

OCI CLIのインストール

  1. OCI CLIをインストールすることで、OCIとPowerShellの統合がスムーズになります。
   curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh | bash

環境変数の設定

PowerShellスクリプトで使用するために、APIキーやテナンシーIDなどの環境変数を設定します。

$env:OCI_TENANCY = "<Your_Tenancy_ID>"
$env:OCI_USER = "<Your_User_ID>"
$env:OCI_KEY_FILE = "C:\Path\To\oci_api_key.pem"
$env:OCI_REGION = "<Your_Region>"

この準備を完了することで、PowerShellからOCIリソースを操作する準備が整います。

OCI PowerShellモジュールのインストールと構成

Oracle Cloud Infrastructure (OCI) をPowerShellで操作するには、OCI PowerShellモジュールをインストールし、環境を適切に構成する必要があります。このセクションでは、モジュールのインストール手順と構成方法について解説します。

OCI PowerShellモジュールのインストール

OCI PowerShellモジュールは、OCIリソースを管理するためのコマンドレットを提供します。以下の手順でモジュールをインストールしてください。

手順

  1. PowerShellを管理者として起動
    Windowsの場合は、スタートメニューからPowerShellを右クリックして「管理者として実行」を選択します。
  2. モジュールのインストール
    以下のコマンドを実行してOCI PowerShellモジュールをインストールします。
   Install-Module -Name OCI.PSModules -AllowClobber -Scope CurrentUser
  • -AllowClobber オプションは、既存のコマンドとの競合を防ぎます。
  • -Scope CurrentUser は現在のユーザーのみにモジュールをインストールします。
  1. インストールの確認
    モジュールが正しくインストールされたか確認します。
   Get-Module -Name OCI.PSModules -ListAvailable

OCI PowerShellモジュールの構成

モジュールを使用するには、OCIアカウント情報をPowerShellに設定します。

構成手順

  1. OCIプロファイルの作成
    OCI PowerShellモジュールではプロファイルを使用して接続情報を管理します。以下のコマンドを実行してプロファイルを作成します。
   New-OCIProfile -ProfileName "Default" -TenancyId "<Your_Tenancy_ID>" -UserId "<Your_User_ID>" -Region "<Your_Region>" -KeyFilePath "C:\Path\To\oci_api_key.pem"
  • ProfileName には任意のプロファイル名を指定します。
  • 必要な値は、事前準備で取得したテナンシーID、ユーザーID、リージョン、APIキーのパスを使用します。
  1. プロファイルの確認
    作成したプロファイルが正しく設定されているか確認します。
   Get-OCIProfile
  1. 環境変数の設定 (オプション)
    プロファイルを明示的に指定せずに使用する場合、デフォルトプロファイルを環境変数として設定できます。
   $env:OCI_PROFILE = "Default"

接続確認

設定が正しく行われたか確認するため、OCI PowerShellモジュールのコマンドレットを使用して、リソースを一覧表示します。以下は、リージョン内のすべてのComputeインスタンスを取得する例です。

Get-OCIComputeInstance

トラブルシューティング

インストールや構成中にエラーが発生した場合、以下を確認してください。

  • 必要な依存モジュール(PowerShellGet など)がインストールされているか。
  • APIキーのパスや権限が正しいか。
  • ネットワーク接続が問題なく確立されているか。

以上の手順を完了することで、OCI PowerShellモジュールを使用してクラウドリソースを管理する準備が整います。

Computeインスタンスの詳細とAPIの基礎知識

Oracle Cloud Infrastructure (OCI) のComputeインスタンスは、仮想マシンまたはベアメタルマシンを利用して、高性能なコンピューティングリソースを提供します。このセクションでは、Computeインスタンスの基本構造と、APIを利用した操作の基礎知識について解説します。

Computeインスタンスの基本構造

インスタンスのタイプ

OCIのComputeインスタンスには、以下の主なタイプがあります。

  • 仮想マシン (VM): 仮想化技術を用いた柔軟なリソース割り当てが可能。
  • ベアメタルインスタンス: ハードウェアを直接使用するため、高いパフォーマンスと制御性を提供。

主要な構成要素

  1. シェイプ
    インスタンスのCPUやメモリの構成を定義します。
  • 例: VM.Standard2.1(1 OCPU、15GBメモリ)
  1. ブートボリューム
    オペレーティングシステムが格納されたストレージ。
  2. VCN (仮想クラウドネットワーク)
    インスタンスが通信するためのネットワーク。

Computeインスタンスのライフサイクル

Computeインスタンスは以下のライフサイクルで操作されます。

  • STARTED: インスタンスが起動している状態。
  • STOPPED: インスタンスが停止している状態。
  • TERMINATED: インスタンスが削除された状態。

OCI APIの基礎知識

OCIの操作は、REST APIを通じて実行されます。APIを理解しておくと、PowerShellやその他のツールを使った自動化がスムーズになります。

APIエンドポイント

OCI APIは、リージョンごとにエンドポイントが異なります。例:

  • 東京リージョン: https://iaas.ap-tokyo-1.oraclecloud.com

APIリクエストの構成

OCI APIリクエストは以下のように構成されます。

  1. HTTPメソッド: 操作を指定する。例: GET、POST、DELETE
  2. エンドポイント: リソースにアクセスするためのURL。例: /instances/{instanceId}
  3. 認証情報: APIキーを使用した署名付きリクエストが必要。
  4. リクエストボディ: リソース作成や更新の際に必要なデータを含む。

よく使うAPI操作

  1. インスタンス一覧の取得
    指定されたコンパートメント内のインスタンスを取得します。
  • API: GET /instances
  1. インスタンスの起動
    停止中のインスタンスを起動します。
  • API: POST /instances/{instanceId}/actions/start
  1. インスタンスの停止
    起動中のインスタンスを停止します。
  • API: POST /instances/{instanceId}/actions/stop

PowerShellでのAPI呼び出し

OCI PowerShellモジュールは、REST APIのラッパーとして機能し、簡単なコマンドでAPIを呼び出せます。

例: インスタンスの一覧取得

以下のコマンドで、指定したコンパートメント内のComputeインスタンスを取得できます。

Get-OCIComputeInstance -CompartmentId "<Your_Compartment_ID>"

例: インスタンスの起動

特定のインスタンスを起動するには、次のコマンドを実行します。

Invoke-OCIComputeInstanceAction -InstanceId "<Your_Instance_ID>" -Action "START"

APIを活用した自動化のメリット

  • 効率的な操作: 手動操作をスクリプト化することで、反復的なタスクを削減できます。
  • 一貫性: APIを使用することで、誤操作を防ぎ、運用プロセスを統一できます。
  • 柔軟性: カスタマイズされた操作や新しいワークフローの導入が容易です。

OCI Computeインスタンスの理解とAPIの基礎知識を活用することで、PowerShellを用いた高度な自動化が可能になります。

インスタンスの起動・停止を行うPowerShellスクリプト

PowerShellを使用してOCI Computeインスタンスを起動・停止するためには、OCI PowerShellモジュールを活用してスクリプトを作成します。このセクションでは、インスタンス操作の具体的なスクリプト例を解説します。

スクリプトの概要

以下のスクリプトでは、指定されたインスタンスを起動または停止する操作を行います。操作対象となるインスタンスIDやアクション(起動・停止)を入力として受け取ります。

スクリプト例: インスタンス操作

以下のスクリプトは、OCI PowerShellモジュールを利用してComputeインスタンスを操作します。

# OCI PowerShellモジュールのインポート
Import-Module OCI.PSModules

# インスタンス操作スクリプト
param (
    [string]$InstanceId,    # 操作対象のインスタンスID
    [string]$Action         # アクション (START または STOP)
)

# 入力値のバリデーション
if (-not $InstanceId) {
    Write-Error "InstanceIdを指定してください。"
    exit 1
}

if ($Action -notin @("START", "STOP")) {
    Write-Error "Actionは'START'または'STOP'のいずれかを指定してください。"
    exit 1
}

try {
    # インスタンスの現在の状態を取得
    $Instance = Get-OCIComputeInstance -InstanceId $InstanceId
    Write-Host "現在の状態: $($Instance.LifecycleState)"

    # アクションの実行
    if (($Action -eq "START" -and $Instance.LifecycleState -ne "RUNNING") -or
        ($Action -eq "STOP" -and $Instance.LifecycleState -ne "STOPPED")) {

        Invoke-OCIComputeInstanceAction -InstanceId $InstanceId -Action $Action
        Write-Host "アクション '$Action' を実行しました。"

    } else {
        Write-Host "インスタンスは既に目的の状態になっています: $($Instance.LifecycleState)"
    }

} catch {
    Write-Error "エラーが発生しました: $_"
}

スクリプトの動作説明

  1. パラメータの受け取り
  • $InstanceId: 操作対象のComputeインスタンスのIDを指定します。
  • $Action: START(起動)または STOP(停止)を指定します。
  1. 入力値のバリデーション
    必須パラメータが指定されていない場合や不正な値が入力された場合は、エラーを表示します。
  2. インスタンス状態の確認
    Get-OCIComputeInstance コマンドを使用して、対象インスタンスの現在の状態を取得します。
  3. アクションの実行
    指定されたアクションが必要な場合のみ、Invoke-OCIComputeInstanceAction を呼び出してインスタンスを操作します。
  4. エラーハンドリング
    操作中にエラーが発生した場合、例外をキャッチしてエラーメッセージを表示します。

実行方法

このスクリプトを ManageOCIInstance.ps1 として保存し、以下のように実行します。

# インスタンスを起動
.\ManageOCIInstance.ps1 -InstanceId "ocid1.instance.oc1..example" -Action "START"

# インスタンスを停止
.\ManageOCIInstance.ps1 -InstanceId "ocid1.instance.oc1..example" -Action "STOP"

スクリプトの応用例

  • 複数インスタンスの一括操作: 配列を使って複数のインスタンスIDを処理するようスクリプトを拡張できます。
  • ログ記録の追加: 操作結果をログファイルに記録する機能を追加することで、運用監視を強化できます。
  • 通知の実装: スクリプト実行結果をメールやSlackで通知する仕組みを追加できます。

このスクリプトを活用することで、OCI Computeインスタンスの操作を効率的に自動化し、運用の負担を軽減することが可能です。

スクリプトの定期実行を設定する方法

OCI Computeインスタンスを定期的に起動・停止するには、PowerShellスクリプトをWindowsのタスクスケジューラに設定します。このセクションでは、スクリプトの定期実行を設定する手順を詳しく解説します。

タスクスケジューラを使用した定期実行

Windowsのタスクスケジューラを使用して、PowerShellスクリプトを定期的に実行する設定を行います。

手順

  1. タスクスケジューラを起動
  • Windowsの「スタート」メニューから「タスクスケジューラ」を検索して起動します。
  1. 新しいタスクの作成
  • タスクスケジューラの右側メニューから「タスクの作成」を選択します。
  • タスクの名前と説明を入力します。例: OCIインスタンス操作
  1. トリガーの設定
  • 「トリガー」タブを選択し、「新規」をクリックします。
  • 実行タイミングを指定します。
    • 例: 毎日午前8時に実行する場合は「毎日」を選択し、時刻を「08:00」に設定します。
  1. 操作の設定
  • 「操作」タブを選択し、「新規」をクリックします。
  • 「プログラム/スクリプト」フィールドに以下を入力します。
    plaintext powershell.exe
  • 「引数の追加」フィールドに以下を入力します。
    plaintext -File "C:\Path\To\ManageOCIInstance.ps1" -InstanceId "ocid1.instance.oc1..example" -Action "START"
  • 必要に応じて、STOPアクション用のタスクも作成します。
  1. 条件と設定の調整
  • 「条件」タブで「コンピュータがAC電源で動作している場合のみ開始する」のチェックを外します(必要に応じて)。
  • 「設定」タブで「タスクを停止しない」のオプションを有効にします。
  1. タスクの保存
  • すべての設定が完了したら、「OK」をクリックしてタスクを保存します。

タスクの動作確認

作成したタスクが正しく動作するかを確認します。

  1. タスクスケジューラでタスクを右クリックし、「実行」を選択します。
  2. タスクの実行ログやPowerShellスクリプトの出力を確認します。

スクリプトログの記録

スクリプトの実行結果をログファイルに記録することで、トラブルシューティングが容易になります。以下のようにスクリプトを変更してログを記録します。

# ログファイルへの記録
$logFile = "C:\Path\To\OCI_Instance_Log.txt"
Start-Transcript -Path $logFile -Append
try {
    # スクリプトの処理をここに記述
    Write-Host "スクリプトが正常に実行されました。"
} catch {
    Write-Error "エラーが発生しました: $_"
} finally {
    Stop-Transcript
}

運用上のヒント

  • 頻度の調整: 必要に応じて、タスクの実行間隔を「毎分」や「毎週」に変更できます。
  • エラー通知: スクリプトにエラー通知機能を追加して、失敗時にメールやチャットで通知を送るよう設定するのも効果的です。
  • タスクの管理: タスクスケジューラでタスクをエクスポートしておけば、再設定時に便利です。

以上の設定により、OCI Computeインスタンスの操作をスケジュール化し、運用を自動化することが可能になります。

トラブルシューティングとよくあるエラーの解決策

PowerShellスクリプトを使用してOCI Computeインスタンスを操作する際、エラーが発生することがあります。このセクションでは、よくあるエラーとその解決策について解説します。

よくあるエラーと解決策

1. **認証エラー**

エラー内容:
Unauthorized または Authentication failed というメッセージが表示される。

原因:

  • APIキーが正しく設定されていない。
  • OCIプロファイル情報が間違っている。
  • 必要な権限が不足している。

解決策:

  1. APIキーの確認
  • 公開鍵がOCIダッシュボードに正しくアップロードされているか確認します。
  • 秘密鍵ファイルのパスが正しいか確認します。
  1. プロファイルの再設定
    プロファイル設定を確認し、必要なら再作成します。
   New-OCIProfile -ProfileName "Default" -TenancyId "<Your_Tenancy_ID>" -UserId "<Your_User_ID>" -Region "<Your_Region>" -KeyFilePath "C:\Path\To\oci_api_key.pem"
  1. IAMポリシーの確認
    必要なポリシー(例: Allow group <group-name> to manage all-resources in compartment <compartment-name>)が適用されているか確認します。

2. **インスタンスが見つからない**

エラー内容:
Instance not found または Invalid InstanceId。

原因:

  • 指定したインスタンスIDが間違っている。
  • インスタンスが異なるコンパートメントに存在している。

解決策:

  1. インスタンスIDの確認
    OCIダッシュボードで正しいインスタンスIDを取得してください。
  2. コンパートメントの指定
    正しいコンパートメントIDを使用してインスタンスを検索します。
   Get-OCIComputeInstance -CompartmentId "<Your_Compartment_ID>"

3. **スクリプトが途中で停止する**

エラー内容:
スクリプトが途中で実行を停止する、または無応答になる。

原因:

  • ネットワーク接続の問題。
  • OCI APIのリクエストタイムアウト。

解決策:

  1. ネットワーク接続の確認
  • インターネット接続が安定していることを確認します。
  • ファイアウォールやプロキシがOCIエンドポイントへのアクセスを妨害していないか確認します。
  1. タイムアウトの設定
    OCI APIのリクエストタイムアウトを変更します。
   $OCIConfig = Get-OCIConfig
   $OCIConfig.Timeout = 300

4. **無効なアクションエラー**

エラー内容:
Invalid action または Cannot perform action on current instance state。

原因:

  • インスタンスの状態に対して無効なアクションを実行しようとした。

解決策:

  1. インスタンスの現在の状態を確認
    スクリプトでインスタンスの状態を確認し、適切なアクションを選択します。
   $Instance = Get-OCIComputeInstance -InstanceId "<Instance_ID>"
   $Instance.LifecycleState
  1. 状態に応じたアクションを実行
  • 起動中 (RUNNING) のインスタンスには STOP を実行。
  • 停止中 (STOPPED) のインスタンスには START を実行。

5. **PowerShellモジュールが見つからない**

エラー内容:
The term 'Get-OCIComputeInstance' is not recognized as the name of a cmdlet。

原因:

  • OCI PowerShellモジュールがインストールされていない。
  • モジュールが正しくインポートされていない。

解決策:

  1. モジュールのインストール
   Install-Module -Name OCI.PSModules -AllowClobber -Scope CurrentUser
  1. モジュールのインポート
    スクリプトの先頭に以下を追加します。
   Import-Module OCI.PSModules
  1. インストールの確認
    モジュールが正しくインストールされているか確認します。
   Get-Module -ListAvailable -Name OCI.PSModules

ログとデバッグの活用

トラブルシューティングの際には、スクリプトの実行ログやOCIのAPIリクエストログを活用すると問題解決がスムーズです。

スクリプトログの記録

スクリプトの実行結果を記録することで、エラーの詳細を確認できます。

Start-Transcript -Path "C:\Path\To\OCI_Log.txt" -Append

OCIの操作ログの確認

OCIコンソールの「監査」セクションでAPIリクエストの履歴を確認できます。


これらの解決策を活用して、スクリプト実行中のトラブルを迅速に解決してください。

まとめ

本記事では、PowerShellを使用したOCI Computeインスタンスの起動・停止の自動化について解説しました。OCIの基本概要から、PowerShellモジュールのインストールと設定、スクリプトの作成と実行、さらに定期実行の設定やトラブルシューティングまで、具体的な手順を詳しく説明しました。

PowerShellを活用することで、クラウドリソースの操作を効率化し、運用管理の手間を大幅に削減できます。また、スクリプトのカスタマイズやエラー対処方法を学ぶことで、より柔軟で信頼性の高い自動化を実現できます。

OCIとPowerShellの組み合わせを活用し、クラウド運用をさらに最適化してください。

この記事を書いた人

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

コメント

コメントする

目次