Skip to content
This repository has been archived by the owner on Jan 10, 2024. It is now read-only.

ryomatcu/azure-functions-hands-on

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 

Repository files navigation

Azure Functions ハンズオン

2018/03/24 JAZUG福岡(ふくあず) 2018#2 で実施するハンズオンの手順書です。
イベントページ:https://fukuazu.connpass.com/event/81210/

Azure Functionsの概要については、こちらをご覧ください。

今回作成するもの

  • HTTPリクエストの内容をもとに、以下のアクションを行う
    • HTTPレスポンスを返す
    • メールを送信する
    • Slackへポストする

必要なもの

用語集

手順中に利用する略称などは以下の通りです。知らない単語が出てきたらここを参照ください。

  • VSCode
    • Visual Studio Code

事前手順

VSCodeの拡張機能インストール手順

VSCodeメニューの一番下にある四角いアイコンを選択します。

Open VSCode Menu

検索エリアに利用する「Azure Account」や「Azure Functions」を入力し、表示された候補からそれぞれのエクステンションを選択します。

Search VSCode Extension

表示されたエクステンション詳細から「Install」を選択してインストールします。

Install VSCode Extension

「Reload」ボタンが表示されたら、そちらを選択してVSCodeを再起動したら、拡張機能のインストールは完了です。
他の拡張機能も便利なものがたくさんありますので、是非活用してください!

Reload VSCode

ハンズオン開始!

Functionsを作成するアカウントでVSCodeにサインイン

諸々の環境を整備したVSCodeにAzureアカウントでサインインします。 コマンドパレットを開き(Shift + Command + P)「azure」と入力し、「Azure: Sign In」を選択します。

Open Azure Sign-in

URLとcodeが表示されるので、「Copy & Open」を選択します。

Copy Azure Sign-in

ブラウザが開きますので、コピーされたcodeを入力し、アカウントを選択します。

Device Login Azure Sign-in

成功するとVSCodeのステータスバーにアカウントが表示されます。

Success Azure Sign-in

Functions Appを作成

コマンドパレットを開き「func」と入力し、「Azure Functions: Create New Project」を選択します。

Open Create New Project

プロジェクトディレクトリを選択すると、言語の選択になるので、「Javascript」を選択します。

Select Language New Project

Functionを作成

コマンドパレットを開き「func」と入力し、「Azure Functions: Create Function」を選択します。

Open Create New Function

プロジェクトのディレクトリを選択します。

Select Project Directory

プロジェクトのテンプレートを選択します。
今回は「HTTP trigger with parameters」を選択します。

Select Function Template

任意の関数名を設定します。
ここではデフォルトのまま「HttpTriggerWithParametersJS」と名付けています。

Input Function Name

最後に認証レベルを「Function」に設定します。

Select Authorization Level

デプロイ

作成されたFunctionをデプロイします。
コマンドパレットを開き「func」と入力し、「Azure Functions: Deploy to Function App」を選択します。

Deploy Function

デプロイする対象のディレクトリを選択します。

Deploy Function

サブスクリプションを選択します。

Deploy Function

まだAzure上にはFunctionAppがないので、新規で作成します。

Deploy Function

ここでは「fukuazu-sample」という名前にします。
注意書きにあるようにこの名前がURLの一部となりますので、一意な名前にする必要があります。

Deploy Function

リソースグループを選択します。なければここで作成します。

Deploy Function

ここでは「fukuazusample」という名前で新規作成します。

Deploy Function

デプロイするロケーションを選択します。

Deploy Function

ストレージアカウントを選択します。
既存のものでもいいですし、新規作成でもOKです。

Deploy Function

ここでは「fukuazusample」という名前で新規作成します。

Deploy Function

本当にデプロイしてもいいか聞かれますので、「Yes」を選択します。

Deploy Function

テストリクエスト

VSCode内のEXPLORERにある「AZURE FUNCTIONS」拡張から作成したFunctionを右クリックし、FunctionのURLをコピーします。

Copy Function Url

以下のようなURLになるので、「HttpTriggerWithParametersJS」部分を「HttpTriggerJS/name/hoge」と書き換え、ブラウザでアクセスします。

https://<FunctionApp名>.azurewebsites.net/api/HttpTriggerWithParametersJS?code=<リクエストキー>

https://<FunctionApp名>.azurewebsites.net/api/HttpTriggerJS/name/hoge?code=<リクエストキー>

「Hello hoge」とブラウザに表示されれば成功です。

Test Function Url

バージョン2(メール送信対応)への修正

HTTPレスポンスを返すFunctionが出来ましたので、次はメール送信が出来るように変更します。

HttpTriggerWithParametersJS/function.json を開き、以下の設定を bindings 内に追加します。

    {
      "type": "sendGrid",
      "name": "message",
      "apiKey": "SENDGRID_APIKEY",
      "direction": "out"
    }

VSCode内の「AZURE FUNCTIONS」拡張にある「Application Settings」を右クリックし、「Add new setting...」を選択します。

Select Add new setting

Key名を「SENDGRID_APIKEY」、Valueはハンズオン時に公開するものを入力します。

Add new Key

Add new Value

HttpTriggerWithParametersJS/index.js を開き、以下のように修正します。
toのemail部分には受信可能な自分のメールアドレスを入力します。

module.exports = function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');

    context.bindings.message = {
        personalizations: [
          { to: [ { email: "<受信可能なメールアドレス>" } ] }
        ],
        subject: "[Fukuazu Hands-on] Sample Mail",
        content:[ 
            { 
                type: "text/plain",
                value: "Your name is [" + req.params.name + "]." 
            }
        ],
        from: { email: "azure_f87070529aadda227182b98034bf05f3@azure.com" }
    };

    context.res = {
        // status: 200, /* Defaults to 200 */
        body: "Hello " + req.params.name
    };
    context.done();
};

デプロイ

修正したFunctionをデプロイします。
コマンドパレットを開き「func」と入力し、「Azure Functions: Deploy to Function App」を選択し、先程と同様にデプロイを行います。

リクエスト

先程リクエストしたように、今度は hogehoge2 としてリクエストします。

https://<FunctionApp名>.azurewebsites.net/api/HttpTriggerJS/name/hoge2?code=<リクエストキー>

しばらくすると宛先として設定したメールアドレスへメールが届きます。

Test Request

バージョン3(Slack対応)への修正

FunctionsからSendGridを経由してメール送信が出来るようになりました。
今度はSlackへメッセージをポストしてみます。

SlackのIncoming Webhookを利用するため、FunctionsからHTTPリクエストを行う必要があります。
今回は、NodeJSでHTTPリクエストが行えるsuperagentを利用します。

ターミナルで HttpTriggerWithParametersJS ディレクトリへ移動します。

npm init を実行し、 package.json を作成します。

$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (httptriggerwithparametersjs)
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to /path/to/Project/HttpTriggerWithParametersJS/package.json:

{
  "name": "httptriggerwithparametersjs",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}


Is this ok? (yes) yes

作成された package.json に以下の通りsuperagentの記述を追加します。

  "dependencies": {
    "superagent": "^3.8.1"
  }

再度、ターミナルに戻り npm install を実行します。

$ npm install
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN httptriggerwithparametersjs@1.0.0 No description
npm WARN httptriggerwithparametersjs@1.0.0 No repository field.

added 24 packages in 3.589s

これで、superagentを利用する準備が出来ました。

HttpTriggerWithParametersJS/index.js を開き、以下のように修正します。

var request = require('superagent');

module.exports = function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');

    request
    .post("<Slackポスト用URL>")
    .set('Content-Type', 'application/json')
    .send({text: "Your name is [" + req.params.name + "]."})
    .end(function(res){
        // context.log(res.message);

        context.bindings.message = {
            personalizations: [
              { to: [ { email: "<受信可能なメールアドレス>" } ] }
            ],
            subject: "[Fukuazu Hands-on] Sample Mail",
            content:[ 
                { 
                    type: "text/plain",
                    value: "Your name is [" + req.params.name + "]." 
                }
            ],
            from: { email: "azure_f87070529aadda227182b98034bf05f3@azure.com" }
        };
    
        context.res = {
            // status: 200, /* Defaults to 200 */
            body: "Hello " + req.params.name
        };
        context.done();    
    });
};

HttpTriggerWithParametersJS/function.json はこのようになります。
バージョン2からの変更はありません。

{
  "disabled": false,
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "route": "HttpTriggerJS/name/{name}",
      "methods": [
        "get"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    },
    {
      "type": "sendGrid",
      "name": "message",
      "apiKey": "SENDGRID_APIKEY",
      "direction": "out"
    }
  ]
}

デプロイ

修正したFunctionをデプロイします。
コマンドパレットを開き「func」と入力し、「Azure Functions: Deploy to Function App」を選択し、先程と同様にデプロイを行います。

リクエスト

先程リクエストしたように、今度は hoge2hoge3 としてリクエストします。

https://<FunctionApp名>.azurewebsites.net/api/HttpTriggerJS/name/hoge3?code=<リクエストキー>

Slackへメッセージが届きます。

Test Request

おまけ:Function Appの実行履歴をApplication Insightsで確認してみよう

Application Insightsの作成

VSCode内の「AZURE FUNCTIONS」拡張にある作成した項目を右クリックし、「Open In Portal」を選択します。

Open In Portal

Azureのポータル画面が表示されたら「プラットフォーム機能」「すべての設定」と進みます。

Function App Settings

概要の「Application Insights」を選択し、下記のように設定しOKボタンをクリックします。

  • 新しいリソースの作成
  • 新しいリソースの名前:変更しない(ただしエラーが表示されていれば別の名前に変更する)
  • 場所:米国東部

Create Application Insights Resource

「Application Insightsでさらに表示」をクリックし、Application Insightsの画面に移ります。
メニューから「プロパティ」を開き、インストルメンテーションキーをコピーします。
※テキストファイル等に控えておきましょう。

Copy Instrumentation Key

Application Insightsの作成は以上で終了です。Azureのポータル画面は開いたままにしておきましょう。

環境変数の追加

VSCode内の「AZURE FUNCTIONS」拡張にある「Application Settings」を右クリックし、「Add new setting...」を選択します。
Key名を「APPINSIGHTS_INSTRUMENTATIONKEY」、Valueにインストルメンテーションキーを入力します。

Application Insightsを利用するようにコードを変更する

ターミナルを開き npm install --save applicationinsights を入力します。
HttpTriggerWithParametersJS/index.js を開き、以下のように修正します。

var request = require('superagent');

var appInsights = require('applicationinsights');
appInsights.setup(process.env['APPINSIGHTS_INSTRUMENTATIONKEY']).start();

module.exports = function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');

    request
    .post("<Slackポスト用URL>")
    .set('Content-Type', 'application/json')
    .send({text: "Your name is [" + req.params.name + "]."})
    .end(function(res){
        // context.log(res.message);

        context.bindings.message = {
            personalizations: [
              { to: [ { email: "<受信可能なメールアドレス>" } ] }
            ],
            subject: "[Fukuazu Hands-on] Sample Mail",
            content:[ 
                { 
                    type: "text/plain",
                    value: "Your name is [" + req.params.name + "]." 
                }
            ],
            from: { email: "azure_f87070529aadda227182b98034bf05f3@azure.com" }
        };
    
        context.res = {
            // status: 200, /* Defaults to 200 */
            body: "Hello " + req.params.name
        };
        context.done();    
    });
};

上記の修正が済んだら、再度Azureにデプロイを行いましょう。

Application Insightsの結果を確認してみよう

デプロイ後、何度かFunction Appを実行したうえで、Application Insightsの画面にて「検索」をクリックし、動作結果を確認することができます。

Search Application Insights

About

2018/03/24にJAZUG福岡(ふくあず) 2018#2 で実施するハンズオンの手順書です

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published