高度な概念

この項では、PowerShell SDKの概念について説明します。

この項では、PowerShell SDKの概念について説明します。

セッション・プリファレンスの管理

OCI Modules for PowerShellでは、PowerShellセッションの環境変数を使用して、一部のオプションの共通パラメータに値を指定できます。これらの環境変数は、PowerShellセッションで直接構成することも、Set-OCIClientSessionコマンドレットを使用して構成することもできます。これらの環境変数に割り当てられた値は、それらが設定されたPowerShellセッションでのみAPIコールを行うために使用されます。

PowerShellでの環境変数の直接設定

次の環境変数を使用して、OCI Modules for PowerShellで使用される一部のパラメータの値を指定できます:
コマンドレット・パラメータ 環境変数名 ノート
Region OCI_PS_REGION 値が指定されない場合、ユーザー優先プロファイルのリージョン値が使用されます。
Profile OCI_PS_PROFILE 値が指定されない場合、DEFAULTプロファイルが使用されます。
ConfigFile OCI_PS_CONFIG 値が指定されない場合、~/.oci/configの構成ファイルが使用されます。
NoRetry OCI_PS_NORETRY 値が指定されない場合、デフォルトの再試行戦略が再試行に使用されます。
TimeOutInMillis OCI_PS_TIMEOUT 値が指定されない場合、デフォルト値の100,000ミリ秒(100秒)が使用されます。
AuthType OCI_PS_AUTH 値が指定されない場合、構成ファイルに定義されたAPIキーが使用されます。

たとえば、リージョンを設定するには:

PS /> $Env:OCI_PS_REGION="us-phoenix-1"

コマンドレットを使用した環境変数の設定

Set-OCIClientSessionおよびGet-OCIClientSessionコマンドレットを使用して、セッション・プリファレンス環境変数を設定および取得できます。

Set-OCIClientSession

このコマンドレットは、前述の環境変数を使用して、PowerShellセッションのRegionProfileおよびConfigファイル・プリファレンスを設定します。

ノート

次の例を実行する前にOCI.PSModules.Commonをインポートします。
PS /> Set-OCIClientSession -RegionId "us-ashburn-1" -Profile "Test" -Config "~/.oci/testconfig"
 
RegionId     Profile Config
--------     ------- ------
us-ashburn-1 Test    ~/.oci/testconfig

セッション・プリファレンス環境変数を削除するには、適切なパラメータを指定してClear-OCIClientSessionコマンドレットを実行します。

Get-OCIClientSession

共通モジュールのGet-OCIClientSessionコマンドレットを使用して、現在のPowerShellセッションから共通パラメータに設定されたセッション・プリファレンス値を取得します。

PS /> Get-OCIClientSession                                                                    
 
RegionId     Profile Config
--------     ------- ------
us-ashburn-1 Test

パラメータの優先順位

パラメータを評価するとき、OCI Modules for PowerShellは次の優先順位に従います:

  1. コマンドレット・パラメータで指定された値。
  2. セッション・プリファレンスで指定された値。
  3. ~/.oci/configにあるOCI構成ファイルのユーザー選択プロファイルで指定された値。
ノート

OCI Modules for PowerShellは、DEFAULTプロファイルをフォールバック・プロファイルとして使用します。特定のプロファイルで明示的に定義されていない値はすべてDEFAULTプロファイルから継承されます。

履歴ストア

デフォルトでは、OCIコマンドレットは基礎となるREST API操作のレスポンス本文を出力します。履歴ストアによってユーザーに提供されるPowerShell変数は、OCIコマンドレットの呼出しやOCIサービスからの完全なAPIレスポンスを詳しく調べるために使用できます。
ノート

各PowerShellセッションには独自の履歴ストアがあります。

履歴ストアを使用して、次のことができます:

  • 前のコマンドレットのレスポンス・オブジェクト値を次のコマンドレットで使用します
  • レスポンス・ヘッダーを含む完全なAPIレスポンスを調べます(たとえば、オプティミスティックな同時実行性のためのe-tagまたはページ区切りのためのOpcNextPageヘッダーの使用など)
  • 診断目的でコマンドレットの呼出しシーケンスを調べます

履歴ストアは、Oci.PSModules.Common.Cmdlets.CmdletHistory.OCICmdletHistoryStoreオブジェクトとして$OCICmdletHistoryという名前のPowerShell変数にカプセル化されます。

詳細は、GitHubの履歴ストアの例を参照してください。

履歴ストアのプロパティ

この項では、$OCICmdletHistoryに格納されている履歴ストア・オブジェクトに含まれるプロパティについて説明します。

   TypeName: Oci.PSModules.Common.Cmdlets.CmdletHistory.OCICmdletHistoryStore
                
                Name         MemberType Definition
                ----         ---------- ----------
                Entries      Property   Oci.PSModules.Common.Cmdlets.CmdletHistory.OCICmdletHistory[] Entries {get;}
                LastResponse Property   psobject LastResponse {get;}
                Size         Property   int Size {get;}

Size

履歴ストアに保存できるコマンドの最大数を示します。デフォルト値は20です。有効な値は、1から100000です(両方の値を含む)。履歴ストアのサイズを変更するには、Set-OCICmdletHistoryを使用します。

ノート

メモリー使用量を制限するために、履歴サイズを最小限に抑えることをお薦めします。

Entries

格納された履歴への索引付きアクセスを許可するOci.PSModules.Common.Cmdlets.CmdletHistory.OCICmdletHistoryオブジェクトのコレクションです。

Oci.PSModules.Common.Cmdlets.CmdletHistory.OCICmdletHistoryオブジェクトには次のプロパティがあります:

名前 タイプ 説明
StartTime System.DateTime コマンドレット実行の開始時間。
EndTime System.DateTime コマンドレットの実行の終了時間。
Command System.Management.Automation.InvocationInfo このコマンドが呼び出された方法と場所を説明します。
Response System.Management.Automation.PSObject コマンドレットによって返される出力オブジェクト。

LastResponse

PowerShellセッションの最後のOCIコマンドレットのレスポンスをカプセル化するSystem.Management.Automation.PSObjectオブジェクト。

履歴ストアのコマンドレット

Oci.PSModules.Commonモジュールでは、履歴ストアを操作するための次のコマンドレットが提供されます。GitHubの例を参照してください。

Get-OCICmdletHistory

現在のPowerShellセッションに格納されているコマンドレット履歴を取得します。

Set-OCICmdletHistory

履歴ストアのプロパティを設定します。

Clear-OCICmdletHistory

現在のPowerShellセッションに格納されているコマンドレット履歴を削除します。

ページ区切り

リストAPI操作を呼び出すOCIコマンドレットでは、結果をページ区切りできます。これで、レコードがなくなるまで、(ページ区切りトークンに自動的に従って)得られた結果をバッチ単位で取得できます。

ノート

このトピックの例では、コンピュート・サービスのListImages操作をコールします。この項の例を試す前に、必ずOCI.PSModules.Coreをインポートします。

最初のページ結果の取得

ページ区切りをサポートするコマンドレットのデフォルトの動作では、-Pageパラメータを指定せずに呼び出されると、結果の最初のページのみを取得します。

たとえば、使用可能なコンピュート・イメージの最初のページを取得するには、コンパートメントIDを使用してGet-OCIComputeImagesListを呼び出します:

PS /> Get-OCIComputeImagesList -CompartmentId $Env:CompartmentId | Measure-Object
 
Count             : 100

前述の例では、-Pageパラメータが暗黙にNULLに設定しています。

ノート

ページ当たりの結果の最大数はサービスによって定義されており、サービスのAPIリファレンスで確認できます。

結果の制限

-Limitパラメータで、返される結果のページ当たりの最大数を指定します。

この例では、返される結果のページ当たりの最大数が5に設定されます:

PS /> Get-OCIComputeImagesList -CompartmentId $Env:CompartmentId -Limit 5 | Measure-Object                                       
 
Count             : 5

次のページ結果の取得

-Pageパラメータを使用し、前のコマンドレット・レスポンスに含まれていたopc-next-pageレスポンス・ヘッダーのページ区切りトークンを渡すことで、結果の次のページを取得します。

ノート

履歴ストアを使用して、前のコマンドレット・レスポンスを取得できます。

この例では、履歴ストアの$OCICmdletHistory.LastResponse.OpcNextPageプロパティを引数として-Pageパラメータに渡すことで、ページ区切りされた前のコールの残りの結果を取得する方法を示します:

PS /> Get-OCIComputeImagesList -CompartmentId $Env:CompartmentId -Page $OCICmdletHistory.LastResponse.OpcNextPage | Measure-Object
 
Count             : 100

すべての結果の取得

ページ区切りをサポートするOCIコマンドレットは、得られたすべてのページの結果を自動ページ区切りしてフェッチできます。コマンドレットの実行時に-Allスイッチ・パラメータを渡すことで、コマンドレットによってページ区切りを行うようにします。

PS /> Get-OCIComputeImagesList -CompartmentId $Env:CompartmentId -All | Measure-Object                                            
 
Count             : 293

ウェイタおよび非同期コール

コンピュート・インスタンスなどのほとんどのOracle Cloud Infrastructureリソースにはライフサイクルが含まれます。多くのケースで、コマンドがさらにアクションを行う前に、リソースまたは作業リクエストが特定の状態になるまで、またはタイムアウトが超過するまで待機する必要があります。リソースをポーリングしてその状態を確認できます。

OCI Modules for PowerShellではウェイタ・パラメータが提供され、それを使用すると、リソースが目的の状態になるまでコマンドレットが待機できるようになります。ウェイタ・パラメータが指定されたコマンドレットは、目的の状態の1つに到達するかタイムアウトが超過するまで待機するように、ブロッキング方式で呼び出すことができます。リソースまたは作業リクエストに対してさらにアクションを実行する前に、ウェイタによりポーリング・ロジックが抽象化されます(これが行われない場合は、ユーザーが抽象化を追加する必要があります)。

たとえば、コンピュート・サービスでLaunchInstanceをコールすると、レスポンス・ヘッダーにwork-request-idが含まれます。OCI Modules for PowerShellがこのIDを使用するのは、ユーザーが-WaitForStatusパラメータを指定するときです。これによって、スクリプトは、作業リクエストが成功するまで待機してから続行するようになります。

例:
#Create a new compute instance and wait for the instance work request to succeed or fail, 
#polling every 60 seconds and attempting 20 times max
$ComputeInstance = New-OCIComputeInstance -LaunchInstanceDetails $LaunchDetails -WaitForStatus Succeeded,Failed -MaxWaitAttempts 20 -WaitIntervalSeconds 60

ウェイタのパラメータ

この項では、非同期コールに使用されるパラメータについて説明します。

WaitForStatus

このパラメータを指定してアクションを実行し、リソースが目的のライフサイクル状態に達するまで待機します。複数の状態を指定でき、リソースが目的の状態の1つに達したときに返されます。

WaitIntervalSeconds

WaitIntervalSecondsに指定された秒ごとに、リソースが目的のいずれかの状態に達しているかどうかを確認します。このパラメータのデフォルト値は30秒です。

MaxWaitAttempts

リソースが目的の状態のいずれかに達するまでに試行する最大回数。このパラメータのデフォルト値は3回の試行です。

ノート

現在、OCIコマンドレットは、ウェイタをサポートするコマンドレットの最大待機時間を受け入れません。MaxWaitAttemptsまたはWaitIntervalSeconds (あるいはその両方)の値を制御することで、この制限を回避できます。

正常に完了したとき、コマンドレットは受信した元のレスポンス・オブジェクトを返します。指定の制限内でリソースが目的の状態に到達できないなどのエラーが発生した場合、エラー・メッセージを含む例外がスローされます。

ストリームの入力および出力

一部のOCIコマンドレットは、ストリーム・タイプのオブジェクトを受け入れるAPIまたは返すAPI (たとえば、ファンクション・サービスのInvokeFunctions操作)と相互作用します。これらのOCIコマンドレットが受け入れるパラメータは、ファイル・パスを取得し、暗黙的にファイルをストリームに変換して戻します。
ノート

ストリーム・パラメータまたは同等のファイル・パラメータを渡すことができます(両方を渡すことはできません)。
ファイル入力パラメータの名前は、対応するストリーム入力パラメータに基づいて付けられ、ファイル出力パラメータの名前はOutputFileになります。
ノート

例は、OCI.PSModules.FunctionsInvoke-OCIFunctionsInvokeFunctionコマンドレットのヘルプ・テキストを参照してください。

このGitHubのサンプルは、ストリームの使用方法を示しています。

ロギング

トラブルシューティングを容易にするために、OCI Modules for PowerShellでは、エラー・メッセージに加えて、コンソールでのdebugレベルおよびverboseレベルのメッセージのロギングがサポートされています。この機能は、標準のPowerShell DebugおよびVerboseパラメータと統合されています。

コマンドレットの呼出しで-Debugまたは-Verboseパラメータを渡すと、コンソールにログ・メッセージが表示されます。

例:

PS /> Get-OCIComputeImagesList -CompartmentId $Env:CompartmentId -Limit 1 -Verbose
 
#More Verbose
PS /> Get-OCIComputeImagesList -CompartmentId $Env:CompartmentId -Limit 1 -Debug

インスタンス・プリンシパルによる認証

インスタンス・プリンシパルはIAMサービス機能で、インスタンスが、サービス・リソースに対してアクションを実行できる認可済アクター(すなわちプリンシパル)になります。各コンピュート・インスタンスは、自身のアイデンティティを持ち、追加された証明書を使用して認証を行います。これらの証明書は自動的に作成され、インスタンスに割り当てられてローテーションされ、ホストに資格証明を配布してローテーションする必要がなくなります。

ノート

ンスタンス・プリンシパルの詳細は、インスタンスからのサービスのコールを参照してください。

OCIコマンドレットからインスタンス・プリンシパル認証を有効にするには、インスタンスを認可してAuthTypeパラメータを設定します。例:

PS /> Get-OCIIdentityRegionsList -AuthType InstancePrincipal

専用エンドポイント

専用エンドポイントは、クライアント・レベルで特定のレルムに対してサービスによって定義されたエンドポイント・テンプレートです。OCI Modules for PowerShellでは、このレルム固有のエンドポイント・テンプレート機能をアプリケーション・レベルとクライアント・レベルの両方で使用可能にできます。この機能はデフォルトでは無効です。
ノート

クライアント・レベルで設定された値は、アプリケーション・レベルで設定された値よりも優先されます。

アプリケーション・レベルでのレルム固有のエンドポイント・テンプレートの有効化:

アプリケーション・レベルでレルム固有のエンドポイント・テンプレート機能を有効にするには、環境変数OCI_REALM_SPECIFIC_SERVICE_ENDPOINT_TEMPLATE_ENABLEDtrueに設定します。
ノート

ブール値では大/小文字が区別されません。

クライアント・レベルでのレルム固有のエンドポイント・テンプレートの有効化:

クライアント・レベルでレルム固有のエンドポイント・テンプレート機能を有効にするには、次に示すようにコードでフラグを設定します。
$NamespaceName = Get-OCIObjectStorageNamespace -CompartmentId $CompartmentId -UseRealmSpecificEndpoint -Debug

完全な例は、GitHubのCreateBucketUsingRealmSpecificEndpoint_ObjectStorageの例を参照してください。