Contents
Azure アカウントとサブスクリプションの準備
1‑1. Microsoft アカウントを取得
- URL: https://signup.live.com
- メールアドレスまたは電話番号でサインアップし、二段階認証(MFA)を有効にすると安全です。
1‑2. Azure 無料試用枠の有効化
| 項目 | 内容 |
|---|---|
| クレジット額 | $200(約 28,000 円相当) |
| 有効期間 | 登録日から 30 日間 またはクレジットが使い切られるまでのいずれか早い方 |
| 継続利用可能な無料枠 | Azure Functions、Azure Storage、Cosmos DB(一定量)など、一部サービスは 12 カ月間の常時無料枠 が提供されます。※クレジットが残っている場合でも、30 日を過ぎると自動的に従量課金へ移行します。 |
重要
無料試用期間終了後に課金を防止したい場合は、使用しないリソースを削除するか、サブスクリプションの「支払い方法」を無効化してください。
1‑3. リソース グループの作成
| 手順 | 操作 |
|---|---|
| ① | Azure ポータル (https://portal.azure.com) にサインイン |
| ② | 左メニュー > 「リソースグループ」 > 「+ 追加」 |
| ③ | 名前 rg-functions-demo、リージョンは開発・本番で統一(例: japaneast) |
| ④ | 「確認および作成」 → 「作成」 |
リソースグループは Function App、Storage アカウント、Cosmos DB などをまとめて管理できる単位です。
ローカル開発環境の構築
以下のツールが すべて必須 です。OS ごとのインストールコマンドを併記していますので、そのままターミナルに貼り付けて実行してください。
| ツール | 用途 |
|---|---|
| Azure CLI | Azure リソースの作成・管理、認証 |
| Azure Functions Core Tools | func コマンドでローカルサーバー起動、デプロイ |
| Node.js(LTS)/Python 3.10+ | Function の実行ランタイム |
| Visual Studio Code (VS Code) | エディタ & デバッグ UI |
| Azure Functions 拡張機能 | テンプレート生成・デプロイ操作を GUI 化 |
2‑1. Azure CLI
| OS | コマンド例 |
|---|---|
| Windows | winget install --id Microsoft.AzureCLI |
| macOS | brew update && brew install azure-cli |
| Ubuntu | curl -sL https://aka.ms/InstallAzureCLIDeb \| sudo bash |
インストール後に次を実行し、バージョンと認証が正しく行えることを確認します。
|
1 2 3 4 |
az version # バージョン情報の表示 az login # ブラウザでサインイン az account list # 利用可能なサブスクリプションが一覧になる |
2‑2. Functions Core Tools(v4 系)
2024 年時点で推奨されている Functions Runtime v4 に対応した最新の Core Tools をインストールします。
|
1 2 3 |
npm i -g azure-functions-core-tools@4 --unsafe-perm true func --version # 例: 4.0.5179 |
※バージョン番号は執筆時点の最新版です。
@latestに置き換えても構いません。
2‑3. ランタイム(Node.js / Python)
| OS | Node.js (LTS) | Python |
|---|---|---|
| Windows | winget install OpenJS.Nodejs または公式インストーラ |
choco install python --version=3.10 |
| macOS | brew install node@18 |
brew install python@3.10 |
| Ubuntu | sudo apt-get update && sudo apt-get install -y nodejs npm |
sudo apt-get install -y python3 python3-venv |
備考
Azure Functions がサポートするバージョンは「Node.js 18」または「Python 3.10 以上」です。インストールしたバージョンがこれらと合致しているかnode -v、python3 --versionで確認してください。
2‑4. VS Code と拡張機能
- VS Code のダウンロード: https://code.visualstudio.com/
- 拡張インストール(VS Code 内の Marketplace)
- 「Azure Functions」
- 「Azure Account」
インストール後、左側に Azure アイコンが表示され、サブスクリプション選択や Function App のデプロイ操作が GUI で行えるようになります。
Function App プロジェクトの作成とローカル実行
3‑1. プロジェクト雛形の生成
|
1 2 3 4 5 6 |
# 作業ディレクトリへ移動(例: ~/projects) mkdir func-node-demo && cd func-node-demo # Node.js 用プロジェクトを初期化 func init . --worker-runtime node # Python の場合は --worker-runtime python |
3‑2. 関数テンプレートの作成
|
1 2 3 |
# HTTP トリガー関数(名前は HttpGetFunction とする) func new --template "HTTP trigger" --name HttpGetFunction |
生成されたディレクトリ構造(Node.js の例):
|
1 2 3 4 5 6 |
HttpGetFunction/ │ function.json │ index.js local.settings.json ← 環境変数・接続文字列の管理ファイル host.json |
3‑3. local.settings.json の設定
|
1 2 3 4 5 6 7 8 9 |
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "<ストレージ接続文字列>", "FUNCTIONS_WORKER_RUNTIME": "node", "MY_SECRET": "@Microsoft.KeyVault(SecretUri=https://mykv.vault.azure.net/secrets/my-secret/)" } } |
- ローカル開発では
IsEncryptedをfalseにし、実際の接続文字列は Azure ポータルで作成した Storage アカウントから取得してください。 - 本番環境では Azure が自動的に暗号化しますが、機密情報は Key Vault 参照で管理することを推奨します。
3‑4. ローカルサーバーの起動とデバッグ
|
1 2 |
func start |
ターミナルに次のような出力が表示されれば成功です。
|
1 2 |
Functions: [HttpGetFunction] started (HTTP Trigger) |
VS Code のデバッガ(F5)でブレークポイントを設定すれば、リクエスト受信時にコードが停止し、変数の中身やスタックトレースをリアルタイムで確認できます。
Node.js と Python のサンプル関数(ハンズオン)
4‑1. Node.js(JavaScript)版
HttpGetFunction/index.js
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
module.exports = async function (context, req) { context.log('HTTP trigger received a request.'); const name = req.query.name || (req.body && req.body.name); if (name) { // デバッグ時はここにブレークポイントを設定 context.res = { status: 200, body: { message: `Hello, ${name}!` }, headers: { "Content-Type": "application/json" } }; } else { context.res = { status: 400, body: { error: "Please provide a name via query string or request body." }, headers: { "Content-Type": "application/json" } }; } }; |
動作確認(ローカル)
|
1 2 3 |
curl "http://localhost:7071/api/HttpGetFunction?name=Azure" # => {"message":"Hello, Azure!"} |
4‑2. Python(3.10)版
HttpGetFunction/__init__.py
|
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 |
import logging import json import azure.functions as func def main(req: func.HttpRequest) -> func.HttpResponse: logging.info('Python HTTP trigger received a request.') try: req_body = req.get_json() except ValueError: req_body = {} name = req.params.get('name') or req_body.get('name') if name: # デバッグ時はここにブレークポイントを設定 return func.HttpResponse( json.dumps({"message": f"Hello, {name}!"}), status_code=200, mimetype="application/json" ) else: return func.HttpResponse( json.dumps({"error": "Please provide a name."}), status_code=400, mimetype="application/json" ) |
動作確認(POST)
|
1 2 3 4 5 |
curl -X POST http://localhost:7071/api/HttpGetFunction \ -H "Content-Type: application/json" \ -d '{"name":"Azure"}' # => {"message":"Hello, Azure!"} |
Azure へのデプロイと CI/CD パイプライン
5‑1. VS Code からのワンクリックデプロイ
- 左側メニュー → Azure アイコン → 「Functions」→「+」で新規 Function App を作成(ランタイムは
nodeまたはpython、プランは Consumption が手軽)。 - プロジェクトエクスプローラーで対象フォルダーを右クリック → Deploy to Function App…。
- 作成した Function App 名を選択するとビルド・アップロードが自動的に実行されます。
デプロイ完了後、ポータルの「Function」ページからエンドポイント URL を取得し、外部から呼び出すことができます。
5‑2. CLI でのデプロイ手順
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# 1) Function App がまだ無い場合は作成 az group create --name rg-functions-demo --location japaneast az storage account create \ --name funcstoragedemo$(date +%s) \ --resource-group rg-functions-demo \ --location japaneast \ --sku Standard_LRS \ --kind StorageV2 az functionapp create \ --resource-group rg-functions-demo \ --consumption-plan-location japaneast \ --runtime node \ # python の場合は --runtime python --functions-version 4 \ --name func-node-demo \ --storage-account funcstoragedemo$(date +%s) # 2) デプロイ実行 func azure functionapp publish func-node-demo |
5‑3. GitHub Actions による CI/CD(完全自動化)
.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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
name: Azure Functions CI/CD on: push: branches: [ main ] pull_request: types: [ opened, synchronize, reopened ] jobs: build-test-deploy: runs-on: ubuntu-latest permissions: contents: read id-token: write # OIDC 用 env: FUNC_APP_NAME: func-node-demo RESOURCE_GROUP: rg-functions-demo steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set up Node.js (for both app & tests) uses: actions/setup-node@v4 with: node-version: '18.x' - name: Install Azure Functions Core Tools run: | npm i -g azure-functions-core-tools@4 --unsafe-perm true - name: Restore project dependencies working-directory: ./func-node-demo run: npm ci - name: Run unit tests (Jest) working-directory: ./func-node-demo run: npm test # 事前に jest が設定されていることが前提 - name: Azure login with OIDC uses: azure/login@v2 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - name: Deploy to Azure Functions run: | func azure functionapp publish ${{ env.FUNC_APP_NAME }} --javascript |
ポイント
| 項目 | 内容 |
|---|---|
| 認証方式 | OIDC(GitHub の azure/login アクション)でシークレット管理不要 |
| テスト実行 | プルリクエスト時に自動テストが走り、失敗すればデプロイはスキップ |
| 環境変数 | Function App 名やリソースグループは env で一元管理し、他のジョブでも再利用可能 |
他サービスとの統合・本番運用ベストプラクティス
6‑1. Azure Storage Blob の活用例(Node.js)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
const { BlobServiceClient } = require("@azure/storage-blob"); module.exports = async function (context, req) { const connStr = process.env.AzureWebJobsStorage; const blobService = BlobServiceClient.fromConnectionString(connStr); const container = blobService.getContainerClient("samples"); await container.createIfNotExists(); const blockBlob = container.getBlockBlobClient("hello.txt"); await blockBlob.uploadData(Buffer.from("Hello Azure!")); context.res = { status: 200, body: "File uploaded to Blob storage." }; }; |
AzureWebJobsStorageは Function が自動的にバインドするストレージアカウントです。別途接続文字列を管理する必要はありません。
6‑2. Cosmos DB(SQL API)への書き込み例(Python)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import os, json, logging, azure.functions as func from azure.cosmos import CosmosClient def main(req: func.HttpRequest) -> func.HttpResponse: client = CosmosClient( os.getenv("COSMOS_ENDPOINT"), credential=os.getenv("COSMOS_KEY") ) db = client.get_database_client("DemoDB") container = db.get_container_client("Items") try: item = req.get_json() except ValueError: return func.HttpResponse(json.dumps({"error": "Invalid JSON"}), status_code=400) container.create_item(body=item) return func.HttpResponse(json.dumps({"status": "saved"}), mimetype="application/json") |
COSMOS_ENDPOINTとCOSMOS_KEYは Key Vault 参照で取得することが推奨されます(例:"@Microsoft.KeyVault(SecretUri=...)")。
6‑3. Event Grid によるイベント駆動連携
|
1 2 3 4 5 6 7 |
# Function App に対して Storage の「Blob 作成」イベントを購読 az eventgrid event-subscription create \ --resource-id $(az functionapp show -g rg-functions-demo -n func-node-demo --query id -o tsv) \ --name storage-blob-created \ --endpoint-type azurefunction \ --endpoint "/subscriptions/${SUB_ID}/resourceGroups/rg-functions-demo/providers/Microsoft.Web/sites/func-node-demo/functions/HttpGetFunction" |
- イベントが発生すると自動的に対象 Function がトリガーされ、バックエンド処理を分散させられます。
6‑4. 本番運用のチェックリスト
| カテゴリ | 推奨設定・対策 |
|---|---|
| プラン選択 | 開発は Consumption、本番はスロットが必要なら Premium(vCPU とメモリ保証)または Dedicated を検討 |
| ステージングデプロイ | デプロイスロット staging を作成し、テスト完了後に swap で本番へ移行 |
| 監視・ログ | Application Insights を有効化し、host.json に "logging": {"applicationInsights": { "samplingSettings": { "isEnabled": true }}} を追加 |
| スケーリング | HTTP トリガーは自動スケール(最大 200 インスタンス)を利用。Cosmos DB の RU は実測に合わせて調整 |
| 再試行・デッドレターキュー | function.json に "retry": {"strategy":"exponentialBackoff","maxRetryCount":5}、失敗時は Azure Storage Queue へ送る設定を追加 |
| セキュリティ | Managed Identity を有効化し、Key Vault のシークレットに対するアクセス権のみ付与。IP 制限や VNet 統合も検討 |
| バックアップ | Function App 設定は az functionapp config backup create でスケジュールバックアップを取得 |
まとめ
- 無料試用枠は $200 クレジットが 30 日間、12 カ月の常時無料サービスは限定的です。
- 必要なツール(Azure CLI・Core Tools・Node.js/Python・VS Code)をインストールし、環境変数や Key Vault の活用方法を理解すれば、ローカル開発がスムーズに始められます。
func init→func new→func startの流れでプロジェクト作成・デバッグが完結し、VS Code デバッガでブレークポイントを自由に設定可能です。- サンプルコード(Node.js / Python)をそのままコピーして動かすだけで、HTTP GET/POST の基本的なハンドリングが体験できます。
- VS Code の UI デプロイ、CLI デプロイ、GitHub Actions による CI/CD いずれもサポートしているので、チーム開発や本番運用に合わせて選択してください。
- Blob、Cosmos DB、Event Grid との連携例と、本番で重視すべきプラン・スロット・モニタリング・セキュリティ設定を網羅しました。
このハンドブック通りに進めれば、無料試用枠の範囲内で Azure Functions の開発・テスト・本番デプロイまで一貫して実施できるはずです。ぜひ手順を踏んで実装し、サーバーレスアーキテクチャの利点を体感してください。
本稿の情報は 2024/10 時点の公式ドキュメントと Microsoft のベストプラクティスに基づいています。Azure のサービスは随時更新されるため、最新情報は必ず Azure ポータルまたは公式サイトで確認してください。