- azure CLI経由でfunctionsを作成するコマンドと引数の意味
- functionsを作成する上で必要な検討事項
azure のリソースはポータル経由でも作成できますが、az commandを用いて作成することをおすすめします。
- 実行したコマンドを履歴として管理できる
- 複数環境へのリリース時に、コマンドを使いまわせる
このような点が主な理由です。
ポータル経由でできることは、az commandからでも実行可能なため、多少面倒でもaz commandを使うようにしましょう。
azure functionsを作成する
functionsを作成するためのaz commandは、以下のサイトにリファレンスがあります。
https://docs.microsoft.com/ja-jp/cli/azure/functionapp?view=azure-cli-latest#az-functionapp-create
az functionapp create --name
--resource-group
--storage-account
[--app-insights]
[--app-insights-key]
[--assign-identity]
[--consumption-plan-location]
[--deployment-container-image-name]
[--deployment-local-git]
[--deployment-source-branch]
[--deployment-source-url]
[--disable-app-insights {false, true}]
[--docker-registry-server-password]
[--docker-registry-server-user]
[--functions-version {2, 3}]
[--os-type {Linux, Windows}]
[--plan]
[--role]
[--runtime {custom, dotnet, dotnet-isolated, java, node, powershell, python}]
[--runtime-version]
[--scope]
[--subscription]
[--tags]
[ ]で囲われていない引数は、 必須の引数。[ ]で囲われている引数は、任意の引数です。引数の後に{ }で書かれている内容は、引数に対して指定できるオプションを表しています。
引数は必須のものと任意のもの、それぞれアルファベット順に並んでいるため、関連を読み解くのが難しいかもしれません。
az command 引数の意味
az functionapp createには、多くの引数があります。
これらの引数は、以下のようにグルーピングされます。
リソースの特定
name resource-group storage-account consumption-plan-location subscription
resource-group、subscription、nameは、functionsをどこにどういう名前で作成するかを指定するために渡す引数です。
また、functionsはazure storage(azure blob storage)上で稼動するため、リソース作成時にstorageを指定する必要があります。storage-accountはこのための引数です。
consumption-plan-locationは、functionsの地理的な環境です。日本で開発し日本のユーザーを想定しているのであれば、東日本を指定することをお勧めします。
functionsの実行環境
functions-version os-type plan runtime runtime-version
functions-versionは、functionsのランタイムバージョンです。
詳しくは以下のサイトに記述がありますが、古いとサポートされていない機能もあるため、理由がなければ最新のものを使うようにしましょう。
https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-versions?tabs=in-process%2Cv4&pivots=programming-language-csharp
os-typeやruntime、runtime-versionについても、正しく指定しなければ作成した関数が動作しなくなります。指定可能な範囲を確認しながら、適切な値を選択しましょう。
ロギングの設定
app-insights app-insights-key disable-app-insights
functionsのログは、通常Insightに出力します。
この出力先の設定をするのが上記の引数です。指定をしなければ、functionsと同名のinsightが作成せれます。
アクセス権の管理
assign-identity role scope
複数人で開発する場合、または複数環境を用意する場合、この設定をする必要が出てきます。
クラウドサービスは、便利な反面、誰でも直感的にリソースのパラメータを変更することができてしまいます。想定外の変更をされないためにも、正しく権限設定をしましょう。
デプロイの設定
deployment-container-image-name deployment-local-git deployment-source-branch deployment-source-url docker-registry-server-password docker-registry-server-user
gitやコンテナレジストリと連携させる場合に設定をします。
コンテナレジストリとの連携はOSをLinuxにする必要があるなど制約もあります。
azure functions作成前に検討すること
azureのベストプラクティスにも記載されている内容もありますが、以下の点をあらかじめ検討しておくことで、リソースグループやfunctionsが増えても、開発から運用保守までスムーズに進めることができます。
azure functionsの作成単位
マイクロサービスを採用しているのであれば、サービスごとに1つのfunctionsが基本となりますが、用途や目的に応じて複数必要にもなると思います。
命名規則(文字数の上限あり)含めて、あらかじめ検討しておくことをお勧めします。
storageの作成単位の検討
storageにはfunctionsの実態のほか、functions内部で利用するファイルや出力されたログなど、福酢の物を管理します。
そのため、あらかじめfunctionsごとに分離させておくことが推奨されています。
Insightの作成単位の検討
Insightは、functionsのログや稼働状況を監視してくれるAzureのサービスです。functionsが増えるほど、監視が難しくなります。1つのInsightにすべてのログの収集を任せることでfunctions間の呼び出しフローを追うこともできますし、運用チームの管理単位に合わせてInsightを分割して責任や関心を分離することもできます。
※あとからInsightを付け替えることもできるため、ある程度の柔軟さはあります。
functionsのプランの検討
検証用であれば従量課金プランでも問題内とは思います。
しかし、VNet内に入れる必要があったり、1処理の実行時間がどうしてもfunctionsのタイムアウトに引っかかったりする場合は、別のプランを考える必要が出てきます。
詳しくは、https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-scale にあります。それぞれのプランで課金単位も異なるため、事前に一度検討することをお勧めします。
アクセス権限の検討
複数人で開発したり、複数環境を用意したりする場合、開発者や運用管理者など、権限を分ける必要が出てきます。
コマンドを誤って実行しても、権限によって行動を制限できるようにしておけば被害を防ぐことができます。
まとめ
開発の進めやすさに注目すると、azure functionsは非常に使いやすいです。
ただし、運用保守面やセキュリティも考慮し始めると、プランを変える必要が出てきたり、functions自体や他のリソースを正しく分割したりする必要が出てきます。
また、必要に応じてKubernetesなどのContainer as a ServiceとFunctions as a Serviceの比較をすることもあります。
適切なサービスを適切な単位で適切な人が利用できるように、様々なパラメータを調節しましょう。