今日から何度かに分けてAzure Functionsに関して書いていきます。
今日の記事は3分ぐらいで読み切れます。
対象となる方は、これからAzure Functionsやってみようかな、サーバーレース環境ってどんなもんだろうと思っている方々でC#の知識をある程度もっている方々となります。
Azure Functions?
Azure FunctionsとはVM、Webappなどの個サーバーを所持することなく、スクリプトやコードを起動することができます。最近よく聞く「サーバーレス」っていうやつです。
まずは
いろいろ説明するよりもまずは使ってみましょう。「いろいろ」部分はこちらをご参照ください。https://docs.microsoft.com/ja-jp/azure/azure-functions/
VS2017から新しいプロジェクト作成
Visual Studio を開いて新しいプロジェクトを作成、Azure Functionsを選択します。
次に、Functionsのタイプを選択し、ストレージアカウントとアクセス権限を選択します。
Function1.cs
「OK」をクリックすると、自動でFunction1.cs("Hello" + Name を返すAPI
)が生成されます。
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
namespace FunctionApp1
{
public static class Function1
{
[FunctionName("Function1")]
public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log)
{
log.Info("C# HTTP trigger function processed a request.");
// parse query parameter
string name = req.GetQueryNameValuePairs()
.FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
.Value;
if (name == null)
{
// Get request body
dynamic data = await req.Content.ReadAsAsync<object>();
name = data?.name;
}
return name == null
? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
: req.CreateResponse(HttpStatusCode.OK, "Hello " + name);
}
}
}
Run - Endpointの取得
早速ローカル環境で起動してみます。FunctionApp1プレイボタンをクリック
Run - nameを指定
http://localhost:7071/api/Function1 がendpointであると出てきました。.
指定されたエンドポイントのパラメターでname値を渡してみます。 http://localhost:7071/api/Function1?name=Sho
APIを介して値が生成されました。 下記でFunctionsが動いている内容を確認することができます。
公開
次はFunctionsを公開して一般のユーザーが使えるようにします。
プロジェクトを右クリックして発行を選択
新規に作成します。
発行されたURLをたたいてみます。「Functions App は稼働しているよ」とのことで。次はパラメターを指定してみます。
では試しに
https://functionapp120190322072250.azurewebsites.net/api/Function1?name=Sho
いけましたね。これで、Azure Functionsの本番化ができました。