Azure Kubernetes Service (AKS) での OpenFaaS の使用

OpenFaaS は、コンテナーを使用してサーバーレス関数を作成するフレームワークです。 オープン ソース プロジェクトであることから、コミュニティ内で大規模に導入されています。 このドキュメントでは、Azure Kubernetes Service (AKS) クラスター上で OpenFaas をインストールし、使用する方法について説明します。

準備

OpenFaaS helm チャート リポジトリを追加する

  1. Azure Cloud Shell に移動します。

  2. OpenFaaS Helm チャート リポジトリを追加し、次の helm コマンドを使用する最新バージョンに更新します。

    helm repo add openfaas https://openfaas.github.io/faas-netes/
    helm repo update
    

OpenFaaS をデプロイする

OpenFaaS と OpenFaaS 関数は、それぞれ独自の Kubernetes 名前空間に格納するようにしてください。

  1. kubectl apply コマンドを使用する OpenFaaS システムと関数用の名前空間を作成します。

    kubectl apply -f https://raw.githubusercontent.com/openfaas/faas-netes/master/namespaces.yml
    
  2. 次のコマンドを使用する OpenFaaS UI ポータルと REST API のパスワードを生成します。 Helm チャートは、OpenFaaS ゲートウェイで基本認証を有効にするためにこのパスワードを使用します。helm チャートはクラウド LoadBalancer を介してインターネットに公開されています。

    # generate a random password
    PASSWORD=$(head -c 12 /dev/urandom | shasum| cut -d' ' -f1)
    
    kubectl -n openfaas create secret generic basic-auth \
    --from-literal=basic-auth-user=admin \
    --from-literal=basic-auth-password="$PASSWORD"
    
  3. 次の echo コマンドを使用して、パスワードの値を取得します。

    echo $PASSWORD
    
  4. helm upgrade コマンドを使用して、AKS クラスターに OpenFaaS をデプロイします。

    helm upgrade openfaas --install openfaas/openfaas \
        --namespace openfaas  \
        --set basic_auth=true \
        --set functionNamespace=openfaas-fn \
        --set serviceType=LoadBalancer
    

    出力は、次の要約された出力例のようになります:

    NAME: openfaas
    LAST DEPLOYED: Tue Aug 29 08:26:11 2023
    NAMESPACE: openfaas
    STATUS: deployed
    ...
    NOTES:
    To verify that openfaas has started, run:
    
    kubectl --namespace=openfaas get deployments -l "release=openfaas, app=openfaas"
    ...
    
  5. OpenFaaS ゲートウェイにアクセスするためのパブリック IP アドレスが作成されます。 kubectl get service コマンドを使用すると IP アドレスを取得できます。

    kubectl get service -l component=gateway --namespace openfaas
    

    出力は次の出力例のようになります。

    NAME               TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)          AGE
    gateway            ClusterIP      10.0.156.194   <none>         8080/TCP         7m
    gateway-external   LoadBalancer   10.0.28.18     52.186.64.52   8080:30800/TCP   7m
    
  6. ログインを求められる、ポート 8080 上の外部 IP アドレス (この例では http://52.186.64.52:8080) を参照して、OpenFaaS システムをテストします。 既定のユーザーは admin であり、パスワードは echo $PASSWORD を使って取得できます。

    Screenshot of OpenFaaS UI.

  7. $OPENFAAS_URL をポート 8080 の外部 IP アドレスの URL に設定 し、次のコマンドを使用して Azure CLI でログインします。

    export OPENFAAS_URL=http://52.186.64.52:8080
    echo -n $PASSWORD | ./faas-cli login -g $OPENFAAS_URL -u admin --password-stdin
    

最初の関数を作成する

  1. OpenFaaS URL を使用して OpenFaaS システムに移動します。

  2. [新しい関数をデプロイする] を選択して Figlet を検索することにより、OpenFaas ポータルを使用して関数を作成します。

  3. Figlet 関数を選択し、[デプロイ] をクリックします。

    Screenshot shows the Deploy A New Function dialog box with the text Figlet on the search line.

  4. 次の curl コマンドを使用して関数を呼び出します。 次の例にある IP アドレスを、OpenFaas ゲートウェイ アドレスに置き換えてください。

    curl -X POST http://52.186.64.52:8080/function/figlet -d "Hello Azure"
    

    出力は次の出力例のようになります。

     _   _      _ _            _
    | | | | ___| | | ___      / \    _____   _ _ __ ___
    | |_| |/ _ \ | |/ _ \    / _ \  |_  / | | | '__/ _ \
    |  _  |  __/ | | (_) |  / ___ \  / /| |_| | | |  __/
    |_| |_|\___|_|_|\___/  /_/   \_\/___|\__,_|_|  \___|
    

2 番目の関数を作成する

Azure Cosmos DB インスタンスを構成する

  1. Azure Cloud Shell に移動します。

  2. まず、az group create コマンドを使用する Azure Cosmos DB インスタンス用の新しいリソース グループを作成します。

    az group create --name serverless-backing --location eastus
    
  3. az cosmosdb create コマンドを使用する、種類が MongoDB の Azure Cosmos DB インスタンスをデプロイします。 openfaas-cosmos は、次のように独自の一意インスタンス名に置き換えます。

    az cosmosdb create --resource-group serverless-backing --name openfaas-cosmos --kind MongoDB
    
  4. Azure Cosmos DB データベース接続文字列を取得し、それを az cosmosdb list コマンドを使用する変数に格納します。 --resource-group 引数の値をリソース グループの名前に更新し、--name 引数の値を Azure Cosmos DB インスタンスの名前に置き換えるようにしてください。

    COSMOS=$(az cosmosdb list-connection-strings \
      --resource-group serverless-backing \
      --name openfaas-cosmos \
      --query connectionStrings[0].connectionString \
      --output tsv)
    
  5. plans.json という名前のファイルを作成し、次の JSON でコピーすることで、Azure Cosmos DB にテスト データを設定します。

    {
        "name" : "two_person",
        "friendlyName" : "Two Person Plan",
        "portionSize" : "1-2 Person",
        "mealsPerWeek" : "3 Unique meals per week",
        "price" : 72,
        "description" : "Our basic plan, delivering 3 meals per week, which will feed 1-2 people.",
        "__v" : 0
    }
    

関数を作成する

  1. MongoDB chart をインストールします。 次のコマンドの例では、brew を使用してこれらのツールをインストールします。 その他のインストール オプションについては、MongoDB のドキュメントを参照してください。

    brew install mongodb
    
  2. mongoimport ツールを使用して、Azure Cosmos DB インスタンスにデータを読み込みます。

    mongoimport --uri=$COSMOS -c plans < plans.json
    

    出力は次の出力例のようになります。

    2018-02-19T14:42:14.313+0000    connected to: localhost
    2018-02-19T14:42:14.918+0000    imported 1 document
    
  3. faas-cli deploy コマンドを使用して関数を作成します。 -g 引数の値を、OpenFaaS ゲートウェイ アドレスに更新してください。

    faas-cli deploy -g http://52.186.64.52:8080 --image=shanepeckham/openfaascosmos --name=cosmos-query --env=NODE_ENV=$COSMOS
    

    デプロイすると、出力は次の出力例のようになります。

    Deployed. 202 Accepted.
    URL: http://52.186.64.52:8080/function/cosmos-query
    
  4. 次の curl コマンドを使用して関数をテストします。 IP アドレスを OpenFaaS ゲートウェイ アドレスに更新してください。

    curl -s http://52.186.64.52:8080/function/cosmos-query
    

    出力は次の出力例のようになります。

    [{"ID":"","Name":"two_person","FriendlyName":"","PortionSize":"","MealsPerWeek":"","Price":72,"Description":"Our basic plan, delivering 3 meals per week, which will feed 1-2 people."}]
    

    Note

    関数のテストは、次の OpenFaaS の UI 内で行うこともできます。

    Screenshot of OpenFaas UI.

次のステップ

OpenFaaS ワークショップでさらに知識を深めることができます。これには、GitHub ボットの作成方法、シークレットの使用方法、メトリックの表示方法、自動スケーリングなどのトピックを扱う一連のハンズオン ラボがあります。