トップ5のAzure Devは知っている必要があります


The previous article 仮想マシンに深く飛び込んでいた.まず、Azureポータルを使って仮想マシンを作成し、展開します.次に,インフラストラクチャをコードとして用いた.さらに、クラウドエンジニアリングのビルドと展開プロセスの一部としてプロビジョニングを自動化する方法を示しました.
この記事では、クラウドインフラストラクチャのもう一方の端を探索します.

Serverlessとは何ですか?


ServerLessは、起動時にコードを実行するイベント駆動型アーキテクチャです.Azureは、Azure関数とイベントでServerlessを実装します.通常、関数はログファイルを保存するなど、単一のタスクを実行します.関数は複数のタスクを実行することができますが、一般的に、関数は“あなたは1つのジョブを持っていた”の原則に準拠しています関数は任意のazureサポート言語で記述することができます.
イベントは実行する関数を呼び出します.これは、webhook、HTTPリクエスト、または予定のトリガすることができます.Azureは多くの関数テンプレートを与えます.さらに、彼らはアプリケーション要件にカスタマイズすることができます.
azure関数は以下のような特定のユースケースに最適です.
  • 需要が予測できない場合、Serverlessは自動的にスケールできる
  • サービスが頻繁に使用されるとき、Serverlessは使用につき課金するだけでコストを減らすことができます
  • Serverlessは維持費をなくすことができる
  • クライアントの重いアプリケーションがあるとき、ビジネスロジックの大部分がクライアントにある
  • あなたがデータ処理のような高いレイテンシタスクを持っているならば
  • ServerLessは、アプリケーションが常に実行されている場合は、理想的ではない、迅速な応答をcold start problem ), またはtimeout period あなたの実行計画のために.
    これらの警告では、関数を書く方法を理解するためにAzureポータルを使用してServerless関数を作成するにジャンプし、どのように作品が一緒に動作します.

    最初のServerless関数


    この例では、Visual Studio CodeAzure Functions extension .
    ステップ1 : Azure機能拡張機能を使用して、アクティビティバーをクリックし、「新規作成」プロジェクトをクリックします.
  • プロジェクトのフォルダを選択します.
  • 言語を選択し、入力スクリプトを使用します.
  • HTTPトリガを選択します.
  • MyHttpTriggerなどの関数名を指定します.
  • 認証レベルを匿名に設定する

  • 終了すると、テンプレートがあります.
    import { AzureFunction, Context, HttpRequest } from "@azure/functions"
    
    const httpTrigger: AzureFunction = async function (context: Context, req: HttpRequest): Promise<void> {
        context.log('HTTP trigger function processed a request.');
        const name = (req.query.name || (req.body && req.body.name));
        const responseMessage = name
            ? "Hello, " + name + ". This HTTP triggered function executed successfully."
            : "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.";
    
        context.res = {
            // status: 200, /* Defaults to 200 */
            body: responseMessage
        };
    
    };
    
    export default httpTrigger;
    
    ステップ2 :(オプション)Azure関数のコアツールがインストールされている場合は、ローカルで関数を実行できます.F 5キーを押すかRun > Start debugging .
    サービスはローカルで実行され、URLを提供します.
    Functions:
    
            myHttpTrigger: [GET,POST] http://localhost:7071/api/myHttpTrigger
    
    ブラウザまたは使用中のURLに移動するcurl .
    curl http://localhost:7071/api/myHttpTrigger
    This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.
    
    プレスControl-C デバッガを停止するターミナルで.
    ステップ3:機能をAzureに発表してください.
    あなたがAzureに署名されていることを確認してくださいDeploy function app…
  • 絹篩で篩うたようCreate a new Function App in Azure と入力します.
  • ランタイムスタックを選択します.Node.js 14 LTS
  • 新しいリソース、東米国の場所を選択します
  • ターミナル区画で「出力」タブをクリックし、関数のURLを表示します.この関数はcurlでnameパラメーターを呼び出します.
    curl https://myazurehttptrigger.azurewebsites.net/api/myhttptrigger?name=Pulumipus
    Hello, Pulumipus. This HTTP triggered function executed successfully.
    
    Azureポータルの機能を削除することを忘れないでください!

    コードでAzure関数を展開する


    Azure関数を作成して展開するのは、VSコードでAzure関数拡張子を使用するよりも少しだけ関係があります.あなたが関数を書いた後に舞台裏で行くことは、以下を含むプロセスです:
    1 - ResourceGroupの作成
    // Create a separate resource group for this example.
    const resourceGroup = new resources.ResourceGroup("functions-rg");
    
    2 -関数を保持するストレージアカウントとコードコンテナーを作成する
    // Storage account is required by Function App.
    // Also, we will upload the function code to the same storage account.
    const storageAccount = new storage.StorageAccount("sa", {
        resourceGroupName: resourceGroup.name,
        sku: {
            name: storage.SkuName.Standard_LRS,
        },
        kind: storage.Kind.StorageV2,
    });
    
    // Function code archives will be stored in this container.
    const codeContainer = new storage.BlobContainer("zips", {
        resourceGroupName: resourceGroup.name,
        accountName: storageAccount.name,
    });
    
    3 -ストレージアカウントにZIPファイルとして機能コードをアップロードします.ソースパラメーターは関数のディレクトリを指します.
    // Upload Azure Function's code as a zip archive to the storage account.
    const codeBlob = new storage.Blob("zip", {
        resourceGroupName: resourceGroup.name,
        accountName: storageAccount.name,
        containerName: codeContainer.name,
        source: new pulumi.asset.FileArchive("./javascript"),
    });
    
    4 -設定Consumption Plan 関数の実行時にどのように法案を決定するか
    // Define a Consumption Plan for the Function App.
    // You can change the SKU to Premium or App Service Plan if needed.
    const plan = new web.AppServicePlan("plan", {
        resourceGroupName: resourceGroup.name,
        sku: {
            name: "Y1",
            tier: "Dynamic",
        },
    });
    
    5 -ストレージアカウントとZIPアーカイブの接続文字列を設定しますShared Access Signature (SAS) ストレージアカウントを使用する権利を付与します.Azureで機能を作成するためにこれらを必要とします.
    // Build the connection string and zip archive's SAS URL. They will go to Function App's settings.
    const storageConnectionString = getConnectionString(resourceGroup.name, storageAccount.name);
    const codeBlobUrl = signedBlobReadUrl(codeBlob, codeContainer, storageAccount, resourceGroup);
    
    6 -機能を展開するために必要なすべてのパラメータがあるようになりました:リソースグループ、課金計画、Azureストレージへの接続文字列、関数バージョン(3)、ランタイム(ノード. js)、ランタイムノードのバージョン(14.0)、および関数コードのSAS URLは、Azure関数をビルドして展開できます.
    const app = new web.WebApp("fa", {
        resourceGroupName: resourceGroup.name,
        serverFarmId: plan.id,
        kind: "functionapp",
        siteConfig: {
            appSettings: [
                { name: "AzureWebJobsStorage", value: storageConnectionString },
                { name: "FUNCTIONS_EXTENSION_VERSION", value: "~3" },
                { name: "FUNCTIONS_WORKER_RUNTIME", value: "node" },
                { name: "WEBSITE_NODE_DEFAULT_VERSION", value: "~14" },
                { name: "WEBSITE_RUN_FROM_PACKAGE", value: codeBlobUrl },
            ],
            http20Enabled: true,
            nodeVersion: "~14",
        },
    });
    
    export const endpoint = pulumi.interpolate`https://${app.defaultHostName}/api/HelloNode?name=Pulumi`;
    
    スクリプトの最後に、私たちはあなたがトリガーするためのサービスにURLをエクスポートします.

    なぜそれはとても複雑ですか?


    インフラストラクチャ展開を簡素化することになっているコードとしてのインフラストラクチャではないか.これは、Visual Studioのコード拡張やthe Azure CLI 表面上.しかし、これは、異なる実行時と消費プランで複数の関数を展開するために再利用できるボイラープレートコードです.インフラストラクチャコードを使用するキーは、それが繰り返し、カスタマイズ可能であり、CI/CDパイプラインが自動的に変更を展開することができます.
    いずれかの完全な例を試してくださいTypescript or C# Azure関数に慣れるためです.また、どのように機能をすべてのサポートされている言語で書かれているAzure Functions in All Supported Languages 例.
    次の記事では、Azure Static Webサイトに深いダイビングを行いますJamstacks .