はじめに
こんにちは、Marstach(@Marstach)と申します。
長期インターンシップや日頃の自己学習を通して学んだことを記事にて定期的にアウトプットしていきます。
対象者
- Pythonの仮想環境について理解のある方
- AzureFunctionsのデプロイができず困っている方
今回の内容
今回はAzureCLIを使ってAzureFunctionsにデプロイする方法を徹底的に解説していきます。
AzureFunctionsのデプロイで困っている方の助けになれば幸いです。
(以下で紹介するコマンドはMac環境を想定したものであるため、Windowsの方は適宜コマンドを変換する必要があるかもしれません。)
1. 仮想環境作成
AzureCLIのインストールのために仮想環境を作成します。
※AzureCLIは実環境だと管理者権限の問題やHomebrewの権限設定などでインストールまでに困難な点がある場合が多いため、今回は仮想環境を作成して行います。
以下コマンドで仮想環境を作成し、仮想環境を有効化します。
python -m venv venv
source venv/bin/activate
これでvenvという仮想環境の作成完了です。
左に(venv)と出ていれば問題ないです。
2. AzureCLIインストール
先ほど作成した仮想環境にはまだ実環境にあったツールしかありません。
そのため、AzureCLIを含めたデプロイに必要なツールをインストールしていきます。
以下のコマンドでインストールします。
pip install --upgrade pip
pip install azure-functions azure-cli
npm install -g azure-functions-core-tools@4 --unsafe-perm true
3つ目のコマンドでエラーが起きた場合、/usr/local/lib/node_modules
ディレクトリに書き込み権限がないことが理由として考えられます。
この場合、権限を変更してインストールするか、グローバルではなくローカルにインストールするとうまくいきます。
3. Azureにログイン
以下のコマンドでAzureにログインします。
az login
コマンド実行後ブラウザが開くので指示通りに進めてください。
その後コマンドラインに戻り、指示通りに進めてください。特別指定がなければEnterで問題ないです。
4. Azureリソースの作成
※すでにある方は飛ばしてください。関数の内容だけ上書きしたい場合などはこの手順は必要ありません。
ここではリソースグループ、ストレージアカウント、関数アプリ(この後関数を入れる土台のようなイメージ)を作成します。
以下のコマンドを実行してください。
※適宜自分の環境に合わせた値を代入してください
<リソースグループの名前>="リソースグループ名"
<pythonのバージョン>="3.12"
<ストレージアカウントの名前>="ストレージアカウントの名前"
# リソースグループの作成
az group create --name <リソースグループの名前> --location <location>
# ストレージアカウントの作成
az storage account create --name <ストレージアカウントの名前> --location <location> --resource-group <リソースグループの名前> --sku Standard_LRS
# Consumption プランで Function App を作成(Linux + Python)
az functionapp create \
--resource-group <リソースグループの名前> \
--consumption-plan-location <location> \
--runtime python \
--runtime-version <pythonのバージョン> \
--functions-version 4 \
--name <Azure Functionの名前> \
--storage-account <ストレージアカウントの名前> \
--os-type Linux
5. AzureFunctionsプロジェクトの作成
AzureFunctionsにデプロイする雛型を作成します。
以下のコマンドを実行し、雛型を作成。
func init myfuncapp --python
myfuncapp
は雛型がローカルに作成される時のディレクトリ名なのでなんでも大丈夫です。
そして、作成したディレクトリにあるfunction_app.py
を削除してください。(このファイルがあるとこのあとのコマンド作成する予定の__init__.py
がうまく作成されません。)
以下のコマンドで作成したディレクトリに移動し、必要なファイルを作成。
cd myfuncapp
func new --name MyHttpTrigger --template "HTTP trigger" --authlevel "anonymous"
MyHttpTrigger
はデプロイ後反映される名前なので役割が分かる名前を付けるようにしましょう。
これで作成された__init__.py
にデプロイする関数の内容を記述します。
そして記述した関数に必要なインストール情報requirements.txt
に記入。
ディレクトリ構成
作成したディレクトリは以下のような構成になっているはずです。
myfuncapp/
├── MyHttpTrigger/
│ ├── __init__.py
│ └── function.json
├── host.json
├── local.settings.json
├── requirements.txt
このような構成になっていれば完璧です。
6. ローカルで動作確認
以下のコマンドでローカルで動作確認ができます。
func start
7. デプロイ
以下のコマンドでデプロイしてください
<AzureFunctionsの名前>=ステップ4で作成した関数の土台の名前
func azure functionapp publish <AzureFunctionsの名前>
以上の過程を通して、AzureCLIを使ったデプロイをすることができます。
おわりに
お疲れ様でした。
ここまで読んでいただきありがとうございます。
少しでも力になれていれば幸いです。
これからも定期的に記事投稿していきたいと思いますので、ぜひ気が向いたときに読んでください。
それではまた