OCIコンピュート・インスタンスでのファンクションQuickStart
このOCI Functions QuickStartを使用して、OCIコンピュート・インスタンスで迅速にセットアップおよび実行する方法をご覧ください。
A.テナンシの設定
適切なユーザーおよびグループが存在しない場合:
- テナンシ管理者としてコンソールにサインインします。
- ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「ドメイン」をクリックします。
- 「グループ」、「グループの作成」の順にクリックして、新しいグループを作成します。
- 「ユーザー」、「ユーザーの作成」の順にクリックして、新しいユーザーを作成します。
- 「グループ」、グループの名前、「ユーザーをグループに追加」の順にクリックして、ユーザーをグループに追加します。
詳細は、構成ノートを参照してください。
ネットワーク・リソースを作成する適切なコンパートメントおよびOCIファンクション・リソースがすでに存在しない場合:
- テナンシ管理者としてコンソールにサインインします。
- ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「コンパートメント」をクリックします。
- 「コンパートメントの作成」をクリックします。
詳細は、構成ノートを参照してください。
ネットワーク・リソースを作成する適切なVCNが存在しない場合:
- テナンシ管理者としてコンソールにサインインします。
- ナビゲーション・メニューを開き、「ネットワーキング」、「仮想クラウド・ネットワーク」の順にクリックします。
- VCNウィザードの起動をクリックして、新しいVCNを作成します。
- 「VCNウィザードの起動」ダイアログ・ボックスで、「インターネット接続性を持つVCN」を選択し、「VCNウィザードの起動」をクリックします。
- 新しいVCNの名前を入力し、「次」、「作成」の順にクリックして、関連するネットワーク・リソースとともにVCNを作成します。
詳細は、構成ノートを参照してください。
1つ以上のOCI Functionsユーザーがテナンシ管理者ではない場合:
- テナンシ管理者としてコンソールにサインインします。
- ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「ポリシー」をクリックします。
-
「ポリシーの作成」をクリックし、新しいポリシーの名前と説明を指定して、テナンシのルート・コンパートメントを選択します。
-
ポリシー・ビルダーを使用してポリシーを作成します。ポリシー・ユースケースのリストから「ファンクション」を選択し、ポリシー・テンプレートユーザーによるファンクションとアプリケーションの作成、デプロイおよび管理に基づいてポリシーを作成します。
ポリシー・テンプレートには、次のポリシー・文が含まれます:
Allow group <group-name> to use cloud-shell in tenancy
Allow group <group-name> to manage repos in tenancy
Allow group <group-name> to read objectstorage-namespaces in tenancy
Allow group <group-name> to manage logging-family in tenancy
Allow group <group-name> to read metrics in tenancy
Allow group <group-name> to manage functions-family in tenancy
Allow group <group-name> to use virtual-network-family in tenancy
Allow group <group-name> to use apm-domains in tenancy
Allow group <group-name> to read vaults in tenancy
Allow group <group-name> to use keys in tenancy
Allow service faas to use apm-domains in tenancy
Allow service faas to read repos in tenancy where request.operation='ListContainerImageSignatures'
Allow service faas to {KEY_READ} in tenancy where request.operation='GetKeyVersion'
Allow service faas to {KEY_VERIFY} in tenancy where request.operation='Verify'
必要に応じて、コンパートメントごとにこれらのポリシー・ステートメントを制限できます。
詳細は、構成ノートを参照してください。
B.アプリケーションの作成
- ファンクション開発者としてコンソールにサインインします。
- ナビゲーション・メニューを開き、「開発者サービス」をクリックします「ファンクション」で、「アプリケーション」をクリックします。
- OCIファンクションで使用するリージョンを選択します。
- 「アプリケーションの作成」をクリックします。
- 次を指定します:
- 新規アプリケーションの名前としてのhelloworld-app。このアプリケーションに最初の関数をデプロイし、関数を呼び出すときにこのアプリケーションを指定します。
- ファンクションを実行するVCNおよびサブネット。パブリック・サブネットにはVCN内のインターネット・ゲートウェイが必要であり、プライベート・サブネットにはVCN内のサービス・ゲートウェイが必要です。
- 「作成」をクリックします。
詳細は、詳細な手順を参照してください。
C.OCIコンピュート・インスタンスの設定
- テナンシ管理者としてコンソールにサインインします。
- ナビゲーション・メニューを開き、「コンピュート」をクリックします。「コンピュート」で、「インスタンス」をクリックします。
- ネットワーク・リソースおよびOCIファンクション・リソースを作成するコンパートメントを選択します。
- 適切なコンピュート・インスタンスがコンパートメントにまだ存在しない場合は、「インスタンスの作成」をクリックして、次を実行します:
- OCIファンクションで使用するコンパートメント、VCNおよびサブネットを選択します
- パブリックIPアドレスを新しいコンピュート・インスタンスに割り当てることを指定します。
- 新しいコンピュート・インスタンスにアクセスするためのSSHキーを含むファイルを選択します
-
「インスタンスの詳細」ページで、開発環境として使用するコンピュート・インスタンスのOCIDおよびパブリックIPアドレスをコピーします。
詳細は、インスタンスの作成を参照してください。
コンピュート・インスタンスを含む新しい動的グループを作成します。
- ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「ドメイン」をクリックします。「アイデンティティ・ドメイン」で、「動的グループ」をクリックします。
- 新しい動的グループを作成します。
-
コンピュート・インスタンスのOCIDを含むルールを入力します:
ANY {instance.id = '<instance-ocid>'}
詳細は、動的グループの管理を参照してください。
ファンクション・リソース、ネットワーク・リソースおよびOracle Cloud Infrastructure Registryへの新しい動的グループ・アクセスを提供するポリシーを作成する:
- ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「ポリシー」をクリックします。
-
「ポリシーの作成」をクリックし、ポリシー・ビルダーの手動エディタを使用して、次のポリシー・ステートメントを含む新規ポリシーを作成します:
Allow dynamic-group <dynamic-group-name> to manage functions-family in compartment <compartment-name>
Allow dynamic-group <dynamic-group-name> to use virtual-network-family in compartment <compartment-name>
Allow dynamic-group <dynamic-group-name> to read repos in tenancy
詳細は、ポリシーの管理を参照してください。
D.OCIコンピュート・インスタンスの開発環境の設定
開発環境のターミナル・ウィンドウで:
- 次を入力してDockerがインストールされていることを確認します:
docker version
Dockerがインストールされていないことを示すエラー・メッセージが表示された場合は、続行する前にDockerをインストールする必要があります。ご使用のプラットフォームのDockerドキュメントを参照してください(Oracle Linuxについては、こちらを参照してください)。
Dockerがインストールされている場合、GitHubのFn Projectホーム・ページの前提条件セクションに移動し、インストールされているDockerのバージョンが、そこに指定されている最低バージョン以上であることを確認してください。そうでない場合は、続行する前にDockerを再インストールします。
- 次のように入力して、標準のhello-world Dockerイメージをコンテナとして起動し、Dockerが実行されていることを確認します:
docker run hello-world
Dockerが実行されていないことを示すエラー・メッセージが表示された場合は、続行する前にDockerデーモンを起動する必要があります。Dockerドキュメントを参照してください。
詳細は、構成ノートを参照してください。
開発環境のターミナル・ウィンドウで:
- 環境に適した手順を使用して、Fn Project CLIをインストールします。
- LinuxまたはMacOS:次を入力します。
curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh
- MacOS using Homebrew: Enter:
brew update && brew install fn
- Windows: GitHubへのFn Clientのインストール手順に従います。
- Linux、MacOSまたはWindows: GitHubのFn Projectリリース・ページからバイナリをダウンロードして実行します。
- LinuxまたはMacOS:次を入力します。
- 次を入力して、Fn Project CLIがインストールされていることを確認します:
fn version
詳細は、構成ノートを参照してください。
開発環境のターミナル・ウィンドウで:
- 次を入力して、新しいFn ProjectのCLIコンテキストを作成します:
fn create context <my-context> --provider oracle-ip
--provider oracle-ip
を指定すると、インスタンスOCID、動的グループ、およびそれらの動的グループに権限を付与するポリシーを使用した認証および認可が有効になります。 - 次を入力して、Fn ProjectのCLIが新しいコンテキストを使用するように指定します:
fn use context <my-context>
詳細は、構成ノートを参照してください。
開発環境のターミナル・ウィンドウで:
- デプロイ済関数を所有するコンパートメントのOCIDを使用して、新しいFn Project CLIコンテキストを構成します
fn update context oracle.compartment-id <compartment-ocid>
- 次のように入力して、OCI APIのコール時に使用するapi-urlエンドポイントで新しいコンテキストを構成します。
fn update context api-url <api-endpoint>
ここで、
<api-endpoint>
は、ファンクションAPIのファンクション・エンドポイントのリストにあるエンドポイントの1つです。フォーマットはhttps://functions.<region-identifier>.oci.oraclecloud.com
です。例:fn update context api-url https://functions.us-phoenix-1.oci.oraclecloud.com
-
OCIファンクションで使用する現在のリージョンおよびテナンシのOracle Cloud Infrastructure Registryアドレスを使用して、Fn ProjectのCLIコンテキストを構成します:
fn update context registry <region-key>.ocir.io/<tenancy-namespace>/<repo-name-prefix>
<repo-name-prefix>
は、関数のイメージを格納するOracle Cloud Infrastructure Registryリポジトリ用に選択した接頭辞です。例:fn update context registry phx.ocir.io/ansh81vru1zp/acme-repo
-
次のように入力して、OCIファンクションがファンクション・イメージのプッシュおよびプルするリポジトリのコンパートメントのOCIDを使用してFn Project CLIコンテキストを構成します:
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関数はルート・コンパートメント内のリポジトリに対してイメージをプッシュおよびプルします。
詳細は、構成ノートを参照してください。
- ファンクション開発者としてコンソールにサインインします。
- 「ユーザー」メニューを開き、「ユーザー設定」に移動します。「認証トークン」ページで、「トークンの生成」をクリックします。
- 「トークンの生成」ダイアログで認証トークンの意味のある説明を入力し、「トークンの生成」をクリックします。新しい認証トークンが表示されます。
- 認証トークンを、後で取得できる保護された場所にただちにコピーします。これは、コンソールに認証トークンが再度表示されないようにするためです。
- 「トークンの生成」ダイアログを閉じます。
詳細は、構成ノートを参照してください。
開発環境のターミナル・ウィンドウで:
-
次のコマンドを入力します。
docker login -u '<tenancy-namespace>/<user-name>' <region-key>.ocir.io
例:
docker login -u 'ansh81vru1zp/jdoe@acme.com' phx.ocir.io
テナンシがOracle Identity Cloud Serviceとフェデレートされている場合、フォーマットは少し異なります。例:
docker login -u 'ansh81vru1zp/oracleidentitycloudservice/jdoe@acme.com' phx.ocir.io
-
パスワードのプロンプトが表示されたら、以前に作成およびコピーしたOracle Cloud Infrastructure認証トークンを入力します。例:
6aN...6MqX
これで、ファンクションの作成、デプロイおよび呼出しを開始する準備ができました。
詳細は、構成ノートを参照してください。
E.ファンクションの作成、デプロイおよび呼出し
端末ウィンドウで:
-
次を入力してhelloworld javaファンクションを作成します。
fn init --runtime java hello-java
hello-javaというディレクトリが作成され、次のものが含まれます。
- func.yamlという関数定義ファイル
- helloworld関数のソース・ファイルおよびディレクトリを含む/srcディレクトリ
- pom.xmlというMaven構成ファイル。関数のコンパイルに必要な依存性を指定します。
Javaは、サポートされている複数の言語の1つです。
詳細は、詳細な手順を参照してください。
端末ウィンドウで:
- 前の手順で作成したhello-javaディレクトリにディレクトリを変更します。
cd hello-java
- 次の単一のFn Projectコマンドを入力して、ファンクションおよびその依存関係をhello- javaというDockerイメージとして作成し、そのイメージを指定したDockerレジストリにプッシュして、以前に作成したhelloworld- appアプリケーションのOCIファンクションにファンクションをデプロイします。
fn -v deploy --app helloworld-app
- (オプション)helloworld- appアプリケーションの詳細ページの「リソース」の下にある「関数」をクリックし、hello- java関数が表示されるようにして、関数がOCI関数にデプロイされていることを確認します。
詳細は、詳細な手順を参照してください。
端末ウィンドウで:
-
次を入力してhello-java関数を起動します。
fn invoke helloworld-app hello-java
「Hello world!」メッセージが表示されます。
-
次のように入力して、パラメータ
'John'
でhello-java関数を起動します。echo -n 'John' | fn invoke helloworld-app hello-java
'Hello John!'メッセージが表示されます。
完了しました。OCIファンクションを使用して最初のファンクションを作成、デプロイおよび起動しました。
詳細は、詳細な手順を参照してください。
ファンクションを作成、デプロイおよび起動したので、次の方法を学習します。
- Oracle Cloud Infrastructure Loggingサービス、またはsyslog URLの構成によるファンクション・ログの表示(ファンクション・ログの格納および表示を参照)
- GitHubのサンプルを使用してOCIファンクションを確認します(Oracle Functionsのサンプルを参照)
- SDKを使用したファンクションの起動(SDKを使用したファンクションの起動を参照)
これで完了です。