catch-img

API GatewayからOCI Functions実行の設定手順

今回は、OCIのリソースを扱ったことはあるがAPI Gatewayを作成したことない方向けにAPI GatewayからOracle Cloud Infrastructure Functions(以下、Functions)実行の設定手順をご紹介します。

目次[非表示]

  1. 1.はじめに
  2. 2.Functionsの作成
  3. 3.API Gatewayの作成
  4. 4.IAMアクセス・ポリシー/イングレス・ルールの追加
  5. 5.Functions呼び出し
  6. 6.まとめ


はじめに

Functionsとは、任意のクラウドまたはオンプレミスで実行できる、オープン・ソース、コンテナ・ネイティブ、サーバーレスのFunctions- as- a- Service(FaaS)プラットフォームのことです。
API Gatewayとは、リージョナル・サブネットの仮想ネットワーク・アプライアンスのことです。インバウンド・トラフィックを、パブリック、プライベート、パートナHTTP APIなどのバックエンド・サービスとOracle Cloud Infrastructure Functionsにルーティングします。

API GatewayからFunctions実行ができるようになると、何が出来るようになるのでしょうか?
インスタンスの起動・停止、メトリック・コスト取得といった機能を、OCIコンソール画面で行わずに外部から、URLにアクセスするだけで何度でも実施することが出来るようになります。

今回はインスタンスの起動停止を下記流れで実行してみます。
[1]VMからAPI Gatewayのエンドポイントに対して、POSTリクエスト送信
[2]API GatewayからFunctions実行
[3]FunctionsよりResource Managerでインスタンスの起動停止実施


今回の設定手順では、VCN、Subnet、VMは作成済みの前提で説明いたします。
主にご紹介する内容は、API Gateway経由でFunctionsを呼び出すのに必要な設定となっております。
設定の大まかな流れとしては下記です。
[1]Functionsの作成
 →実行したい処理(インスタンスの起動停止)をDockerイメージとしてデプロイするためにFunctionsを作成します。
[2]API Gatewayの作成
 APIデプロイメント※経由でFunctionsの呼び出しができるようにAPI Gatewayを作成します。
 ※
APIデプロイメントとは、API GatewayにAPIをデプロイするための手段
[3]IAMアクセス・ポリシー/イングレス・ルールの追加
 →API GatewayにFunctionsへのアクセス権を付与するためにポリシーと通信に必要なポート443のトラフィックを許可するイングレス・ルールを追加します。

※記載している手順、画像は2024年5月時点のものになります。
 今後、OCIコンソールのアップデートにより、記載している手順、及び画像と実際の作業手順が一致しない場合がございます。
 予めご了承ください。


Functionsの作成

1.左上のメニュー>開発者サービス>アプリケーションを選択しクリックします。
2.「アプリケーションの作成」をクリックします。
3.以下の項目を入力して「作成」をクリックします。
 名前:自由に記入
 VCN:作成済みのVCN
 サブネット:作成済みのサブネット
 ※ある場合は、シェイプ:要件にあうシェイプ
4.Functionsの作成については、「スタートガイド」に沿って作成してください。

今回は、リクエストにインスタンス名を持たせ、そのインスタンス名に応じて、対象のインスタンスを起動する処理を組み込んだファンクションを作成しています。
Functions作成の詳細については、今後別途でブログにて公開していきますが、公式ドキュメントもございます。
詳細を確認したい方は是非下記をご覧ください。

  ファンクション Functionsは、インフラを管理することなくビジネス・ロジックを作成、実行およびスケーリングできるサーバーレス・プラットフォームです。 https://docs.oracle.com/ja-jp/iaas/Content/Functions/home.htm

API Gatewayの作成

1.左上のメニュー>開発者サービス>ゲートウェイを選択しクリックします。
2.「ゲートウェイの作成」をクリックします。

3.以下の項目を入力して「ゲートウェイの作成」をクリックします。
 名前:自由に記入
 タイプ:パブリック
 仮想クラウド・ネットワーク:作成済みのVCN
 サブネット:作成済みのパブリックサブネット

4.ゲートウェイの作成後デプロイメントに移動し、「デプロイメントの作成」をクリックします。

5.以下の項目を入力して「次」をクリックします。
 名前:自由に記入
 パス接頭辞:/xxxのような形で自由に記入

6.認証なしを選択し、「次」をクリックします。

7.以下の項目を入力して「次」をクリックします。
 パス:/xxxのような形で自由に記入
 メソッド:POST
 バックエンド・タイプ:Oracleファンクション
 アプリケーション:作成済みのアプリケーション名を選択
 関数名:作成済みのファンクション名を選択

8.記入内容に相違がないか確認し、「作成」をクリックします。

9.デプロイメントで作成したデプロイメントが登録されていればAPI Gatewayの作成は完了です。

IAMアクセス・ポリシー/イングレス・ルールの追加

1.左上のメニュー>アイデンティティとセキュリティ>ポリシーを選択しクリックします。
2.「ポリシーの作成」をクリックします。3.以下の項目を入力して「作成」をクリックします。
 名前:自由に記入
 説明:自由に記入
 ポリシービルダー:下記を要件に合わせて記載

ALLOW any-user to use functions-family in compartment <functions-compartment-name> where ALL {request.principal.type= 'ApiGateway', request.resource.compartment.id = '<api-gateway-compartment-OCID>'}


※上記ポリシー文についての詳しい説明はOracle公式ドキュメントにあるのでご確認ください。

  APIゲートウェイ・バック・エンドとしてのOCI Functionsでのファンクションの追加 Find out how to create an API deployment with API Gateway that exposes serverless functions defined in OCI Functions. https://docs.oracle.com/ja-jp/iaas/Content/APIGateway/Tasks/apigatewayusingfunctionsbackend.htm#Adding_a_Function_in_Oracle_Functions_as_an_API_Gateway_Back_End

4.左上のメニュー>ネットワーキング>仮想クラウド・ネットワークを選択しクリックします。
5.API Gatewayの作成3.にて登録したVCNを選択

6.API Gatewayの作成3.にて登録したパブリックサブネットを選択

7.対象のセキュリティリストを選択

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

9.以下の項目を入力して「イングレス・ルールの追加」をクリックします。
 ステートレス:チェックをオフにする(デフォルト値)
 ソースタイプ:CIDR
 ソースCIDR:0.0.0.0/0
 IPプロトコル:TCP(デフォルト値)
 宛先ポート範囲:443

10.新たにイングレス・ルールが追加されていれば完了です。

Functions呼び出し

デプロイメントに割り当てられているエンドポイントにアクセスすると、呼び出すことができます。

また、curlコマンドにより呼び出すことができます。

curl -k -X <method> https://<gateway-hostname>/<deployment-path-prefix>/<api-route-path>


※curlの使用についての詳しい説明はOracle公式ドキュメントにあるのでご確認ください。

  APIゲートウェイにデプロイされたAPIのコール APIゲートウェイ・サービスでAPIゲートウェイに以前にデプロイしたAPIのコール方法をご紹介します。 https://docs.oracle.com/ja-jp/iaas/Content/APIGateway/Tasks/apigatewayinvokingdeployedapi.htm#Calling_an_API_Deployed_on_an_API_Gateway

実際にインスタンスの起動をcurlコマンドによりFunctionsを呼び出して実施してみましょう。

・対象のインスタンス(Test_Instance)が「停止済」なことを確認します。

今回は、リクエストにコンパートメント名とインスタンス名を持たせ、そのインスタンス名に応じて、対象のインスタンスを起動する処理を組み込んだファンクションを実行するため、curlコマンドに引数を設定した下記コマンドで実行します。

curl -X POST -H "Content-Type: application/json" -d '{"project_tag_name":"Test","start_ins_tag_name": "Test_Instance"}' https://エンドポイント/パス接頭辞

上記のコマンドの'{"project_tag_name":"Test","start_ins_tag_name": "Test_Instance"}'が引数になっています。

・実行後、対象のインスタンス(Test_Instance)は「実行中」へと変わり起動したことが確認できます。


まとめ

今回は、API GatewayからFunctions実行の設定手順をご紹介させていただきました。
また、Oracle Universityのラーニングパスの「Japanese: Become a OCI Architect Professional (2023) 日本語」コースにもFunctionsとAPI Gatewayの作成と連携の手順方法を説明しているハンズオン動画がありますので、是非詳細について確認したい方はラーニングパスをご覧ください。

  Oracle MyLearn Oracle MyLearn — your personalized learning experience. Build new skills with Oracle Cloud training courses and advance your career with an Oracle Certification. Oracle MyLearn


ページトップへ戻る