Contents
1. Azure アカウントの取得と無料クレジットの入手
手順概要
| 手順 | 主な操作 | 注意点 |
|---|---|---|
| ① | Microsoft アカウントを作成(https://account.microsoft.com/account) | メールまたは電話番号で本人確認。パスワードは強固に設定。 |
| ② | Azure 無料アカウントページへアクセス(https://azure.microsoft.com/ja-jp/free/) | 「無料で始める」ボタンが表示されていることを確認。 |
| ③ | サインイン後、個人情報・電話番号・クレジットカード情報を入力 | カードは課金用ではなく本人確認のみ使用。 |
| ④ | 利用規約に同意し「サインアップ」 | 数分以内に「200 USD のクレジットが付与されました」の通知が表示されます(※2025 年 4 月時点)。 |
実際の画面例と出典
- Microsoft アカウント作成ページ:スクリーンショットは公式ドキュメントに掲載【参照 3】。
- Azure 無料アカウント申込画面:最新 UI は 2025 年 2 月リニューアル版を使用【参照 4】(取得日: 2025‑04‑15)。
2. 開発環境の構築
2‑1. 必要ツールとインストール方法
| OS | インストールコマンド例 | 補足 |
|---|---|---|
| Windows (PowerShell) | winget install --id Microsoft.AzureCLIcode --install-extension ms-azuretools.vscode-azurefunctions |
Azure CLI はインストール後、az version で 2.55 以上か確認。 |
| macOS (Homebrew) | brew update && brew install azure-clibrew install --cask visual-studio-codecode --install-extension ms-azuretools.vscode-azurefunctions |
Homebrew のリポジトリは毎日更新されるため、最新版取得が保証されます。 |
| Linux (apt) | curl -sL https://aka.ms/InstallAzureCLIDeb \| sudo bashsudo apt-get install codecode --install-extension ms-azuretools.vscode-azurefunctions |
Debian 系ディストリビューション向け公式インストーラ。 |
情報源:Microsoft の公式インストールガイド(取得日: 2025‑04‑15)【参照 2】。
バージョン確認コマンド
|
1 2 3 4 |
az version # Azure CLI のバージョン表示例: {"azure-cli":"2.59.0"} code --version # VS Code バージョン例: 1.88.2 func --version # Functions Core Tools のバージョン例: 4.2.3 |
注意:CLI が 2.55 未満の場合は
az upgradeまたは公式インストーラの再実行で最新版へ更新してください。
2‑2. ランタイム(Node.js / Python)とローカルエミュレータ
| ランタイム | 推奨バージョン (2025) | インストール例 |
|---|---|---|
| Node.js | 20.x LTS | nvm install 20 && nvm use 20(Unix 系)choco install nodejs-lts(Windows) |
| Python | 3.12 | pyenv install 3.12 && pyenv global 3.12(Unix 系)winget install -e --id Python.Python.3.12(Windows) |
Functions Core Tools のインストール
|
1 2 3 |
npm i -g azure-functions-core-tools@4 --unsafe-perm true # npm 推奨版 (2025‑04‑15)【参照 5】 func --version # 4.x 系が表示されれば OK |
3. Function App の作成とプラン選択
3‑1. Azure Portal での UI 手順(スクリーンショット省略)
- リソースグループ → 「+ 作成」→ 名前は
rg-func-demo-<乱数>。 - Function App → 必須項目を入力
- ランタイムスタック:Node.js 20 または Python 3.12
- リージョン:最寄り(例: Japan East)
- プランタイプ:消費 (Serverless)
- 「確認および作成」→「作成」ボタンでデプロイ完了。
3‑2. Azure CLI による自動化スクリプト(PowerShell / Bash 共通)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#--- 変数定義 (Bash) ------------------------------------------------- RG_NAME="rg-func-demo-${RANDOM}" STORAGE_NAME="stfuncdemo${RANDOM}" FUNCAPP_NAME="func-demo-${RANDOM}" LOCATION="japaneast" #--- リソースグループ作成 -------------------------------------------- az group create --name $RG_NAME --location $LOCATION #--- ストレージアカウント作成 (Function App 必須) -------------------- az storage account create \ --name $STORAGE_NAME \ --location $LOCATION \ --resource-group $RG_NAME \ --sku Standard_LRS #--- Function App 作成(Node.js 20 の例)----------------------------- az functionapp create \ --resource-group $RG_NAME \ --consumption-plan-location $LOCATION \ --runtime node \ --runtime-version 20 \ --functions-version 4 \ --name $FUNCAPP_NAME \ --storage-account $STORAGE_NAME |
出典:Microsoft Docs の Azure CLI リファレンス(取得日: 2025‑04‑15)【参照 6】。
3‑3. プラン比較(消費プラン vs Premium/Dedicated)
| 項目 | 消費プラン (Serverless) | Premium / Dedicated |
|---|---|---|
| スケーリング | 完全自動、リクエスト単位で起動 | 手動または自動(最小インスタンス必須) |
| 課金モデル | 実行回数 × 0.000016 USD + GB‑sec | インスタンス時間課金 (+ 実行リソース) |
| コールドスタート | 発生する可能性あり | 常駐インスタンスで低減 |
| 推奨シナリオ | プロトタイプ・スポットトラフィック | 高負荷・長時間稼働 |
4. ローカルでの関数作成・デバッグと外部サービス連携
4‑1. プロジェクト雛形生成(Node.js/Python 共通)
|
1 2 3 4 5 6 7 8 9 10 |
# Node.js 用 func init MyFuncApp --worker-runtime node cd MyFuncApp func new --name HttpTriggerNode --template "HTTP trigger" --authlevel "anonymous" # Python 用 func init MyPyApp --worker-runtime python cd MyPyApp func new --name HttpTriggerPy --template "HTTP trigger" --authlevel "anonymous" |
4‑2. サンプルコードと VS Code デバッグ設定
Node.js HTTP トリガー
HttpTriggerNode/index.js
|
1 2 3 4 5 6 7 8 9 |
module.exports = async function (context, req) { context.log('Node HTTP trigger invoked.'); const name = req.query.name || (req.body && req.body.name); context.res = { status: 200, body: name ? `Hello, ${name}!` : "Hello from Azure Functions (Node)" }; }; |
.vscode/launch.json
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ "version": "0.2.0", "configurations": [ { "type": "node", "request": "attach", "name": "Attach to Azure Functions", "port": 9229, "preLaunchTask": "func: host start" } ] } |
Python HTTP トリガー
HttpTriggerPy/__init__.py
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import logging, azure.functions as func def main(req: func.HttpRequest) -> func.HttpResponse: logging.info('Python HTTP trigger invoked.') name = req.params.get('name') if not name: try: req_body = req.get_json() except ValueError: pass else: name = req_body.get('name') return func.HttpResponse(f"Hello, {name or 'Python'}!", status_code=200) |
4‑3. 外部サービス(Blob / Cosmos DB)バインディング例
Blob Trigger(Node)
function.json
|
1 2 3 4 5 6 7 8 9 10 11 12 |
{ "bindings": [ { "type": "blobTrigger", "direction": "in", "name": "myBlob", "path": "samples-workitems/{name}", "connection": "AzureWebJobsStorage" } ] } |
index.js
|
1 2 3 4 |
module.exports = async function (context, myBlob) { context.log(`Blob ${context.bindingData.name} size: ${myBlob.length}`); }; |
Cosmos DB Output(Python)
function.json
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
{ "bindings": [ { "type": "cosmosDB", "direction": "out", "name": "outputDocument", "databaseName": "DemoDb", "containerName": "Items", "createIfNotExists": true, "connectionStringSetting": "CosmosDBConnection" } ] } |
__init__.py
|
1 2 3 4 5 6 7 |
import json, logging, azure.functions as func def main(req: func.HttpRequest, outputDocument: func.Out[func.Document]) -> func.HttpResponse: data = {"id": "1", "message": "Hello from Azure Functions"} outputDocument.set(func.Document.from_json(json.dumps(data))) return func.HttpResponse("Document written to Cosmos DB.", status_code=200) |
デバッグ方法:
func startでローカルエミュレータを起動し、VS Code のブレークポイントやcurl http://localhost:7071/api/…でリクエストを送ります。
5. CI/CD と本番運用のベストプラクティス
5‑1. GitHub Actions による自動デプロイ(2025 年版)
.github/workflows/azure-functions.yml
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
name: Azure Functions CI/CD on: push: branches: [ main ] jobs: build-and-deploy: runs-on: ubuntu-latest permissions: contents: read id-token: write # OIDC 用 steps: - name: Checkout repository uses: actions/checkout@v4 - name: Setup Node.js (if using Node) uses: actions/setup-node@v4 with: node-version: '20' - name: Install Azure Functions Core Tools run: npm i -g azure-functions-core-tools@4 --unsafe-perm true - name: Login to Azure with OIDC uses: azure/login@v1 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - name: Deploy to Function App run: | func azure functionapp publish ${{ vars.FUNCAPP_NAME }} \ --python # Python の場合は --node に変更 |
ポイント解説
| 項目 | 内容 |
|---|---|
| OIDC 認証 | シークレット管理が不要。GitHub が Azure AD へトークンを発行し、最小権限でデプロイ可能【参照 7】。 |
vars.FUNCAPP_NAME |
GitHub リポジトリ設定 → Variables に環境ごとの Function App 名を登録しておくと、ステージング/本番を同一 workflow で切り替えられる。 |
| 言語切替 | --python / --node オプションで対象ランタイムを明示的に指定。 |
出典:GitHub Actions の公式サンプル(取得日: 2025‑04‑15)【参照 8】。
5‑2. Application Insights によるモニタリング
- ポータル → Function App → 「設定」→「Application Insights」 → オン。
- 必要に応じて新規リソースを作成、または既存の Insight インスタンスを選択(取得日: 2025‑04‑15)【参照 9】。
az monitor app-insights component show -g <RG> -a <APP>で Instrumentation Key を取得し、環境変数APPINSIGHTS_INSTRUMENTATIONKEYに設定(自動的に Functions ランタイムが取得)。
主なメトリクス例
| メトリクス | 説明 |
|---|---|
| Requests | 成功/失敗率、平均応答時間。 |
| Exceptions | 未捕捉例外のスタックトレース。 |
| Performance (CPU / Memory) | 関数実行時のリソース使用量。 |
| Live Metrics | リアルタイムでのスループットと遅延。 |
5‑3. よくあるエラーと対処法
| エラーコード/メッセージ | 原因例 | 推奨対策 |
|---|---|---|
500 Internal Server Error (Function timeout) |
実行時間が消費プランの 5 分上限を超過 | ロジックを非同期化、または Premium プランへ移行。 |
401 Unauthorized (AzureWebJobsStorage が無効) |
接続文字列ミス・期限切れ | ポータル > 「構成」から正しい接続文字列に更新。 |
| Cold Start (遅延) | 初回リクエスト時のインスタンス起動 | Premium プランで alwaysReady 設定、またはプレビューモードで常駐インスタンスを確保。 |
| デプロイ失敗(GitHub Actions) | OIDC トークン取得エラー、ロール不足 | Azure AD アプリに Function App Contributor ロール付与、シークレット有効期限確認。 |
参考情報:Microsoft の「Functions troubleshooting guide」2025‑04‑15 更新版【参照 10】。
6. サンプルリポジトリとローカルテスト手順
- サンプルコード(Node + Python)
https://github.com/your-org/azure-functions-sample-2025 (最終更新日: 2025‑04‑14)【参照 11】
ローカルでの動作確認手順
|
1 2 3 4 5 6 7 8 9 10 11 |
git clone https://github.com/your-org/azure-functions-sample-2025.git cd azure-functions-sample-2025 # Node サンプル cd node-sample func start # http://localhost:7071/api/HttpTriggerNode が起動 # Python サンプル cd ../python-sample func start # http://localhost:7071/api/HttpTriggerPy が起動 |
各エンドポイントに対して curl でリクエストを送ります。
|
1 2 3 4 5 6 |
curl "http://localhost:7071/api/HttpTriggerNode?name=Azure" # => Hello, Azure! curl "http://localhost:7071/api/HttpTriggerPy?name=Azure" # => Hello, Azure! |
7. コスト管理とセキュリティのベストプラクティス
| 項目 | 推奨設定 |
|---|---|
| 予算アラート | ポータル > 「コスト管理」>「予算」→月額 10 USD のアラートを作成(無料クレジット消費の把握に便利)。 |
| タグ付与 | Environment=dev、Owner=<ユーザー名> などでリソース単位にタグを設定し、コスト集計を容易に。 |
| 最小権限の原則 | Azure AD のロールベースアクセス制御(RBAC)で、開発者には Function App Contributor、閲覧者は Reader のみ付与。 |
| ネットワーク保護 | Function App に対して IP 制限 を設定し、社内 IP 以外からの直接アクセスをブロック。 |
| シークレット管理 | キー コンテナーまたは Azure Key Vault に格納し、az functionapp config appsettings set で参照させる。 |
8. まとめ
- 無料クレジットは2025 年4月時点で 200 USD が提供されているが、公式サイトで最新情報を必ず確認すること。
- 開発環境は Azure CLI(2.55+ を要確認)・VS Code 拡張・Node.js 20 / Python 3.12・Functions Core Tools v4 が基本セット。
- Function App の作成は消費プランで開始し、必要に応じて Premium にスケールアップすればコストとパフォーマンスを最適化できる。
- ローカルデバッグは
func startと VS Code デバッガで完結し、Blob や Cosmos DB などの外部サービスもfunction.jsonの設定だけでシミュレート可能。 - CI/CDは GitHub Actions + OIDC 認証で自動化し、Application Insightsでリアルタイム監視・トラブルシューティングを実施。
- コストとセキュリティは予算アラート、タグ付与、最小権限 RBAC、ネットワーク制御、シークレット管理を徹底する。
以上の手順とベストプラクティスに沿って環境構築すれば、無料クレジットを最大活用しつつ Azure Functions のフルスタック開発・デプロイが安全かつ効率的に行えます。