Functions: クラウド・シェルの使用の開始

このチュートリアルでは、Oracle Cloud Infrastructureアカウントを使用して、クラウド・シェルを使用したOracle Functions開発を設定します。次に、ファンクション・アプリケーションおよびファンクションを作成します。

主なタスクは:

  • 認証トークンを設定します。
  • 必要な情報を収集します。
  • VCNを設定します。
  • OCIレジストリ(OCIR)にログインします。
  • ファンクションをデプロイするようにクラウド・シェルを構成します。
  • Fnコンテキストを構成します。
  • Oracleファンクション用のアプリケーションを作成します。
  • ファンクションを作成します。
  • ファンクションをデプロイします。
  • ファンクションをテストします。
この図は、Oracleファンクションの実行に使用されるOCIコンポーネントを示しています。

その他の情報については、次のWebサイトを参照してください。

開始する前に

このチュートリアルを正常に実行するには、次が必要です:

要件

1. 必要な情報の収集

チュートリアルを完了するために必要なすべての情報を収集します。

リージョンおよびレジストリ情報の収集

OCIコンソールから必要な情報を準備します。

  1. リージョンおよび可用性ドメインから、リージョン識別子およびリージョン・キーを見つけます。

    例: アッシュバーンの場合はus-ashburn-1およびiad

  2. OCIレジストリ(OCIR)にファンクション・イメージを格納するレジストリ・プロジェクト名を作成します。

    ファンクションを公開すると、OCIRにDockerイメージが作成されます。OCIRプロジェクト名は、検索しやすいように、ファンクション・イメージの先頭に付加されます。たとえば、次が指定された場合:

    • レジストリ・プロジェクト名: my-func-prj
    • ファンクション名: node-func

    関数イメージは、OCIRのmy-func-prj/node-funcの下に格納されます

コンパートメントの作成または選択

コンパートメントを作成するには、コンパートメントの作成を参照してください。コンパートメントを作成したら、コンパートメントOCIDを保存します。

既存のコンパートメントからコンパートメントOCIDを取得するには:

  1. ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「コンパートメント」をクリックします。
  2. コンパートメントを選択します。
  3. OCIDフィールドの「コピー」リンクをクリックします。
認可トークンの作成

OCIレジストリにログインするための認可トークンを作成します。認可トークンを作成するには:

  1. ナビゲーション・メニューで、「プロファイル」メニュー「プロファイル」メニュー・アイコンを選択し、表示されるオプションに応じて、「ユーザー設定」または「自分のプロファイル」を選択します
  2. 「認証トークン」をクリックします。
  3. 「トークンの生成」をクリックします。
  4. 説明を入力します。
  5. 「トークンの生成」をクリックします。
  6. トークンをコピーして保存します。
    ノート

    トークンは、作成後すぐに保存してください。後でアクセスすることはできません。
情報の収集

チュートリアルを完了するために必要なすべての情報を収集します。次の情報をメモ帳にコピーします。

  1. リージョン: <region-identifier>

    例: us-ashburn-1

  2. リージョン・キー: <region-key>

    例: iad

  3. レジストリ・プロジェクト名: <your-project-name>

    例: my-func-prj

  4. コンパートメントID: <compartment-id>

    例: ocid1.compartment.oc1.aaaaaaa...

  5. 認証トークン: <auth-token>

    例: ABC.1aBC...

  6. テナント名: <tenancy-name>

    ユーザー・アバターから。例: mytenancyname

  7. テナントOCID: <tenancy-ocid>

    ユーザー・アバターからテナンシ: <your-tenancy>に移動し、OCIDをコピーします。例: ocid1.tenancy.oc1.aaaaaaa...

  8. ユーザー名: <user-name>

    ユーザー・アバターから。

2. 仮想クラウド・ネットワーク(VCN)の作成

Linuxインスタンスをインターネットに接続するように、VCNを設定します。

VCNの構成

仮想クラウド・ネットワークを構成するには、次のステップを実行します。

  1. 「Oracle Cloud」アイコンをクリックして、メイン・ランディング・ページに移動します。
    • 「リソースの起動」までスクロールします。
    • 「ウィザードを使用してネットワークを設定」を選択します。
  2. 「VCNウィザードの起動」ワークフローで、「インターネット接続性を持つVCNの作成」を選択し、「VCNウィザードの起動」をクリックします。
  3. 構成ダイアログで、VCNのVCN名を入力します。コンパートメントは、作業していた最後のコンパートメントにすでに設定されているか、初めての場合は、デフォルト値の<your-tenancy> (root)に設定されています。
  4. 「VCNとサブネットの構成」セクションで、CIDRブロックのデフォルト値をそのまま使用します:
    • VCN CIDRブロック: 10.0.0.0/16
    • パブリック・サブネットCIDRブロック: 10.0.0.0/24
    • プライベート・サブネットCIDRブロック: 10.0.1.0/24
    ノート

    パブリック・サブネットとプライベート・サブネットのネットワーク・アドレスが異なることに注意してください。
  5. 「DNS解決」では、「このVCNでDNSホスト名を使用」の選択解除します。
  6. 次へ」をクリックします。

    入力したすべての値を確認する「インターネット接続性を持つVCNの作成」構成ダイアログが表示されます(ここでは表示されていません)。

  7. 「作成」をクリックして、VCNを作成します。

    作成中のすべてのVCNコンポーネントを示す「リソースの作成中」ダイアログが表示されます(ここでは表示されていません)。

  8. 「Virtual Cloud Networkの表示」をクリックして、新しいVCNを表示します。

    新しいVCNが表示されます。ここで、アプリケーションのデフォルト・ポートであるポート80でHTTP接続を許可するセキュリティ・ルールを追加する必要があります。

  9. 新しいVCNが表示され、「パブリック」サブネット・リンクをクリックします。

    パブリック・サブネット情報は、ページの下部にあるセキュリティ・リストとともに表示されます。VCNのデフォルト・セキュリティ・リストへのリンクが表示されます。

  10. 「デフォルト・セキュリティ・リスト」リンクをクリックします。

    VCNのデフォルトのイングレス・ルールが表示されます。

  11. 「イングレス・ルールの追加」をクリックします。

    「Add Ingress Rules」ダイアログが表示されます。

  12. イングレス・ルールに次の情報を入力します。すべてのデータを入力したら、「イングレス・ルールの追加」をクリックします。

    イングレス・ルールを次のように入力します:

    • ステートレス:選択
    • ソース・タイプ: CIDR
    • ソースCIDR: 0.0.0.0/0
    • IPプロトコル: TCP
    • ソース・ポート範囲: (空白のまま)
    • 宛先ポート範囲: 80
    • 説明:アプリケーションのVCN

    イングレス・ルールの追加をクリックすると、パブリック・サブネットへのHTTP接続が許可されます。

ノート

別のポートを開くには、最後のステップの80をポート番号に置き換えます。
アプリケーションをインターネットから使用できるようにするVCNが正常に作成されました。

3. OCIレジストリへのログイン

次に、DockerをOCIレジストリ(OCIR)にログインします。

DockerのOCIRへのログイン
  1. 以前に収集した情報を取得します。
  2. ターミナル・ウィンドウを開きます。
  3. OCIRにログインします:
    docker login <region-key>.ocir.io

    ログイン名とパスワードの入力を求められます。

    • ユーザー名: <tenancy-name>/<user-name>
    • パスワード: <auth-token>

インスタンスがOCIRにログインしました。

4. Functionsの構成

Oracle Functionsを使用するには、Fnアプリケーション・コンテキストを構成する必要があります。コンテキストには、Oracle Functionsサービスへの接続に必要な値が格納されます。Fnクライアント・コマンドは、必要な構成データを追加するために使用されます。

クラウド・シェルのFnコンテキストの構成

以前に収集した情報が必要です。Fnクライアント・コマンドを使用してFnを構成します。

  1. クラウド・シェル・インスタンスを開きます。
  2. Fnコンテキストのリストを取得します。

    fn list context

    defaultおよび<your-region-identifier>のコンテキストが表示されます。

  3. <your-region-identifier>という名前のコンテキストを選択します。

    例: fn use context us-phoenix-1

  4. Fnコンテキストをリストして、<your-region-identifier>が選択されていることを確認します。(横に星が表示されます。)
  5. Oracle Functionsのコンパートメントを設定します。

    例: fn update context oracle.compartment-id ocid1.compartment.oc1..aaaaaaaarvdfa72n...

  6. レジストリ・リポジトリのURLを設定します。

    サンプル・コマンド: fn update context registry <region-key>.ocir.io/<tenancy-namespace>/<registry-project-name>

    例: fn update context registry phx.ocir.io/my-tenancy/my-func-prj

ノート

コンテキストの表示/編集

Fnコンテキスト・ファイルは、~/.fn/contextsディレクトリにあります。各コンテキストは、.yamlファイルに格納されます。たとえば、us-phoenix-1.yamlファイルは次のようになります:

api-url: https://functions.us-phoenix-1.oci.oraclecloud.com
oracle.compartment-id: ocid1.compartment.oc1..aaaaaaaarvdfa72n...
provider: oraclecs
registry: phx.ocir.io/my-tenancy/my-func-prj
                

必要に応じて、ファイルをエディタで直接編集できます。

各ステップの詳細な説明は、クラウド・シェルでのOracle Functionsのクイックスタートを参照してください

これで、インスタンスのFnコンテキストが設定されました。

5. ファンクションの作成およびデプロイ

構成が完了したら、ファンクションを作成してデプロイします。

アプリケーションの作成

アプリケーションは、ファンクションの主要なストレージ・コンテナです。各ファンクションには、デプロイメント用のアプリケーションが必要です。アプリケーションを作成するには、次のステップに従います。

  1. ナビゲーション・メニューを開き、「開発者サービス」をクリックします。「ファンクション」で、「アプリケーション」をクリックします。
  2. 「アプリケーションの作成」をクリックします。

    フォーム・データを入力します。

    • 名前: <your-app-name>
    • VCN: <your-VCN>
    • サブネット: <your-public-subnet>または<your-private-subnet>
    ノート

    パブリック・サブネットまたはプライベート・サブネットを使用できます。いずれかを選択してください。
  3. 作成」をクリックします。

アプリケーションが作成されます。

言語の選択

次のいずれかの言語を選択して、ファンクションを作成してデプロイします。必要に応じて、3つすべてを実行できます。

Javaファンクションの作成およびデプロイ

アプリケーションを作成したら、Javaファンクションをデプロイします。次のステップに従って、Javaの「Hello World」ファンクションを作成します。

ノート

これらのステップを実行するには、Java 8以上がインストールされていることを確認してください。
  1. クラウド・シェルを開きます。
  2. ファンクションを格納するディレクトリを作成し、そのディレクトリに移動します。
    mkdir my-dir-name
    cd my-dir-name                        
                        
  3. Fnを使用してJavaの「Hello World」ファンクションを作成します。
    fn init --runtime java my-func-name

    このコマンドは、複数のファイルを含むmy-func-nameという名前のディレクトリを作成します。

    • func.yaml - ファンクション構成ファイル。
    • pom.xml - Mavenビルド・ファイル。
    • src/main/java/com/example/fn/HelloFunction.java - 実際のファンクション・ファイル。
  4. そのディレクトリに移動します。
  5. ファンクションをデプロイします。
    fn -v deploy --app your-app-name

    Dockerイメージが作成され、OCIRにプッシュされ、最終的にOracle Functionsにデプロイされると、様々なメッセージが表示されます。

  6. ファンクションを呼び出します。
    fn invoke your-app-name my-func-name

    戻り値: Hello, world!

  7. パラメータを指定してファンクションを呼び出します。
    echo -n "Bob" | fn invoke your-app-name my-func-name

    戻り値: Hello, Bob!

  8. ネットからファンクションに接続する場合は、ファンクションの呼出しエンドポイントを取得する必要があります。呼出しエンドポイントを検索するには、inspectコマンドを使用します。
    fn inspect function your-app-name my-func-name
  9. inspectコマンドの結果を確認します。呼出しエンドポイントURLが、返されるJSONデータのannotatinsセクションに含まれていることに注意してください。
    {
        "annotations": {
            "fnproject.io/fn/invokeEndpoint": "https://aaaaaaaaa.us-ashburn-1.functions.oci.oraclecloud.com/1111111/functions/ocid1.fnfunc.oc1.iad.aaaaaaaaa.../actions/invoke",
            "oracle.com/oci/compartmentId": "ocid1.compartment.oc1..aaaaaaaa...",
            "__comment":"Remaining output left out for brevity",
    
  10. inspectから返されたURLを使用してファンクションを呼び出します。ファンクションではリクエストにデジタル署名する必要があるため、この例ではoci raw-requestコマンドを使用します。
    oci raw-request --http-method POST --request-body "" --target-uri https://https://aaaaaaaaa.us-ashburn-1.functions.oci.oraclecloud.com/1111111/functions/ocid1.fnfunc.oc1.iad.aaaaaaaaa.../actions/invoke

    コマンドで次が返されます:

    {
        "data": "Hello, world!",
        "headers": {
            "Content-Length": "13",
            "Content-Type": "text/plain",
            "Date": "Tue, 20 Oct 2020 00:53:08 GMT",
            "Fn-Call-Id": "11111111111",
            "Fn-Fdk-Version": "fdk-java/1.0.111 (jvm=OpenJDK 64-Bit Server VM, jvmv=11.0.8)",
            "Opc-Request-Id": "1111111/11111"
        },
        "status": "200 OK"
    }
    ノート

    curlなどのツールを使用して、Functionsエンドポイントに接続できます。ただし、セキュリティ上の考慮事項があるため、スクリプトは複雑です。かわりに、OCI CLIのraw-requestコマンドを使用します。ファンクションの呼出し: raw-requestを使用したファンクションへの署名付きリクエストの送信を参照してください。

Javaファンクションが正常にデプロイおよびテストされました。

Pythonファンクションの作成およびデプロイ

アプリケーションを作成したら、Pythonファンクションをデプロイします。次のステップに従って、Pythonの「Hello World」ファンクションを作成します。

  1. クラウド・シェルを開きます。
  2. ファンクションを格納するディレクトリを作成し、そのディレクトリに移動します。
    mkdir my-dir-name
    cd my-dir-name                        
                        
  3. Fnを使用してPythonの「Hello World」ファンクションを作成します。
    fn init --runtime python my-func-name

    このコマンドは、複数のファイルを含むmy-func-nameという名前のディレクトリを作成します。

    • func.yaml - ファンクション構成ファイル。
    • requirements.txt - 必要なPythonライブラリのリスト。
    • func.py - 実際のファンクション・ファイル。
  4. そのディレクトリに移動します。
  5. ファンクションをデプロイします。
    fn -v deploy --app your-app-name

    Dockerイメージが作成され、OCIRにプッシュされ、最終的にOracle Functionsにデプロイされると、様々なメッセージが表示されます。

  6. ファンクションを呼び出します。
    fn invoke your-app-name my-func-name

    戻り値: {"message": "Hello World"}

  7. パラメータを指定してファンクションを呼び出します。
    echo -n '{"name":"Bob"}' | fn invoke your-app-name my-func-name

    戻り値: {"message": "Hello Bob"}

  8. ネットからファンクションに接続する場合は、ファンクションの呼出しエンドポイントを取得する必要があります。呼出しエンドポイントを検索するには、inspectコマンドを使用します。
    fn inspect function your-app-name my-func-name
  9. inspectコマンドの結果を確認します。呼出しエンドポイントURLが、返されるJSONデータのannotatinsセクションに含まれていることに注意してください。
    {
        "annotations": {
            "fnproject.io/fn/invokeEndpoint": "https://aaaaaaaaa.us-ashburn-1.functions.oci.oraclecloud.com/1111111/functions/ocid1.fnfunc.oc1.iad.aaaaaaaaa.../actions/invoke",
            "oracle.com/oci/compartmentId": "ocid1.compartment.oc1..aaaaaaaa...",
            "__comment":"Remaining output left out for brevity",
    
  10. inspectから返されたURLを使用してファンクションを呼び出します。ファンクションではリクエストにデジタル署名する必要があるため、この例ではoci raw-requestコマンドを使用します。
    oci raw-request --http-method POST --request-body "" --target-uri https://https://aaaaaaaaa.us-ashburn-1.functions.oci.oraclecloud.com/1111111/functions/ocid1.fnfunc.oc1.iad.aaaaaaaaa.../actions/invoke

    コマンドで次が返されます:

    {
        "data": "Hello World",
        "headers": {
            "Content-Length": "24",
            "Content-Type": "application/json",
            "Date": "Tue, 20 Oct 2020 00:53:08 GMT",
            "Fn-Call-Id": "11111111111",
            "Fn-Fdk-Version": "fdk-python/0.1.18",
            "Opc-Request-Id": "1111111/11111"
        },
        "status": "200 OK"
    }
    ノート

    curlなどのツールを使用して、Functionsエンドポイントに接続できます。ただし、セキュリティ上の考慮事項があるため、スクリプトは複雑です。かわりに、OCI CLIのraw-requestコマンドを使用します。ファンクションの呼出し: raw-requestを使用したファンクションへの署名付きリクエストの送信を参照してください。

Pythonファンクションが正常にデプロイおよびテストされました。

ノード・ファンクションの作成およびデプロイ

アプリケーションを作成したら、ノード・ファンクションをデプロイします。次のステップに従って、ノードの「Hello World」ファンクションを作成します。

ノート

これらのステップを実行するには、Node.js 10以上がインストールされていることを確認してください。
  1. クラウド・シェルを開きます。
  2. ファンクションを格納するディレクトリを作成し、そのディレクトリに移動します。
    mkdir my-dir-name
    cd my-dir-name                        
                        
  3. Fnを使用してノードの「Hello World」ファンクションを作成します。
    fn init --runtime node my-func-name

    このコマンドは、複数のファイルを含むmy-func-nameという名前のディレクトリを作成します。

    • func.yaml - ファンクション構成ファイル。
    • package.json - NPMビルド・ファイル。
    • func.js - 実際のファンクション・ファイル。
  4. そのディレクトリに移動します。
  5. ファンクションをデプロイします。
    fn -v deploy --app your-app-name

    Dockerイメージが作成され、OCIRにプッシュされ、最終的にOracle Functionsにデプロイされると、様々なメッセージが表示されます。

  6. ファンクションを呼び出します。
    fn invoke your-app-name my-func-name

    戻り値: {"message":"Hello World"}

  7. パラメータを指定してファンクションを呼び出します。
    echo -n '{"name":"Bob"}' | fn invoke your-app-name my-func-name

    戻り値: {"message":"Hello Bob"}

  8. ネットからファンクションに接続する場合は、ファンクションの呼出しエンドポイントを取得する必要があります。呼出しエンドポイントを検索するには、inspectコマンドを使用します。
    fn inspect function your-app-name my-func-name
  9. inspectコマンドの結果を確認します。呼出しエンドポイントURLが、返されるJSONデータのannotatinsセクションに含まれていることに注意してください。
    {
        "annotations": {
            "fnproject.io/fn/invokeEndpoint": "https://aaaaaaaaa.us-ashburn-1.functions.oci.oraclecloud.com/1111111/functions/ocid1.fnfunc.oc1.iad.aaaaaaaaa.../actions/invoke",
            "oracle.com/oci/compartmentId": "ocid1.compartment.oc1..aaaaaaaa...",
            "__comment":"Remaining output left out for brevity",
    
  10. inspectから返されたURLを使用してファンクションを呼び出します。ファンクションではリクエストにデジタル署名する必要があるため、この例ではoci raw-requestコマンドを使用します。
    oci raw-request --http-method POST --request-body "" --target-uri https://https://aaaaaaaaa.us-ashburn-1.functions.oci.oraclecloud.com/1111111/functions/ocid1.fnfunc.oc1.iad.aaaaaaaaa.../actions/invoke

    コマンドで次が返されます:

    {
        "data": "Hello World",
        "headers": {
            "Content-Length": "23",
            "Content-Type": "application/json",
            "Date": "Tue, 22 Oct 2020 00:53:08 GMT",
            "Fn-Call-Id": "11111111111",
            "Fn-Fdk-Version": "fdk-node/0.1.18 (njsv=v11.15.0)",
            "Opc-Request-Id": "1111111/11111"
        },
        "status": "200 OK"
    }
    ノート

    curlなどのツールを使用して、Functionsエンドポイントに接続できます。ただし、セキュリティ上の考慮事項があるため、スクリプトは複雑です。かわりに、OCI CLIのraw-requestコマンドを使用します。ファンクションの呼出し: raw-requestを使用したファンクションへの署名付きリクエストの送信を参照してください。

ノード・ファンクションが正常にデプロイおよびテストされました。

6. ファンクション情報の確認

ファンクションを実行すると、ファンクションに関する情報がOCIコンソールに表示されます。

OCIRでのファンクション・イメージの表示

デプロイすると、ファンクションがアップロードされてOCIRに格納されます。OCIRに移動して、ファンクション・イメージを確認できます。

  1. ナビゲーション・メニューを開き、「開発者サービス」をクリックします。「Containers & Artifacts」で、「Container Registry」をクリックします。
  2. <your-repository-project-name>を検索します。
  3. プロジェクト名の下に、デプロイした各ファンクションのエントリが表示されます。
  4. 情報を表示する各イメージのリンクをクリックします。
ファンクション実行情報の表示

ファンクションを実行した後、そのファンクションのメトリックを表示できます。

  1. ナビゲーション・メニューを開き、「開発者サービス」をクリックします。「ファンクション」で、「アプリケーション」をクリックします。アプリケーションがページにリストされます。
  2. 作成したアプリケーションへのリンクをクリックします。
  3. 確認するファンクションへのリンクをクリックします。

    ファンクションに関するメトリック情報が表示されます。

ロギング情報の有効化および表示

アプリケーションのロギングを有効にするには、次のステップに従います。

  1. ナビゲーション・メニューを開き、「開発者サービス」をクリックします。「ファンクション」で、「アプリケーション」をクリックします。アプリケーションがページにリストされます。
  2. 作成したアプリケーションへのリンクをクリックします。
  3. アプリケーション・ページの左側で、「ログ」リンクをクリックします。
  4. 「無効」をクリックして、アプリケーションのロギングを有効にします。
  5. 「ログの有効化」ダイアログが表示されます。次の情報を入力します:
    • コンパートメント: <your-compartment-name>
    • ログ・グループ:デフォルト値Auto-Create a Default Log Groupを使用します
    • ログ名: <take-default>
    • ログ保持: <take-default>
    • 「ログの有効化」をクリックします

      ログが作成されるまでしばらく待ちます。

ログを表示するには、前述のステップで作成したログ名のリンクをクリックします。