Oracle Cloud Infrastructureに接続するためのFn ProjectのCLIコンテキストの作成

OCI Functionsで使用するためにOracle Cloud Infrastructureに接続するFn ProjectのCLIコンテキストを作成する方法を確認します。

OCIファンクションを使用する前に、Oracle Cloud Infrastructureテナンシに接続するようにFn ProjectのCLIを構成する必要があります。

Fn ProjectのCLIが最初にインストールされるとき、これはローカル開発の「コンテキスト」用に構成されます。Oracle Cloud Infrastructureテナンシに接続するようFn ProjectのCLIを構成するには、かわりに新しいコンテキストを作成する必要があります。コンテキストでは、OCIファンクション・エンドポイント、デプロイされたファンクションが属するコンパートメントのOCID、およびイメージをプッシュおよびプルするDockerレジストリのアドレスを指定します。

複数のコンテキストを定義し、それぞれを.yaml形式で異なるコンテキスト・ファイルに格納できます。デフォルトでは、個々のコンテキスト・ファイルは~/.fn/contextsディレクトリに格納されます。~/.fn/config.yamlファイルでは、どのコンテキスト・ファイルをFn Projectが使用するかを指定します。

新規コンテキストを作成するには、新規コンテキスト・ファイルを手動で作成し、そのファイルを指すように~/.fn/config.yamlファイルを手動で編集します。また、次の説明のように、Fn ProjectのCLIを使用して新しいコンテキスト・ファイルを対話形式で作成し、Fn ProjectのCLIにそのファイルの使用を開始するように指示することもできます。

開発環境としてCloud Shellを使用している場合、2つのFn Project CLIコンテキストがすでに作成されています(現在のリージョンのデフォルト・コンテキストおよびコンテキスト)。詳細は、クラウド・シェルでのOCIファンクションQuickStartガイドを参照してください。「スタート・ガイド」ページからクラウド・シェル・ウィンドウにコマンドをコピーして貼り付けるだけです。

  • Fn ProjectのCLIに、現在のリージョンのコンテキストを使用するように指示します。
  • デプロイ済関数を所有するコンパートメントのOCIDを提供するため
  • OCIファンクションで使用するOracle Cloud Infrastructure Registryアドレスを指定します

このトピックの手順では、次のことを前提としています:

  • クラウド・シェルを開発環境として使用していません
  • Linuxを使用している
  • Fn Project CLIのインストールのステップをすでに完了していること

Fn ProjectのCLIを使用して新しいコンテキストファイルを作成するには:

  1. ファンクション開発者として開発環境にログインします。

  2. ターミナル・ウィンドウで、次のように入力して、Oracle Cloud Infrastructure用の新しいFn ProjectのCLIコンテキストを作成します:

    fn create context <my-context> --provider oracle

    ここで、< my-context >は選択した名前です。例:

    fn create context johns-oci-context --provider oracle

    Oracle Cloud Infrastructureリクエスト署名、秘密キー、ユーザー・グループ、およびそれらのユーザー・グループに権限を付与するポリシーを使用して、認証および認可を有効にするには、--provider oracleを指定します。

  3. 次を入力して、Fn ProjectのCLIが新しいコンテキストを使用するように指定します:

    fn use context <my-context>

    ここで、< my-context >は前のステップで指定した名前です。例:

    fn use context johns-oci-context
  4. 次のように入力して、デプロイされたファンクションを所有するコンパートメントのOCIDを持つ新規コンテキストを構成します(この目的のために新規コンパートメントを作成した可能性があります。テナンシのネットワーク・リソースおよびOCIファンクション・リソースを所有するコンパートメントの作成(まだ存在しない場合)を参照してください):

    fn update context oracle.compartment-id <compartment-ocid>

    例:

    fn update context oracle.compartment-id ocid1.compartment.oc1..aaaaaaaarvdfa72n...
  5. 次のように入力して、APIのコール時に使用するapi-urlエンドポイントで新しいコンテキストを構成します。

    fn update context api-url <api-endpoint>

    ここで、<api-endpoint>は、ファンクションAPIファンクション・エンドポイントのリストにあるエンドポイントの1つです。フォーマットはhttps://functions.<region-identifier>.oci.oraclecloud.comです。<api-endpoint><region-identifier>は、ファンクションを作成およびデプロイするOracle Cloud Infrastructureのリージョン識別子です。たとえば、us-phoenix-1です。

    例:

    fn update context api-url https://functions.us-phoenix-1.oci.oraclecloud.com
  6. 次のように入力して、OCIファンクションで使用するDockerレジストリのアドレス(Oracle Cloud Infrastructure Registryなど)を使用して新しいコンテキストを構成します:

    fn update context registry <region-key>.ocir.io/<tenancy-namespace>/<repo-name-prefix>

    ここでは:

    • <region-key>は、Oracle Cloud Infrastructure Registryリージョンのキーです。たとえば、Phoenixの場合はphxです。リージョン別の可用性を参照してください。

      指定したDockerレジストリは、ファンクションを実行する対象のサブネットと同じリージョンにあることを確認することをお薦めします。

    • <tenancy-namespace>は、リポジトリを作成するテナンシの自動生成されたオブジェクト・ストレージ・ネームスペース文字列(「テナンシ情報」ページに表示)です。たとえば、acme-devテナンシのネームスペースは、ansh81vru1zpである可能性があります。一部の古いテナンシでは、ネームスペース文字列が、すべて小文字のテナンシ名(たとえば、acme-dev)と同じ場合があることに注意してください。
    • <repo-name-prefix>は、(オプションで)ファンクション・イメージをプッシュするリポジトリの名前を指定するために、デプロイするファンクションの名前の前に付けるリポジトリ名の接頭辞です。リポジトリ名接頭辞を使用すると、レジストリ内のリポジトリへのアクセスを編成および制御しやすくなります。リポジトリ名およびリポジトリ名の接頭辞に関するノートを参照してください。

    例:

    fn update context registry phx.ocir.io/ansh81vru1zp/acme-repo
  7. (オプション)次のように入力して、OCIファンクションがファンクション・イメージのプッシュおよびプルするリポジトリのコンパートメントのOCIDを使用して新しいコンテキストを構成します:

    fn update context oracle.image-compartment-id <compartment-ocid>

    例:

    fn update context oracle.image-compartment-id ocid1.compartment.oc1..aaaaaaaaquqe______z2q
    

    oracle.image-compartment-idの値を指定しない場合、OCI関数はルート・コンパートメント内のリポジトリに対してイメージをプッシュおよびプルします。どちらの場合も、コンパートメント(oracle.image-compartment-idで指定されたコンパートメントまたはルート・コンパートメント)のリポジトリを管理できるように、適切なポリシー・ステートメントが存在する必要があります。OCIファンクション・ユーザーにOracle Cloud Infrastructure Registryリポジトリへのアクセス権を付与するポリシー・ステートメントを参照してください。

    OCI関数は、ファンクション名の前にリポジトリ名の接頭辞を付加することで、ファンクション・イメージのリポジトリの名前を構成します。リポジトリ名は、テナンシ全体のすべてのコンパートメントで一意です。OCI関数は、コンパートメントに関して次のように動作し、名前付きリポジトリにイメージをプッシュする場合はoracle.image-compartment-idの動作になります。

    • その名前のリポジトリがoracle.image-compartment-idで指定されたコンパートメントにすでに存在する場合、OCIファンクションはイメージをそのリポジトリに正常にプッシュします。
    • その名前のリポジトリがテナンシ内のどのコンパートメント(ルート・コンパートメント内も含む)にも存在しない場合、OCIファンクションは、oracle.image-compartment-idで指定されたコンパートメントにその名前を持つ新しいリポジトリを作成し、そのイメージに正常にプッシュします。
    • その名前のリポジトリがテナンシにすでに存在し、oracle.image-compartment-idで指定されたコンパートメントとは異なるコンパートメントに存在する場合、OCIファンクションはエラーを発行します。OCIファンクションでイメージを正常にプッシュするには、oracle.image-compartment-idを既存のリポジトリのコンパートメントのOCIDに設定するか、別のリポジトリ名を指定する必要があります(ファンクションの名前を変更するか、代替のリポジトリ名接頭辞を指定)。
  8. (オプション)コンテキスト・ファイルを表示して、作成したFn ProjectのCLIコンテキストを確認します。たとえば、次のように入力します:

    more ~/.fn/contexts/johns-oci-context.yaml

    コンテキスト・ファイルには次のものが含まれています。

    api-url: https://functions.us-phoenix-1.oci.oraclecloud.com
    provider: oracle
    registry: phx.ocir.io/ansh81vru1zp/acme-repo
    oracle.image-compartment-id: <compartment-ocid>

このトピックのステップを完了したら、oracle.profileパラメータを使用したFn ProjectのCLIコンテキストの設定に移動します。

リポジトリ名およびリポジトリ名の接頭辞に関するノート

ファンクションをデプロイすると、ファンクション・イメージは、Fn ProjectのCLIコンテキストのregistry:設定で指定されたレジストリ内のリポジトリにプッシュされます。リポジトリの名前は、ファンクションの名前(<function-name>)と同じか、リポジトリ名の接頭辞が先頭に付加されたファンクションの名前(<repo-name-prefix>/<function-name>)のいずれかです。

関数をデプロイする場合は、次の点に注意してください。<function-name>という名前のリポジトリ(<repo-name-prefix>を指定した場合は<repo-name-prefix>/<function-name>)がまだレジストリに存在しない場合:

  • レジストリの「ルート・コンパートメント内の最初のプッシュ時にリポジトリを作成」プロパティがtrueに設定されている場合、ルート・コンパートメントに新しいプライベート・リポジトリが作成されます
  • レジストリの「ルート・コンパートメント内の最初のプッシュ時にリポジトリを作成」プロパティがfalseに設定されている場合、新しいリポジトリは作成できず、ファンクション・イメージのプッシュの試行が失敗します。

レジストリの「ルート・コンパートメント内の最初のプッシュ時にリポジトリを作成」プロパティがfalseに設定され、適切なリポジトリがまだ存在しない場合は、ファンクションをデプロイする前に次のいずれかを実行します:

  • 関数と同じ名前で新しいリポジトリを作成し、Fn ProjectのCLIコンテキストで<repo-name-prefix>を指定しないでください。たとえば、ファンクションの名前がhello-worldの場合は、hello-worldという名前の新しいリポジトリを作成します。
  • 既存のリポジトリと同じ名前でファンクションを作成し、Fn ProjectのCLIコンテキストで<repo-name-prefix>を指定しないでください。たとえば、既存のリポジトリの名前がhello-galaxyの場合は、新しいファンクションに hello-galaxyという名前を付けます。
  • リポジトリ名の接頭辞を使用してリポジトリへのアクセスを編成および制御する場合は、Fn ProjectのCLIコンテキストで<repo-name-prefix>を指定し、リポジトリ名の接頭辞と関数名の両方を含む名前でリポジトリを作成します。たとえば、hello-worldという名前の関数のイメージをacme-repo/hello-worldという名前のリポジトリに格納するには、Fn ProjectのCLIコンテキストでphx.ocir.io/ansh81vru1zp/acme-repoを指定し、acme-repo/hello-worldという名前のリポジトリも作成します。