Azure Kubernetes Service (AKS) での OpenFaaS の使用
OpenFaaS は、コンテナーを使用してサーバーレス関数を作成するフレームワークです。 オープン ソース プロジェクトであることから、コミュニティ内で大規模に導入されています。 このドキュメントでは、Azure Kubernetes Service (AKS) クラスター上で OpenFaas をインストールし、使用する方法について説明します。
準備
- この記事では、Kubernetes の基本的な概念を理解していることを前提としています。 詳細については、「Azure Kubernetes Services (AKS) における Kubernetes の中心概念」を参照してください。
- アクティブな Azure サブスクリプションが必要です。 お持ちでない場合は、開始する前に無料アカウントを作成してください。
- AKS クラスターが必要です。 既存のクラスターがない場合は、Azure CLI、Azure PowerShell、または Azure portal を使用して作成できます。
- OpenFaaS CLI をインストールする必要があります。 インストール オプションについては、OpenFaaS CLI のドキュメントを参照してください。
OpenFaaS helm チャート リポジトリを追加する
Azure Cloud Shell に移動します。
OpenFaaS Helm チャート リポジトリを追加し、次の
helm
コマンドを使用する最新バージョンに更新します。helm repo add openfaas https://openfaas.github.io/faas-netes/ helm repo update
OpenFaaS をデプロイする
OpenFaaS と OpenFaaS 関数は、それぞれ独自の Kubernetes 名前空間に格納するようにしてください。
kubectl apply
コマンドを使用する OpenFaaS システムと関数用の名前空間を作成します。kubectl apply -f https://raw.githubusercontent.com/openfaas/faas-netes/master/namespaces.yml
次のコマンドを使用する 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"
重要
認証にユーザー名とパスワードを使用することは、安全でないパターンです。 OpenFaaS エンタープライズ ライセンスをお持ちの場合は、代わりに OpenFaaS 用の ID およびアクセス管理 (IAM) を使用することをお勧めします。
次の
echo
コマンドを使用して、パスワードの値を取得します。echo $PASSWORD
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" ...
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
ログインを求められる、ポート 8080 上の外部 IP アドレス (この例では
http://52.186.64.52:8080
) を参照して、OpenFaaS システムをテストします。 既定のユーザーはadmin
であり、パスワードはecho $PASSWORD
を使って取得できます。$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
最初の関数を作成する
OpenFaaS URL を使用して OpenFaaS システムに移動します。
[新しい関数をデプロイする] を選択して Figlet を検索することにより、OpenFaas ポータルを使用して関数を作成します。
Figlet 関数を選択し、[デプロイ] をクリックします。
次の
curl
コマンドを使用して関数を呼び出します。 次の例にある IP アドレスを、OpenFaas ゲートウェイ アドレスに置き換えてください。curl -X POST http://52.186.64.52:8080/function/figlet -d "Hello Azure"
出力は次の出力例のようになります。
_ _ _ _ _ | | | | ___| | | ___ / \ _____ _ _ __ ___ | |_| |/ _ \ | |/ _ \ / _ \ |_ / | | | '__/ _ \ | _ | __/ | | (_) | / ___ \ / /| |_| | | | __/ |_| |_|\___|_|_|\___/ /_/ \_\/___|\__,_|_| \___|
2 番目の関数を作成する
Azure Cosmos DB インスタンスを構成する
Azure Cloud Shell に移動します。
まず、
az group create
コマンドを使用する Azure Cosmos DB インスタンス用の新しいリソース グループを作成します。az group create --name serverless-backing --location eastus
az cosmosdb create
コマンドを使用する、種類がMongoDB
の Azure Cosmos DB インスタンスをデプロイします。openfaas-cosmos
は、次のように独自の一意インスタンス名に置き換えます。az cosmosdb create --resource-group serverless-backing --name openfaas-cosmos --kind MongoDB
Azure Cosmos DB データベース接続文字列を取得し、それを
az cosmosdb keys list
コマンドを使用する変数に格納します。--resource-group
引数の値をリソース グループの名前に更新し、--name
引数の値を Azure Cosmos DB インスタンスの名前に置き換えるようにしてください。COSMOS=$(az cosmosdb keys list \ --type connection-strings \ --resource-group serverless-backing \ --name openfaas-cosmos \ --output tsv)
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 }
関数を作成する
MongoDB chart をインストールします。 次のコマンドの例では、brew を使用してこれらのツールをインストールします。 その他のインストール オプションについては、MongoDB のドキュメントを参照してください。
brew install mongodb
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
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
次の
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 内で行うこともできます。
次のステップ
OpenFaaS ワークショップでさらに知識を深めることができます。これには、GitHub ボットの作成方法、シークレットの使用方法、メトリックの表示方法、自動スケーリングなどのトピックを扱う一連のハンズオン ラボがあります。
Azure Kubernetes Service