Oracle Cloud Infrastructureに接続するためのFn ProjectのCLIコンテキストの作成
OCI Functionsで使用するためにOracle Cloud Infrastructureに接続するためのFn ProjectのCLIコンテキストの作成方法をご紹介します。
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 Functions on Cloud Shell QuickStartガイドを参照してください。コマンドをコピーして、「スタート・ガイド」ページからクラウド・シェル・ウィンドウに貼り付ける必要があります:
- 現在のリージョンのコンテキストを使用するようにFn ProjectのCLIに指示する手順
- デプロイされたファンクションを所有するコンパートメントのOCIDを指定します
- イメージベース・ファンクションの場合、OCIファンクションで使用するOracle Cloud Infrastructure Registryアドレスを指定します
このトピックの手順では、次のことを前提としています:
- 開発環境としてCloud Shellを使用していません
- Linuxを使用している
- 「Fn Project CLIのインストール」のステップをすでに完了しています
Fn ProjectのCLIを使用して新しいコンテキストファイルを作成するには:
-
ファンクション開発者として開発環境にログインします。
-
ターミナル・ウィンドウで、次のように入力して、Oracle Cloud Infrastructure用の新しいFn ProjectのCLIコンテキストを作成します:
fn create context <my-context> --provider oracleここで、< my-context >は選択した名前です。例:
fn create context johns-oci-context --provider oracle--provider oracleを指定すると、Oracle Cloud Infrastructureリクエスト署名、秘密キー、ユーザー・グループ、およびこれらのユーザー・グループに権限を付与するポリシーを使用して、認証および認可が有効になります。 -
次を入力して、Fn ProjectのCLIが新しいコンテキストを使用するように指定します:
fn use context <my-context>ここで、< my-context >は前のステップで指定した名前です。例:
fn use context johns-oci-context -
次を入力して、デプロイされたファンクションを所有するコンパートメントのOCIDを持つ新規コンテキストを構成します(この目的のために新規コンパートメントを作成した可能性があります。テナンシのネットワーク・リソースおよびOCI Functionsリソースを所有するコンパートメントの作成(まだ存在しない場合)を参照してください):
fn update context oracle.compartment-id <compartment-ocid>例:
fn update context oracle.compartment-id ocid1.compartment.oc1..aaaaaaaarvdfa72n... -
次のように入力して、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 - (オプション)コード専用関数の場合、暗黙的な開発者フローでアーカイブをオブジェクト・ストレージにアップロードするには、次のように入力して、オブジェクト・ストレージのバケット名およびネームスペースを使用してコンテキストを構成します:
fn update context object_storage_bucket_name <source-bucket-name>fn update context object_storage_namespace <object-storage-namespace>詳細は、「fn init、fn buildおよびfn deployコマンドを使用してコード専用関数を暗黙的に作成する方法」を参照してください。
-
イメージベース・ファンクションの場合は、次のように入力して、OCI Functionsで使用する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>は、ファンクション・イメージをプッシュするリポジトリの名前を指定するために、デプロイするファンクションの名前に事前に付加するリポジトリ名の接頭辞(オプション)です。リポジトリ名の接頭辞を使用すると、レジストリ内のリポジトリへのアクセスを簡単に整理および制御できます。Notes about repository names and repository name prefixes for image-based functionsを参照してください。
例:
fn update context registry phx.ocir.io/ansh81vru1zp/acme-repo -
-
(オプション)イメージベース・ファンクションの場合は、次のように入力して、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 Functionsは、ファンクション名の接頭辞をファンクション名に先頭に付けて、ファンクション・イメージのリポジトリ名を構成します。リポジトリ名は、テナンシ全体のすべてのコンパートメント間で一意です。OCI Functionsは、指定したリポジトリにイメージをプッシュする際のコンパートメントおよび
oracle.image-compartment-idに関して、次のように動作します。- その名前のリポジトリが
oracle.image-compartment-idで指定されたコンパートメントにすでに存在する場合、OCI Functionsはそのリポジトリにイメージを正常にプッシュします。 - その名前のリポジトリがテナンシのコンパートメント(ルート・コンパートメントを含む)に存在しない場合、OCIファンクションは、
oracle.image-compartment-idで指定されたコンパートメントにその名前の新しいリポジトリを作成し、イメージをそれに正常にプッシュします。 - その名前のリポジトリがテナンシにすでに存在し、
oracle.image-compartment-idで指定されたリポジトリとは異なるコンパートメントに存在する場合、OCIファンクションはエラーを発行します。OCIファンクションがイメージを正常にプッシュするには、oracle.image-compartment-idを既存のリポジトリのコンパートメントのOCIDに設定するか、(ファンクションの名前を変更するか、または代替リポジトリ名の接頭辞を指定して)別のリポジトリ名を指定する必要があります。
- その名前のリポジトリが
-
(オプション)コンテキスト・ファイルを表示して、作成した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という名前のリポジトリも作成します。