CLIを使用してServerless関数を作成して管理する方法


私に従って、トピックや改善についてのご提案を取るに満足

There are many ways to create Serverless functions with Azure Functions. We can use the Portal, VS Code but also the terminal and a Cli tool called func. We will focus on the latter in this article, so be prepared to go full terminal :)


この記事では以下を説明します.

  • なぜ、なぜ私たちは、UIを持っているときに我々の関数を管理するためにCLIを使用しますか?

  • 何が、このCLIツール何を行うことができますか?

  • デモ、もちろん、我々はスピンのために我々のCLIツールを取り、それが正しく動作する方法を参照してくださいしたいですか?
  • 資源

  • Sign up for a free Azure account
    無制限のazure関数を作成するには、無料のazureアカウントが必要になります

  • 私が書いた記事のコレクション.NET + Serverlessと他の何か

  • ポータルと同様にVSコードのオーサリング
  • Core Tools Development
    我々は、あなたが使用できるすべての可能なオプションで表面をひっくり返しましたfunc CLI
  • Create a function app using Azure CLI
  • Install Azure CLI
    Azure CLIは非常に有能で、あなたがポータルで行うことができるすべては、端末からできることです
  • なぜCLI


    CLIを使いたい理由がたくさんあります.
    スクリプティング、より重要な理由の1つはおそらくci/cdプロセスで使用するスクリプトです.
    速度、速度は別の要因であるかもしれません、端末でコマンドを走らせる速度
    IDE/エディタagnostic、我々はすべての我々が使用するように好きな端末があります.時々我々がしたいことは、選択の我々のエディタでUIを通してすることができて、時々そうでありません


    始める前に、CLIをインストールしましょう.これはあなたの選択のOSに応じて少し異なります.

    インストール


    必要なものは何かazure-functions-core-tools . 以下はそれぞれのOSの指示です.
    マック
    brew tap azure/functions 
    brew install azure-functions-core-tools
    
    Windows
    npm i -g azure-functions-core-tools --unsafe-perm true
    
    Linux
    wget -q https://packages.microsoft.com/config/ubuntu/19.04/packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb
    

    Everything installed? Good :)


    FUNCの概要


    このCLIツールをインストールしましたfunc . ランfunc --help 端末では、私たちのために何ができるかを理解しようとしましょう.

    を、私たちはかなりの長い答えを得たので、ページでページを見てみましょう.上記のように一般的に動作するようにすることができます.

  • Azure、我々はリソースを管理することができます

  • 永続的な、これは私たちが今見ていないが、後の記事ではステキトフルServerless提供です

  • エクステンション、これは別の種類のバインディングをサポートしています

  • 関数は、これを作成し、実行するような関数の周りのアクションについてです

  • ホスト、ローカルで関数を実行する方法

  • Kubernetes、Kubernetesの聞いた?違う?それはあなたがコンテナを編成するために使用できるものです.まだ混乱?それはOKです、私はKubernetes

  • 設定は、我々は設定を管理することができるようにするには、データベースやアプリケーションを実行する必要がありますいくつかの他のキーへの接続文字列になる可能性があります

  • テンプレートを使用すると、関数を足し算したときに起動する必要があります.これはデータベースや誰かがHTTPエンドポイントを打つなどの変更かもしれません.
  • ランニングから得た他のページをチェックしましょうfunc --help
    我々は4つの異なった行動を得た.

  • 呼び出しでfunc start コードをビルドして実行します

  • 新しい、呼ぶことによってfunc new 我々は、我々が使用したいテンプレートを求められている関数の作成プロセスをトリガします

  • 呼び出しによってfunc init 我々は、我々は機能アプリのプロジェクトを作成することができますプロセスをトリガー、すべての機能は、このようなプロジェクトの中に住んでいる必要があります

  • このコマンドを呼び出すと、実行中の関数からログを取得することができます
  • 菅デモ


    それで、我々は我々のデモで成し遂げたいですか?さて、

  • プロジェクトを開始する必要があります.私たちは別のプログラミングプラットフォームのための足場をどうやっていくか

  • 足場の関数、もちろん、我々は足場機能をしたい.これには大きなウィザードがあります.

  • アプリケーションを実行すると、一度我々はすべての足場から、我々は我々のアプリを実行できるようにしましょう

  • Azure CLIを使用して、必要なリソースを作成し、関数app +関数をクラウドに展開します
  • プロジェクトを足場にする


    あなただけのプロジェクトを開始することができますfunc init NameOfProject しかし、これはデフォルトの労働者ランタイムを与えるでしょうdotnet . そのため、以下のように明示的に推奨します.

    上記のコマンドでfunc init MyNodeApp --worker-runtime dotnet それを作成します.ディレクトリ内のMyDotnetApp , 私たちの名前は同じ名前のディレクトリを作成します.
    その他の可能な値--worker-runtime are dotnet, node, python, powershell .

    機能を足場に入れる


    今、我々は決定した--worker-runtime そして、我々は我々のアプリの下で足場はスーツに従って、同じランタイムで作成される機能.
    関数を作成するには、入力してウィザードを起動しますfunc new , 以下のように:

    上で見ることができるように、私たちは、テンプレートの後に、我々の機能の名前を求められます.これは予想を作成するGet.cs ファイル.ここで起こることは実行時によって決まる.JavaScriptの場合は、ディレクトリを取得しますGetindex.js and function.json .
    だから私のGet.cs ですね.
    
    using System.IO;
    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Azure.WebJobs;
    using Microsoft.Azure.WebJobs.Extensions.Http;
    using Microsoft.AspNetCore.Http;
    using Microsoft.Extensions.Logging;
    using Newtonsoft.Json;
    
    namespace MyDotnetApp
    {
        public static class Get
        {
            [FunctionName("Get")]
            public static async Task<IActionResult> Run(
                [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
                ILogger log)
            {
                log.LogInformation("C# HTTP trigger function processed a request.");
    
                string name = req.Query["name"];
    
                string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
                dynamic data = JsonConvert.DeserializeObject(requestBody);
                name = name ?? data?.name;
    
                return name != null
                    ? (ActionResult)new OkObjectResult($"Hello, {name}")
                    : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
            }
        }
    }
    
    それは私たちが慣れているようだ.価値があるのは認可がAuthorizationLevel.Function , それで、我々がそれが欲しいならばAnonymous or Admin 我々は常に後に変更することができます.
    それで、これは機能を足場にする唯一の方法ですか?いいえ、このウィザードをスキップして、そのようなフラグを使うことができます.
    func new --template HttpTrigger --name Post
    
    スクリプトされたシナリオでは、関数を作成する後者のバージョンを使用する可能性が高くなります.

    アプリを実行する


    ので、我々は関数のアプリと機能を得た、それを実行するかどうかを確認してみましょう.我々のアプリを起動しますfunc start , これは暗黙のうちに実行されるrestore , その必要なパッケージを取得し、また、我々のアプリを構築します.我々は身近なところで終わる

    この関数は非常によく動作します.

    アジュールへの配備


    What about deployment? Right-click, like the browser?


    ではなく、まだ比較的簡単です.
    何をする必要があります:

  • あなたのサブスクリプションの機能アプリを作成し、この手順は4ステップで構成されます.それは多くのように聞こえるかもしれないが、あなたがこれをスクリプト化していると思う、それはそんなにではない.あなたが積極的に機能をオーサリングしているならば、あなたはCreate + Publish ステップは文字通りちょうど右クリックです

  • 公開、これはあなたのアプリケーションを展開する簡単なコマンドです
  • CLIを使用して関数のアプリケーションを作成する


    我々は、次のものを作成する必要があります

  • リソースグループ、これはあなたのリソースの論理的なグループ化です

  • ストレージアカウントは、すぐにどこにazureでファイルを配置する必要があるとして、彼らはストレージアカウントに関連付けられている必要があります

  • サービスプラン、アプリケーションサービスプランは、Azureアプリサービスをホストする基になる仮想マシンから成ります.それは無料でプレミアムからいくつかのティアを持っています.アプリケーションサービス計画は、あなたのアプリケーションがホストされる物理的なサーバーの領域とストレージ、RAMの量、および物理的なサーバーが持つCPUを定義します

  • は、実際のServerlessアプリを作成する準備ができている上記の成果物を作成したことに基づいて、実際の機能アプリを作成します
  • 開始する前に、Azure CLI経由でAzureにログインしてください.種類az login , あなたがわからないならば.
    つの変数を設定して起動します.
    storageName=mystorageaccount$RANDOM
    functionAppName=myappsvcpfunc$RANDOM
    
    への呼び出し$RANDOM 我々はユニークな名前を得ることを保証します.
    リソースグループを作成する
    az group create \
      --name myResourceGroup \
      --location westeurope
    
    Azureストレージアカウントを作成する
    az storage account create \
      --name $storageName \
      --location westeurope \
      --resource-group myResourceGroup \
      --sku Standard_LRS
    
    アプリケーションサービスプランを作成する
    az appservice plan create \
      --name myappserviceplan \
      --resource-group myResourceGroup \
      --location westeurope
    
    機能アプリの作成
    az functionapp create \
      --name $functionAppName \
      --storage-account $storageName \
      --plan myappserviceplan \
      --resource-group myResourceGroup
    
    出版
    func azure functionapp publish $functionAppName
    
    あなたが最後のコマンドを実行した後、それはあなたのアプリケーションの各機能のすべてのURLをリストに終了します.URLリンクの1つをクリックするとブラウザを回転させ、loughを見てみましょう.

    概要


    ので、私たちは目を見ることができる限り、私は、LIの国には、旅行をした.端末オプションは一般的にVSコードやIDEのように滑らかではないかもしれませんが、スクリプトを書くためにはほとんど意味がありません.次は、CI/CDパイプラインを設定する必要がありますし、アプリケーションの作成スクリプトを必要とも展開、覚えてfunc and func --help も.