Pythonフォームの展開


この投稿は、Aterure関数Pythonをterraformで展開することに焦点を当てます.両方のサービスに新しい場合は、前提条件から始めることができます.

必要条件

  • Create and deploy serverless Azure Functions in Python with Visual Studio Code
  • Quickstart: Configure Terraform using Azure Cloud Shell
  • 概要


    Azure Functions マイクロソフトAzureの上のFAAS(機能- AS - Aサービス)です.それはあなたがServerlessサービスであるため、より速くあなたのエキサイティングなサービスを作成することができます.あなたのコードに焦点を当てる必要がありますOSの更新とミドルウェアを気にする必要はありません.
    さらに、azure関数は外部イベントによって引き起こされるイベント駆動です:
  • Azure Blobストレージにおける画像のアップロード(オブジェクトストレージサービス)
  • Azure Cosso DB ( NoSQL DB Service )にある項目の挿入/更新
  • 着信リクエスト
  • cronで定義されたタイマー
  • しかしながら、すべてのサービスを展開して、azureポータルからそれらを構成することは長い時間をかけて、間違いを起こります.
    私たちの生産性を向上させ、安全に展開するために、iacARM Template or Terraform , Azureポータルから各リソースを展開するのではなく.特に生産環境では、コードとしてインフラストラクチャを管理することはとても重要です.

    環境設定

  • terraform > = 0.12
  • Azurermプロバイダー
  • 紺碧のCLI
  • リソース定義


    リソースを定義しましょう.あなたのリソースを定義する.tf ファイル.main.tf
    # https://github.com/terraform-providers/terraform-provider-azurerm/issues/7960
    provider "azurerm" {
      version = ">=2.21.0"
      features {}
    }
    
    resource "azurerm_resource_group" "funcdeploy" {
      name     = "rg-${var.prefix}-function"
      location = var.location
    }
    
    resource "azurerm_storage_account" "funcdeploy" {
      name                     = "${var.prefix}storage"
      resource_group_name      = azurerm_resource_group.funcdeploy.name
      location                 = azurerm_resource_group.funcdeploy.location
      account_tier             = "Standard"
      account_replication_type = "LRS"
    }
    
    resource "azurerm_storage_container" "funcdeploy" {
      name                  = "contents"
      storage_account_name  = azurerm_storage_account.funcdeploy.name
      container_access_type = "private"
    }
    
    resource "azurerm_application_insights" "funcdeploy" {
      name                = "${var.prefix}-appinsights"
      location            = azurerm_resource_group.funcdeploy.location
      resource_group_name = azurerm_resource_group.funcdeploy.name
      application_type    = "web"
    
      # https://github.com/terraform-providers/terraform-provider-azurerm/issues/1303
      tags = {
        "hidden-link:${azurerm_resource_group.funcdeploy.id}/providers/Microsoft.Web/sites/${var.prefix}func" = "Resource"
      }
    
    }
    
    resource "azurerm_app_service_plan" "funcdeploy" {
      name                = "${var.prefix}-functions-consumption-asp"
      location            = azurerm_resource_group.funcdeploy.location
      resource_group_name = azurerm_resource_group.funcdeploy.name
      kind                = "FunctionApp"
      reserved            = true
    
      sku {
        tier = "Dynamic"
        size = "Y1"
      }
    }
    
    resource "azurerm_function_app" "funcdeploy" {
      name                       = "${var.prefix}func"
      location                   = azurerm_resource_group.funcdeploy.location
      resource_group_name        = azurerm_resource_group.funcdeploy.name
      app_service_plan_id        = azurerm_app_service_plan.funcdeploy.id
      storage_account_name       = azurerm_storage_account.funcdeploy.name
      storage_account_access_key = azurerm_storage_account.funcdeploy.primary_access_key
      https_only                 = true
      version                    = "~3"
      os_type                    = "linux"
      app_settings = {
          "WEBSITE_RUN_FROM_PACKAGE" = "1"
          "FUNCTIONS_WORKER_RUNTIME" = "python"
          "APPINSIGHTS_INSTRUMENTATIONKEY" = "${azurerm_application_insights.funcdeploy.instrumentation_key}"
          "APPLICATIONINSIGHTS_CONNECTION_STRING" = "InstrumentationKey=${azurerm_application_insights.funcdeploy.instrumentation_key};IngestionEndpoint=https://japaneast-0.in.applicationinsights.azure.com/"
      }
    
      site_config {
            linux_fx_version= "Python|3.8"        
            ftps_state = "Disabled"
        }
    
      # Enable if you need Managed Identity
      # identity {
      #   type = "SystemAssigned"
      # }
    }
    
    variables.tf
    variable "location" {
        type    =   string
        default =   "japaneast"
    }
    
    variable "prefix" {
        type    =   string
        default =   "my"
    
    }
    
    成功した展開のための若干のヒントは、ここにあります.
  • 用途azurerm >= 2.21.0
  • 隠しリンクタグの追加
  • セットversion = ~3 (デフォルトはv 1 )
  • Azureリソースの配備


    上記のファイルを作成したら、展開しましょう!
    ローカルのPCでTerraFormをインストールしたくない場合はAzure Cloud Shell テストとして.
    各リソース名が一意であることを確認します.
    $ terraform init
    
    ...
    Terraform has been successfully initialized!
    ...
    
    $ terraform plan 
    $ terraform apply
    
    ...
    Apply complete! Resources: 6 added, 0 changed, 0 destroyed.
    

    結果terraform apply次に、azureポータルにazure関数を参照してください.

    Azureポータルのリソース

    機能の配備


    アフターterrafrom apply , あなたのコードをアップロードすることがありますFunction with Visual Studio Code .
    一度アプリケーションを機能するためにコードを展開すると、Azureポータル上であなたの機能を見ることができます.

    Azureポータルの機能
    あなたは様々なリソースと制御バージョンを管理することができます.tf ファイル.生産では、Ci/CDツールを使用しますGitHub Actions or Azure DevOps .

    リファレンス

  • Terraform と Azure Pipelines を使って App Service / Azure Functions をコード化して管理する
  • azurerm_function_app Example Usage (Linux) in docs produces error on apply
  • Feature Request: Attach azurerm_application_insights to a azurerm_app_service
  • azurerm_function_app