Perl Hackers Hub

第54回サーバレスでもPerl―Microsoft Azure Functionsで動かそう!(2)

前回の(1)こちらから。

今回のシステム構成

今回は、HTTPリクエストで指定された画像URLから人物の顔を認識し、性別と年齢の判定結果をJSONで返すシステムを作ります。

ここからは、Azureのアカウントを取得している前提で説明します。Azureのアカウントをお持ちではない場合、無料アカウントを取得しておいてください。

システム構成は図3となります。AzureではFunctionsやFace APIなどの各サービスをシステムに組み込むとき、それらを指してリソースと呼びます。たとえばリソースとしてのFunctionsを指す場合、Functionsリソースと呼びます。Functions、Face APIについては次項以降で説明します。

図3 システム構成
図3 システム構成

また、Azureでは複数のリソースを内包したプロジェクト単位の入れ物として、リソースグループがあります。リソースどうしはリソースグループを越えて相互にアクセスできます図4⁠。

図4 リソースとリソースグループ
図4 リソースとリソースグループ

Functions─⁠─ プログラム実行部分を担当

今回Functionsは、HTTPリクエストを受け関数を実行し、HTTPレスポンスを返す部分を担当します。クエリパラメータにimageという名前で画像URLが渡されることを期待します。

関数で利用されるPerlスクリプトでは、後述するFace APIに対して画像URLを引き渡し、顔認識の結果を受け取ります。そして受け取ったデータを整形し、クライアントへのレスポンスとして出力します。

Face API ─⁠─ 顔認識を担当

Face APIは、Azure Cognitive Servicesで提供されるAPIの一つです。Azure Cognitive Serviceは、AIArtificial Intelligence人工知能)やデータサイエンスの恩恵を受けたアプリケーション向けに用意されたサービス群です。Face APIは次のことができます。

  • 画像から人物の顔に関する情報(年齢、性別、表情、座標、幅や高さなど)を抽出する
  • 2つの人物画像から、同一人物であるか否かを判断する
  • あらかじめ学習した人物を、画像から特定する

今回は簡単な例として、画像から人物の顔を認識し、年齢と性別を抽出する役割を担当します。

Azure CLI環境の準備

Azureの操作手段は、Azure Portalでブラウザから操作する方法と、Azure CLI v2(執筆時点ではv2.0.52)でターミナルから操作する方法があります。

どちらで操作しても同じ結果となりますが、AzurePortalは日々改善されており、ある日を境にレイアウトなどが変わる可能性があります。そこで本稿では、Azure CLI v2の利用を強く推奨します[1]⁠。

Azure CLIを利用するもう一つの大きなメリットは、リソース構成管理の自動化です。Azure CLIを使ったbashスクリプトを用意しておくと、スクリプトを起動するだけで毎回同じ構成を再現できます。Azure CLIをAnsible経由で利用することもできます。

Azure CLI v2のインストール

公式ドキュメントのインストール方法に沿って、Azure CLI v2をインストールします。

Windowsの場合、MSI形式のインストーラにしたがってインストールを進めてください。

macOSの場合、先にHomebrewをインストールしてから、次のコマンドでAzure CLIをインストールしてください。

macOSにおけるAzure CLIのインストール
$ brew update && brew install azure-cli

インストールが完了すると、ターミナルからazコマンドが利用可能となります。

azコマンドを実行
$ az
      /\
     /  \    _____  _ _   ___ _
    / /\ \  |_  / | | | \' __/ _\
   / ____ \  / /| |_| | | |  __/
  /_/    \_\/ ___|\__,_|_|  \___|


Welcome to the cool new Azure CLI!
(省略)
    vmss              : Manage groupings of virtual machin
es in an Azure Virtual Machine Scale Set
                       (VMSS).
   webapp             : Manage web apps.

英語版のみとなりますが、Azure CLIのコマンドリファレンスが公開されています。詳細な使い方はこちらを確認してください。

Azure CLIでAzureにログイン

Azure CLIでAzureを操作するためには、次のコマンドでAzureにログインする必要があります。

Azure CLIでAzureにログイン
$ az login

az loginを実行するとブラウザが開き、Azureアカウントでのログインを尋ねられます。アカウントとパスワードを入力してログインしてください。azでは処理成功時に、標準出力にJSONを出力します。ターミナルにJSONが出力されればログイン成功です。

Azureリソースの設定

それでは、図3で示したシステム構成をAzure上に設定します。

リソースグループの作成

始めにリソースグループを作成します。次のコマンドを実行すると、Azureの東日本リージョンにfacedetectリソースグループが作成されます。

東日本リージョンにリソースグループを作成
$ az group create --name face-detect --location japaneast

ストレージアカウントの作成

次はストレージアカウントを作成します。図3にはストレージアカウントが描かれていませんが、Functionsを動作させるために必要です。ストレージアカウントは、次のコマンドで作成できます。

ストレージアカウントの作成
$ az storage account create \
  --resource-group face-detect \
  --name facedetectstorage \
  --sku Standard_LRS

--resource-groupには先ほど作成したリソースグループ名を、--nameには新規作成するストレージアカウント名を指定します。--skuはStock Keeping Unitの略で、ここではストレージアカウントのパフォーマンスレベルとレプリケーションオプションの組み合わせを意味します。FunctionsではパフォーマンスレベルがStandardかつ、レプリケーションオプションがLRS(ローカル冗長ストレージ)の組み合わせだけが利用可能ですので、この組み合わせを意味するStandard_LRSを指定しておいてください。

Functionsリソースの作成

続いてFunctionsリソースを作成します。

Functionsリソースの作成
$ az functionapp create \
  --resource-group face-detect \
  --name face-detect-app1001 \
  --storage-account facedetectstorage \
  --consumption-plan-location japaneast

--resource-groupにはリソースグループ名を、--storage-accountにはストレージアカウント名を、--consumption-plan-locationにはリソースグループと同じリージョンを指定します。

重要なのは--nameです。ここにはリソース名を指定します。ここで指定した名前はhttps://リソース名.azurewebsites.net/の形式でURLに影響し、Azure全体でグローバルな名称となりますので、ほかと衝突しない名称に適宜置き換えてください。

ランタイムバージョンをv1に変更

できたばかりのFunctionsリソースは、ランタイムバージョンがv2ですのでv1に変更します。

ランタイムバージョンは、Functionsリソースのアプリケーション設定にある設定値FUNCTIONS_EXTENSION_VERSIONで定義されています。デフォルトでは~2となっていますので、~1に変更します。

Functionsリソースにおけるアプリケーション設定値の変更は、次のコマンドで行います。

Functionsリソースのランタイムバージョンをv1に変更する
$ az functionapp config appsettings set \
  --resource-group face-detect \
  --name face-detect-app1001 \
  --settings FUNCTIONS_EXTENSION_VERSION=~1

--resource-groupにはリソースグループ名を、--nameにはリソース名を指定します。

--settingsは設定値の変更内容です。ここではFUNCTIONS_EXTENSION_VERSION=~1を指定してください。

Face APIの設定

Face APIの設定では、Cognitive Servicesアカウントが必要です。

次のコマンドで、Cognitive Servicesアカウントの作成とFace APIの設定を行います。

Cognitive Servicesアカウントの作成とFace APIの設定
$ az cognitiveservices account create \
  --resource-group face-detect \
  --name face-detect-test \
  --sku F0 \
  --kind Face \
  --location eastus

--resource-groupにはリソースグループ名を、--nameにはCognitive Servicesアカウント名を指定します。--skuにはFace APIの価格プランを指定します。価格プランはF0(無料プラン)とS0(スタンダードプラン)を選ぶことができますが、ここでは無料プランのF0を指定します。--locationにはリソースグループと同じリージョンを指定します。

--kindがCognitive Serviceアカウントで利用するサービスの種類の設定です。今回はFace APIを利用したいのでFaceとします。

これで、Azureリソースの設定は完了です。

<続きの(3)こちら。>

WEB+DB PRESS

本誌最新号をチェック!
WEB+DB PRESS Vol.130

2022年8月24日発売
B5判/168ページ
定価1,628円
(本体1,480円+税10%)
ISBN978-4-297-13000-8

  • 特集1
    イミュータブルデータモデルで始める
    実践データモデリング

    業務の複雑さをシンプルに表現!
  • 特集2
    いまはじめるFlutter
    iOS/Android両対応アプリを開発してみよう
  • 特集3
    作って学ぶWeb3
    ブロックチェーン、スマートコントラクト、NFT

おすすめ記事

記事・ニュース一覧