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

コード・エディタを使用して、リモートGitリポジトリ内の既存のファンクション・コードに基づいてOCI Functionsで新しいファンクションを作成する方法をご紹介します。

コード・エディタを使用して、リモートGitリポジトリの既存のファンクション・コードに基づいてOCI関数にファンクションを作成できます。リモートのGitリポジトリをローカルのGitリポジトリにクローニングしたら、コード・エディタを使用してローカルのGitリポジトリのコードを編集できます。変更が終了したら、コード・エディタを使用してコードをコミットし、リモートGitリポジトリにプッシュして戻すことができます。リモートGitリポジトリの更新により、コード・エディタを使用してファンクションをOCIファンクションにデプロイし、ファンクションを呼び出すことができます。

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

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

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

  • 既存のリモートGitリポジトリのコードから新しい関数を作成
  • OCI Functionsへの関数のデプロイ
  • ファンクションを呼び出す
  • オプションで、ファンクションを更新して再デプロイし、再度起動します。

開始する前に:

  • クラウド・シェルでのファンクションQuickStartのステップを完了している必要があります。
  • このトピックのステップに従うには、ファンクション・コードとリポジトリの最上位レベルのfunc.yamlファイルの両方を含むリモートGitリポジトリ(GitHubなど)へのアクセス権が必要です。
  • 利便性とシンプルさのために、このトピックの例では、fn init --runtime python helloworld-func-pythonコマンドを使用して、リモートGitリポジトリにプッシュした単純なpython helloworldファンクションを作成したと想定しています。このようなpython helloworld関数を作成してリモートGitリポジトリにプッシュした場合は、指示に従って、そのリモートGitリポジトリをコード・リポジトリとして指定できます。python helloworldファンクションを作成してリモートGitリポジトリにプッシュする方法がわからない場合は、リモート・コード・リポジトリに単純なPython helloworldファンクション・コードをアップロードするオプションの事前ステップを参照してください。

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

シンプルなPython helloworldファンクション・コードをリモート・コード・リポジトリにアップロードするためのオプションの事前ステップ

単純なpython helloworldファンクションの有効なfunc.yamlおよびソース・コード・ファイルをリモートGitリポジトリに移入するには、このトピックの後半のコード・エディタを使用したコード・リポジトリからのファンクションの作成の項で使用します。

  1. 新しいリモートGitリポジトリを作成します。たとえば、GitHubではhttps://github.com/jdoe/simple-python-helloworld-repoです。
  2. クラウド・シェルで、python helloworld関数を含む一時ディレクトリを作成します。たとえば、 /home/jdoe/temp/python/simple-helloworld
  3. 作成したディレクトリに切り替えます。
  4. fn init --runtime python helloworld-func-pythonを実行して、helloworld-func-pythonという名前のpython helloworld関数を作成します。
  5. 新しく作成したhelloworld-func-pythonディレクトリに切り替えます。
  6. 次のように入力して、バージョニングされていないhelloworld-func-pythonディレクトリをローカルのGitリポジトリに変換します。
    git init
  7. 次のように入力して、helloworld-func-pythonディレクトリのファイルをステージング領域に追加します。
    git add .
  8. 次のように入力して、ステージング領域の内容をローカルGitリポジトリに格納します。
    git commit
  9. プロンプトが表示されたら、コミット・メッセージを入力します:
    1. キーボードのiキーを押してテキストを挿入します。
    2. コミット・メッセージを入力します。例:
      Adds simple python hello-world files.
    3. Escキーを押し、: w qと入力してEnterキーを押します。
  10. Cloud Shellで、次のように入力して、前に作成したリモートGitリポジトリにローカルGitリポジトリを接続します。
    git remote add origin <remote-repository-url>

    例:

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

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

これで、「コード・エディタを使用したコード・リポジトリからのファンクションの作成」セクションで使用するために、単純なpython helloworldファンクションの有効なfunc.yamlおよびソース・コード・ファイルをリモートGitリポジトリにアップロードしました。

コード・エディタを使用したコード・リポジトリからのファンクションの作成

コード・エディタを使用して、リモートGitリポジトリ内の既存のファンクション・コードに基づいてOCI Functionsに新しいファンクションを作成するには:

  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-python-appです。
    2. アプリケーション名が強調表示された状態で、マウスの右ボタン・メニューから「ファンクションの作成...」を選択します。
    3. コード・エディタのメニュー・バーのエントリ・フィールドで、コード・リポジトリから作成方法を選択します。
    4. リモート・リポジトリのファンクションのfunc.yamlファイルで指定されているファンクション名(helloworld-func-pythonなど)を入力し、[Enter]を押します。

      コード・エディタを使用して作成するファンクションの名前は、リモート・コード・リポジトリのfunc.yamlファイルで指定したファンクション名と一致する必要があります。名前が異なる場合は、後でファンクションを起動できません。

    5. 関数コードを含むリモートリポジトリのURLを入力します。たとえば、https://github.com/jdoe/simple-python-helloworld-repoです。
    6. プロンプトが表示されたら、リモートGitリポジトリのGitユーザー名とパスワードを入力します。

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

      リモートGitリポジトリが正常にクローニングされると、「Would you like to open the cloned repository or add it to the current workspace」というメッセージが表示されたダイアログが表示されます。

    7. ダイアログの右上隅にある「X」ボタンを選択して、オプションを選択せずにダイアログを閉じます。

      重要:ダイアログの「開く」ボタンまたは「ワークスペースに追加」ボタンを選択しないでください。

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

      リモートGitリポジトリは、/home/<username>/oci-ide-plugins/faas-artifacts/<app-ocid>/<function-name>/<repository-name>のローカルGitリポジトリにクローニングされます。たとえば、/home/jdoe/oci-ide-plugins/faas-artifacts/ocid1.fnapp.oc1.iad.aaaaaa______76nf/helloworld-func-python/simple-python-helloworld-repoです。

      リモートGitリポジトリのpython helloworldファンクションに新しいファンクションをベースにしている場合、ローカルのGitリポジトリ・ディレクトリには次のものが含まれます。

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

      例:

      cd /home/jdoe/oci-ide-plugins/faas-artifacts/ocid1.fnapp.oc1.iad.aaaaaa______76nf/helloworld-func-python/simple-python-helloworld-repo
    3. コード・エディタのターミナル・ウィンドウの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
    4. パスワードの入力を求められたら、OCI認証トークンを入力します。
    5. コード・エディタのターミナル・ウィンドウで、次を実行してOCI Functionsにファンクションをデプロイします:
      fn -v deploy --app <application-name>

      例:

      fn -v deploy --app helloworld-python-app
  7. デプロイした関数を起動します。
    1. コード・エディタのターミナル・ウィンドウで、func.yamlファイルとファンクション・ソース・ファイルを含むディレクトリで、次を実行してファンクションを起動します。
      fn invoke <application-name> <function-name>

      例:

      fn invoke helloworld-python-app helloworld-func-python

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

      python helloworld関数で新しい関数をベースにしている場合は、次のメッセージが表示されます。

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

    1. コード・エディタの「Oracle Cloud Infrastructure」パネルの先ほど作成したhelloworld-func-pythonファンクションで、ファイルfunc.pyを選択して行を変更します。
      {"message": "Hello {0}".format(name)}),
      読むには:
      {"message": "Greetings {0}".format(name)}),
    2. コード・エディタのナビゲータで、「ソース・コントロール」パネルを選択し、「その他のアクション」ボタンを選択して、「コミット」メニューから「コミット」を選択します。
    3. 変更をステージングするように求められたら、「はい」を選択します。
    4. コミット・メッセージ(Changes-Hello-to-Greetingsなど)を入力し、[Enter]を押します。
    5. 「その他のアクション」ボタンを選択し、「プル、プッシュ」メニューから「プッシュ」を選択します。
    6. プロンプトが表示されたら、リモートGitリポジトリのGitユーザー名とパスワードを入力します。

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

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

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

      例:

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

      例:

      fn invoke helloworld-python-app helloworld-func-python

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

      {"message": "Greetings World"}

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