高度な概念
この項では、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セッションのRegion
、Profile
および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は次の優先順位に従います:
- コマンドレット・パラメータで指定された値。
- セッション・プリファレンスで指定された値。
~/.oci/config
にあるOCI構成ファイルのユーザー選択プロファイルで指定された値。
OCI Modules for PowerShellは、DEFAULT
プロファイルをフォールバック・プロファイルとして使用します。特定のプロファイルで明示的に定義されていない値はすべてDEFAULTプロファイルから継承されます。
履歴ストア
各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コマンドレットでは、結果をページ区切りできます。これで、レコードがなくなるまで、(ページ区切りトークンに自動的に従って)得られた結果をバッチ単位で取得できます。
最初のページ結果の取得
ページ区切りをサポートするコマンドレットのデフォルトの動作では、-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 (あるいはその両方)の値を制御することで、この制限を回避できます。
正常に完了したとき、コマンドレットは受信した元のレスポンス・オブジェクトを返します。指定の制限内でリソースが目的の状態に到達できないなどのエラーが発生した場合、エラー・メッセージを含む例外がスローされます。
ストリームの入力および出力
InvokeFunctions
操作)と相互作用します。これらのOCIコマンドレットが受け入れるパラメータは、ファイル・パスを取得し、暗黙的にファイルをストリームに変換して戻します。 ストリーム・パラメータまたは同等のファイル・パラメータを渡すことができます(両方を渡すことはできません)。
OutputFile
になります。 例は、
OCI.PSModules.Functions
のInvoke-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_REALM_SPECIFIC_SERVICE_ENDPOINT_TEMPLATE_ENABLED
をtrue
に設定します。 ブール値では大/小文字が区別されません。
クライアント・レベルでのレルム固有のエンドポイント・テンプレートの有効化:
$NamespaceName = Get-OCIObjectStorageNamespace -CompartmentId $CompartmentId -UseRealmSpecificEndpoint -Debug
完全な例は、GitHubのCreateBucketUsingRealmSpecificEndpoint_ObjectStorageの例を参照してください。