サンプルを使用したコード・エディタでのファンクションの作成

コード・エディタを使用して、サンプル関数に基づいてOCI Functionsで新しい関数を作成する方法をご紹介します。

コード・エディタを使用して、サンプル関数に基づいてOCI関数に新しい関数を作成できます。Oracleには、様々な言語で記述された多数の有用なサンプル関数が用意されています。バージョン管理されていないディレクトリにサンプル・ファンクションfunc.yamlおよびソース・コード・ファイルを作成したら、コード・エディタを使用してディレクトリをローカルのGitリポジトリに変換し、それをリモートGitリポジトリにプッシュできます。リモートGitリポジトリ内のファイルを使用すると、コード・エディタを使用してファンクションをOCIファンクションにデプロイし、ファンクションを呼び出すことができます。

コード・エディタを使用してファンクションを作成および更新する場合は、次の点に注意してください。

  • リモートGitリポジトリには、最上位レベルの有効なfunc.yamlファイルが含まれている必要があります。
  • コード・エディタを使用して作成するファンクションの名前は、リモート・コード・リポジトリのfunc.yamlファイルに指定されたファンクション名と一致する必要があります。名前が異なる場合は、ファンクションを起動できません。
  • OCI Functionsにファンクションをデプロイすると、リモートGitリポジトリから最新のコミットをフェッチします。コミットされていない変更およびローカルリポジトリ内のコミットは無視されます。したがって、新規または更新されたファンクションをOCI Functionsにデプロイする前に、常に新規および変更したファイルをローカルGitリポジトリにコミットしてから、変更をリモートGitリポジトリにプッシュする必要があります。

このトピックでは、コード・エディタを使用して次のことを実行する方法について説明します:

  • サンプル・ファンクションから新規ファンクションを作成します
  • ファンクションのfunc.yamlおよびソース・コード・ファイルを含むバージョニングされていないディレクトリをローカルのGitリポジトリに変換し、リモートのGitリポジトリにプッシュできます。
  • OCI Functionsへの関数のデプロイ
  • ファンクションを呼び出す
  • オプションで、ファンクションを更新して再デプロイし、再度起動します。

開始する前に:

  • クラウド・シェルでのファンクションQuickStartのステップを完了している必要があります。
  • このトピックのステップに従うには、空のリモートGitリポジトリ(GitHubなど)にアクセスするか、そのようなリポジトリを作成する必要があります。
  • 便宜上、簡潔にするために、このトピックの例では、oci-list-compartments-pythonサンプル・ファンクションからファンクションを作成すると想定しています。別のサンプル関数から関数を作成した場合、一部の命令は適用されません。

コード・エディタの機能の詳細は、「コード・エディタ」を参照してください。

コード・エディタを使用したサンプルからのファンクションの作成

コード・エディタを使用して、サンプル・ファンクションに基づいてOCIファンクションに新しいファンクションを作成するには:

  1. クラウド・シェルでのファンクションQuickStartのステップを完了して、次のことを行っていることを確認します:
    • グループおよびユーザーによるテナンシの設定、OCI Functionsリソースの作成、VCNおよびサブネットの作成、およびIAMポリシーの作成を行うコンパートメントの作成を行います。
    • Fn ProjectのCLIコンテキストを使用してクラウド・シェルの開発環境を設定し、認証トークンを取得し、Fn ProjectのCLIコンテキストに指定されたDockerレジストリにログインします。
  2. ファンクション開発者としてコンソールにサインインします。
  3. コンソールを使用してOCI Functionsで新規アプリケーションを作成します:

    1. ナビゲーション・メニューを開き、「開発者サービス」を選択します。「関数」で、「アプリケーション」を選択します。
    2. OCI関数で使用するリージョンを選択します。

      Fn ProjectのCLIコンテキストで指定されているDockerレジストリと同じリージョンを使用することをお薦めします(Oracle Cloud Infrastructureに接続するためのFn ProjectのCLIコンテキストの作成を参照)。

    3. Fn ProjectのCLIコンテキストで指定されているコンパートメントを選択します( Oracle Cloud Infrastructureに接続するためのFn ProjectのCLIコンテキストの作成を参照)。

      「アプリケーション」ページには、コンパートメントにすでに定義されているアプリケーションが表示されます。

    4. 「アプリケーションの作成」を選択し、次を指定します:

    5. 「作成」を選択してアプリケーションを作成します。
  4. コード・エディタは、次のいずれかの方法で起動します。

    • 「アプリケーションの詳細」ページの「リソース」で、「ファンクション」を選択します。「ファンクション」ページで、「ファンクションの作成」ボタンを選択し、「コード・エディタで作成」を選択します。このメソッドは、作成したアプリケーションでコード・エディタを開きます。
    • コンソールのツールバーで「コード・エディタ」ボタンを選択します。
  5. サンプル・ファンクションから新規ファンクションを作成します:
    1. コード・エディタの「Oracle Cloud Infrastructure」パネルで、Fn ProjectのCLIコンテキストで指定されたコンパートメントで作成したアプリケーションに移動します。たとえば、samples-appです。
    2. アプリケーション名が強調表示された状態で、マウスの右ボタン・メニューから「ファンクションの作成...」を選択します。
    3. コード・エディタのメニュー・バーのエントリ・フィールドで、「サンプルから作成」作成方法を選択します。
    4. サンプル関数リストから関数を選択し、Enterキーを押します。たとえば、oci-list-compartments-pythonを選択します。
    5. コード・エディタのメニュー・バーのエントリ・フィールドに新しい関数の名前を入力し、[Enter]を押します。入力する名前は、サンプル関数のfunc.yamlファイルの名前と同じである必要があります。ほとんどの場合、これは前のステップのサンプル関数リストの名前です。たとえば、oci-list-compartments-pythonです。

      コード・エディタのメニュー・バーのエントリ・フィールドに新しい関数の名前を入力し、[Enter]を押します。入力する名前は、リストで選択したサンプル関数の名前と同じである必要があります。たとえば、oci-list-compartments-pythonです。

    6. 「OK」を選択して、ファンクションをデプロイする前に変更をコミットしてリモート・ブランチにプッシュする必要があることを通知するダイアログを確認します。

      ファンクションの後に指定されたディレクトリが/home/<username>/oci-ide-plugins/faas-artifacts/<app-ocid>/ディレクトリに作成されます。たとえば、/home/jdoe/oci-ide-plugins/faas-artifacts/ocid1.fnapp.oc1.iad.aaaaaa______76nf/oci-list-compartments-pythonでは、

      oci-list-compartments-pythonサンプル関数で新しい関数をベースにしている場合、ディレクトリには次のものが含まれます。

      • func.yaml
      • func.py
      • README.md
      • requirments.txt
      • /imagesディレクトリ
  6. ファンクションをローカルのGitリポジトリに保存します。
    1. コード・エディタの端末ウィンドウを開くには、コード・エディタのメニュー・バーの「端末」ウィンドウから「新規端末」を選択します。
    2. コード・エディタのターミナル・ウィンドウで、次のように入力して、ディレクトリを、func.yamlファイルおよびファンクション・ソース・ファイルを含む新しく作成されたディレクトリに変更します。
      cd /home/<oci-username>/oci-ide-plugins/faas-artifacts/<application-OCID>/<function-name>

      例:

      cd /home/jdoe/oci-ide-plugins/faas-artifacts/ocid1.fnapp.oc1.iad.aaaaaaaa______76nf/oci-list-compartments-python
    3. 次のように入力して、バージョニングされていないディレクトリ(oci-list-compartments-pythonなど)をローカルのGitリポジトリに変換します。
      git init
    4. 次のように入力して、ディレクトリ内のファイルをステージング領域に追加します。
      git add .
    5. 次のように入力して、ステージング領域の内容をローカルGitリポジトリに格納します。
      git commit
    6. プロンプトが表示されたら、コミット・メッセージを入力します:
      1. キーボードのiキーを押してテキストを挿入します。
      2. コミット・メッセージを入力します。たとえば、次のように入力します:
        Adds sample files.
      3. Escキーを押し、: w qと入力してEnterキーを押します。
  7. 新しいリモートGitリポジトリを作成します。たとえば、GitHubではhttps://github.com/jdoe/list-compartments-sample-repoです。
  8. ファンクションをリモートのGitリポジトリにプッシュします。
    1. コード・エディタのターミナル・ウィンドウで、func.yamlファイルとファンクション・ソース・ファイルを含むディレクトリで、次のように入力して作成したリモートGitリポジトリにローカルGitリポジトリを接続します。
      git remote add origin <remote-repository-url>

      例:

      git remote add origin https://github.com/jdoe/list-compartments-sample-repo.git
    2. 次のように入力して、ローカルGitリポジトリにmainという名前の新しいブランチを作成します。
      git branch -M main
    3. 次のように入力して、リモートGitリポジトリのmainブランチにファイルをプッシュします。
      git push -u origin main
    4. プロンプトが表示されたら、リモートGitリポジトリのGitユーザー名とパスワードを入力します。

      GitHubの場合、パスワードはGitHubの個人アクセス・トークンであることに注意してください。

  9. OCI Functionsへのファンクションのデプロイ:
    1. コード・エディタのターミナル・ウィンドウのfunc.yamlファイルとファンクション・ソース・ファイルを含むディレクトリで、Fn ProjectのCLIコンテキストで指定されたDockerレジストリにログインします。DockerレジストリがOracle Cloud Infrastructure Registryの場合、次のコマンドを使用します:

      docker login -u '<tenancy-namespace>/<user-name>' <region-key>.ocir.io

      例:

      docker login -u 'ansh81vru1zp/jdoe@acme.com' phx.ocir.io
    2. パスワードの入力を求められたら、OCI認証トークンを入力します。
    3. コード・エディタのターミナル・ウィンドウで、次を実行してOCI Functionsにファンクションをデプロイします:
      fn -v deploy --app <application-name>

      例:

      fn -v deploy --app samples-app
  10. 一部のサンプル関数には、特定のIAMポリシーなど、特定の前提条件があります。これらの前提条件は、サンプル・ファンクションのREADME.mdファイルで説明されています。たとえば、oci-list-compartments-pythonサンプル関数に基づく関数の場合、README.mdファイルには、その関数が動的グループのメンバーであるという前提条件のみが示されます。

    oci-list-compartments-pythonサンプル・ファンクションに新しいファンクションをベースにしている場合は、次の手順に従って、動的グループにファンクションを追加します。

    1. ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」を選択します。「アイデンティティ」で、「ドメイン」を選択します。「アイデンティティ・ドメイン」で、「動的グループ」を選択します。
    2. 動的グループを作成するにはの手順に従って、動的グループに名前を付けます(たとえば、sample-func-dyn-grp)。
    3. 動的グループのルールを指定する場合は、次のようなルールを入力して、新しいファンクションを作成したコンパートメント内のすべてのファンクションを動的グループに追加します:

      ALL {resource.type = 'fnfunc', resource.compartment.id = '<compartment-ocid>'}

      ここで、<compartment-ocid>は、アプリケーションを作成したコンパートメントのOCIDです。

      例:

      ALL {resource.type = 'fnfunc', resource.compartment.id = 'ocid1.compartment.oc1..aaaaaaaa23______smwa'}
    4. 「動的グループの作成」を選択します。
  11. デプロイした関数を起動します。
    1. コード・エディタのターミナル・ウィンドウで、func.yamlファイルとファンクション・ソース・ファイルを含むディレクトリで、次を実行してファンクションを起動します。
      fn invoke <application-name> <function-name>

      例:

      fn invoke samples-app oci-list-compartments-python

      ファンクションが見つからないことを示すメッセージが返された場合、コード・エディタで作成したファンクションの名前とfunc.yamlで指定されたファンクションの名前が一致しない可能性があります。前述のステップを繰り返して、リモートGitリポジトリのfunc.yamlファイルで指定された名前と同じ名前の関数をコード・エディタで作成します。

      ファンクションのREADME.mdファイルに指定されている前提条件を満たしている場合、ファンクションはレスポンスを返します。

      たとえば、oci-list-compartments-pythonサンプル・ファンクションに新しいファンクションをベースにして、そのファンクションを(前述のように)動的グループに追加した場合、このファンクションは、次のようにテナンシ内のすべてのコンパートメントのリストを返します。

      {"compartments": [["<compartment-ocid>", "<compartment-name>"], ["<compartment-ocid>", "<compartment-name>"]… }
  12. (オプション)前のステップのoci-list-compartments-pythonサンプル・ファンクションに新しいファンクションをベースにしている場合、このオプションのステップでは、ファンクションの起動時に表示されるメッセージのテキストの一部を変更して、サンプル・ファンクションをカスタマイズする方法について説明します。ローカルのGitリポジトリでメッセージ・テキストを更新し、更新をリモートGitリポジトリにプッシュしてから、ファンクションをデプロイおよび起動します。

    1. コード・エディタの「Oracle Cloud Infrastructure」パネルで、作成したoci-list-compartments-python関数の下にあるfunc.pyファイルを選択し、行を変更します。

      resp = {"compartments": compartments}

      読むには:

      resp = {"compartments in tenancy": compartments}
    2. コード・エディタのナビゲータで、「ソース・コントロール」パネルを選択し、「その他のアクション」ボタンを選択して、「コミット」メニューから「コミット」を選択します。
    3. 変更をステージングするように求められたら、「はい」を選択します。
    4. コミット・メッセージ(Adds-in-tenancyなど)を入力し、[Enter]を押します。
    5. 「その他のアクション」ボタンを選択し、「プル、プッシュ」メニューから「プッシュ」を選択します。
    6. プロンプトが表示されたら、リモートGitリポジトリのGitユーザー名とパスワードを入力します。

      GitHubの場合、パスワードはGitHubの個人アクセス・トークンであることに注意してください。

    7. 「Would you like Code Editor to periodically run 'git fetch'?」というメッセージが表示されたダイアログが表示された場合は、「Ask Me Later」を選択します。
    8. コード・エディタの端末ウィンドウのfunc.yamlファイルとファンクション・ソース・ファイルを含むディレクトリで、次のように入力してファンクションをOCIファンクションにデプロイします。

      fn -v deploy --app <application-name>

      例:

      fn -v deploy --app samples-app
    9. コード・エディタのターミナル・ウィンドウで、次を入力してファンクションを起動します:

      fn invoke <application-name> <function-name>

      例:

      fn invoke samples-app oci-list-compartments-python

      次のメッセージが表示されます:

      {"compartments in tenancy": [["<compartment-ocid>", "<compartment-name>"], ["<compartment-ocid>", "<compartment-name>"]… }

    更新されたメッセージは、ローカルGitリポジトリでファンクション・ソース・コードを正常に変更したことを確認し、更新をリモートGitリポジトリにプッシュしてから、ファンクションをデプロイおよび起動したことを確認します。