LoginSignup
2
1

More than 1 year has passed since last update.

Microsoft Docs「Go でサーバーレス アプリを構築する」の補足情報

Last updated at Posted at 2022-01-03

はじめに

Microsoft Docsの「Go でサーバーレス アプリを構築する」を使ってGo入門ハンズオンを開催しようとしているのですが、誤植があったり情報が足りなかったりと、このまま使用するのは難しいため、補足情報を用意しました。

動作確認はmacOSで行いましたが、WindowsとLinuxでも大丈夫なように記述しています。

ローカル環境で動作させる分には、2021年11月以降の各製品のバージョンに対応できています。

補足情報

はじめに

補足情報はありません。

カスタム ハンドラー

補足情報はありません。

Web アプリ

REST API を Go で構築する

・ライブラリをインポートする。

ソースコードにて、各ライブラリーの最後のカンマを削除。

誤:

import (
   "fmt",
   "log",
   "net/http"
)

正:

import (
   "fmt"
   "log"
   "net/http"
)

・要求を管理する。

ソースコードにて、文章に合わせて関数名を「handleRoute」に、第1引数の型のパッケージとインターフェースの区切り文字をコロンからカンマに、第2引数を参照型(型の前に*を付ける)に、それぞれ修正。引数と型を区切っていたコロンを削除。

誤:

func handleRequest(w: http:ResponseWriter, r: http.Request) {

正:

func handleRoute(w http.ResponseWriter, r *http.Request) {

Azure Functions アプリを作成する

・Visual Studio Code をインストールする

公式サイトからダウンロードしてインストールします。

・Azure Functions 用の Visual Studio Code 拡張機能をインストールする。

Visual Studio Codeを使ってインストールします。

  1. Visual Studio Codeを起動。
  2. 画面左側のアイコン列から「Extentions」(四角が4つ)アイコンをクリック。
  3. 「Search Extentions in Marketplace」欄に「Azure Functions」と入力して、欄下に一覧表示された「Azure Functions」の「Install」をクリック。

・Azure Functions Core Tools をインストールする。

2021年11月にAzure Functionsのバージョン 4 が正式リリースになりました。

Azure/azure-functions-core-tools サイトから「v4」をインストールします。

macOSの場合、インストールに brew コマンドが必要となります。

Visual Studio Code を使用して Functions アプリをスキャフォールディングする

プロジェクト生成後のファイルが異なっている。(proxies.json ファイルはない)

誤:

  • host.json
  • local.setting.json
  • proxies.json
  • function.json

正:

  • host.json
  • local.setting.json
  • function.json

プロジェクトを構成する

・既定の実行可能パスを構成する。

.json ファイル名が間違っている。

誤:

プロジェクト ルートの function.json ファイルを探します。

正:

プロジェクト ルートの host.json ファイルを探します。

演習 - カスタム ハンドラーを使用してアプリを構築する

アプリをスキャフォールディングする

スキャフォールディング後のファイルが異なっている。(proxies.json ファイルはない)

誤:

hello/
  function.json
.funcignore
.gitignore
host.json
local.settings.json
proxies.json

正:

hello/
  function.json
.funcignore
.gitignore
host.json
local.settings.json

アプリを作成する

2. server.go の内容を次のようにします。

Go 1.16からio/ioutilパッケージの使用が非推奨となったため、新しいコーディングとしてioパッケージに変更。

Go 1.16以前:

 "io/ioutil"

Go 1.17以降:

 "io"

5. import ステートメントと main() 関数の間に、次のコードを追加します。

Go 1.16からio/ioutilパッケージの使用が非推奨となったため、新しいコーディングとしてioパッケージに変更。

Go 1.16以前:

body, _ := ioutil.ReadAll(r.Body)

Go 1.17以降:

body, _ := io.ReadAll(r.Body)

アプリを実行する

Visual Studio Code で server.go ファイルを開いている時、ターミナル上で server.go ファイルを書き換えると、Visual Studio Code の server.go ファイルの1行目の「package main」に波下線が表示される。進めていくには問題ないが、以下の対応を行うことで解消できます。

1. の前に追加

ターミナル にて、プロジェクト ルートのひとつ上の階層に移動して go mod init [プロジェクト名] を実行して、プロジェクト ルートに戻ります。

次の例では、プロジェクト ルートは「/Users/luigi/af01」、ひとつ上の階層は「/Users/luigi」、プロジェクト名は「af01」です。

% pwd
/Users/luigi/af01

% cd ..

% pwd
/Users/luigi

% go mod init af01 
go: creating new go.mod: module af01
go: to add module requirements and sums:
	go mod tidy

% cd ad01

% pwd
/Users/luigi/af01

ターミナル にて、プロジェクト ルートで go fmt server.go を実行すると、

% go fmt server.go

ソースコードが自動整形されます。その結果は Visual Studio Code で開いている server.go ファイルに即反映されます。

2. と 3. の間に追加

extensionBundle 要素を削除します。

  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[2.*, 3.0.0)"
  },

キュー トリガー

ローカルでの開発

2. エミュレーター機能を使用するには、コマンド パレットで ... を選択して開始します。

機能名の誤りを修正。(Azure → Azurite)

誤:

[Azure: Start Queue Service](Azure: キュー サービスの開始)

正:

[Azurite: Start Queue Service](Azurite: キュー サービスの開始)

演習 - キュー メッセージを処理する

注意

Azurite 拡張機能をダウンロード

Visual Studio Codeを使ってインストールします。

  1. Visual Studio Codeを起動。
  2. 画面左側のアイコン列から「Extentions」(四角が4つ)アイコンをクリック。
  3. 「Search Extentions in Marketplace」欄に「Azurite」と入力して、欄下に一覧表示された「Azurite」の「Install」をクリック。

私の場合、Azurite 機能拡張では上手くいかなかったため、Azurite CLIをインストールしました。

Azurite インストールには、Node.jsが必要になりますので、まだの場合はインストールします。

ターミナルで、npm install -g azurite コマンドを実行します。

% npm install -g azurite

Azure Storage Explorerをダウンロード

製品サイトからダウンロードしてインストールします。

Azure Functions Core Tools をダウンロード

Azure Functions Core Tools は、前回の演習でインストール済み。

キューを含めた拡張機能バンドルをインストールします。Goはネイティブ サポート外のため、手動でインストールします。

ターミナルで、.NET SDK のバージョンが 3.1 以上であることを確認します。

% dotnet --list-sdks

.NET SDK がインストールされていない場合、公式サイトから最新バージョンをダウンロードします。

[参考] 古いバージョンのSDKを削除する場合

プロジェクト ルートの host.json ファイルから、extensionBundle 要素を削除します。

  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[2.*, 3.0.0)"
  },

ターミナルで、プロジェクト ルートから func extensions install コマンドを実行します。

% func extensions install

アプリをスキャフォールディングする

8. ルートで、server.go という名前のファイルを作成します。

プロジェクト生成後のファイルが異なっている。(proxies.json ファイルはない)

誤:

queueTrigger/
  function.json
.funcignore
.gitignore
host.json
local.settings.json
proxies.json
server.go

正:

queueTrigger/
  function.json
.funcignore
.gitignore
host.json
local.settings.json
server.go

アプリを作成する

1. server.go ファイルを開き、次のコードを追加します。

encoding/jsonパッケージの最後のカンマを、未使用のためio/ioutilパッケージを、それぞれ削除。(残したままだと go build でエラーになる)

誤:

  "encoding/json",
  "fmt"
  "io/ioutil"

正:

  "encoding/json"
  "fmt"

3. queueHandler() メソッドを見つけ、次のように更新します。

受信する変数の名前を型を修正。

誤:

  var reqData map[string]interface{}
  json.Unmarshal(invokeRequest.Data["queueItem"], &reqData)

正:

  var parsedMessage string
  json.Unmarshal(invokeRequest.Data["queueItem"], &parsedMessage)

アプリを実行する

1. の前に追加

Azurite 機能拡張からの実行で上手く動作しない場合、ターミナルで、Azurite のキューサービスを実行します。

% azurite --queueHost 127.0.0.1

さいごに

途中だったり、実際にハンズオンを行なうなどして、気付きがあった際には随時修正して行きます。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1