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

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

コード・エディタを使用して、テンプレート関数に基づいてOCI関数に新しい関数を作成できます。Oracleには、様々な言語で記述された多数のhelloworldテンプレート関数が用意されています。バージョン管理されていないディレクトリにテンプレート・ファンクション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など)にアクセスするか、そのようなリポジトリを作成する必要があります。
  • 便利でわかりやすいように、このトピックの例では、Javaテンプレートからファンクションを作成すると想定しています。別のテンプレートから関数を作成する場合、一部の命令は適用されません。

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

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

コード・エディタを使用して、テンプレート関数に基づいて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コンテキストで指定されたコンパートメントで作成したアプリケーションに移動します。たとえば、helloworld-java-appです。
    2. アプリケーション名が強調表示された状態で、マウスの右ボタン・メニューから「ファンクションの作成...」を選択します。
    3. コード・エディタのメニュー・バーのエントリ・フィールドで、「テンプレートから作成」作成方法を選択します。
    4. 言語リストから言語を選択し、[Enter]を押します。たとえば、「Java」を選択します。
    5. コード・エディタのメニュー・バーのエントリ・フィールドに新しいhelloworld関数の名前を入力し、[Enter]を押します。たとえば、helloworld-func-javaです。
    6. 「OK」を選択して、ファンクションをデプロイする前に変更をコミットしてリモート・ブランチにプッシュする必要があることを通知するダイアログを確認します。

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

      Javaテンプレート関数で新しい関数をベースにしている場合、ディレクトリには次のものが含まれます。

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

      例:

      git remote add origin https://github.com/jdoe/template-java-helloworld-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 helloworld-java-app
  10. デプロイした関数を起動します。
    1. コード・エディタのターミナル・ウィンドウで、func.yamlファイルとファンクション・ソース・ファイルを含むディレクトリで、次を実行してファンクションを起動します。
      fn invoke <application-name> <function-name>

      例:

      fn invoke helloworld-java-app helloworld-func-java

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

      Javaテンプレート関数で新しい関数をベースにしている場合は、次のメッセージが表示されます。

      Hello World !
  11. (オプション)前のステップのhelloworld-func-javaという名前のテンプレートJava関数で新しい関数をベースにした場合、このオプションのステップでは、関数の起動時に表示されるメッセージのテキストを変更する方法について説明します。ローカルのGitリポジトリでメッセージ・テキストを更新し、更新をリモートGitリポジトリにプッシュしてから、ファンクションをデプロイおよび起動します。

    1. コード・エディタの「Oracle Cloud Infrastructure」パネルの、作成したhelloworld-func-java関数の下:
      • /src/main/java/com/example/fn/HelloFunction.javaファイルを選択し、次の行を変更します。
        return "Hello, " + name + "!";
        読むには:
        return "Hi, " + name + "!";
      • /test/java/com/example/fn/HelloFunctionTest.javaファイルを選択し、次の行を変更します。
        assertEquals("Hello, world!", result.getBodyAsString());
        読むには:
        assertEquals("Hi, world!", result.getBodyAsString());
    2. コード・エディタのナビゲータで、「ソース・コントロール」パネルを選択し、「その他のアクション」ボタンを選択して、「コミット」メニューから「コミット」を選択します。
    3. 変更をステージングするように求められたら、「はい」を選択します。
    4. コミット・メッセージ(Changes-Hello-to-Hiなど)を入力し、[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 helloworld-java-app
    9. コード・エディタのターミナル・ウィンドウで、次を入力してファンクションを起動します:

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

      例:

      fn invoke helloworld-java-app helloworld-func-java

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

      Hi World !

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