Terraformを使ったAppServiceのバックアップとAppServiceログの設定
2020-01-10
azblob://2022/11/11/eyecatch/2020-01-10-terraform-appservice-backup-and-log-000-1.png

こんにちは。cloud.config Divの神田です。今回はTerraformを使ったAppServiceのバックアップとAppServiceログの設定を行います。

バックアップの設定

AppServiceのバックアップをストレージアカウントに保存する際には、自動でShared Access Signatures(SAS)が生成されます。
今回はTerraformでストレージアカウント、コンテナ、SAS、AppServiceの生成をまとめて行います。
実行するコードは以下になります。
以下のコードでは、バックアップは1日1回保存し、バックアップのリテンション期間は30日となっています。

# ストレージアカウントの生成
resource "azurerm_storage_account" "str01" {
  name                     = "ストレージアカウント名"
  resource_group_name      = "リソースグループ名"
  location                 = "リージョン"
  account_kind             = "StorageV2"
  account_tier             = "Standard"
  account_replication_type = "LRS"
  access_tier              = "Hot"
}

# コンテナの生成
resource "azurerm_storage_container" "ctn01" {
  name                  = "コンテナ名"
  storage_account_name  = "ストレージアカウント名"
  container_access_type = "private"
}

# Shared Access Signatures(SAS)の生成
data "azurerm_storage_account_sas" "sas01" {
  # azurerm_storage_account.test.primary_connection_string : ストレージアカウントの接続文字列
  connection_string = "${azurerm_storage_account.str01.primary_connection_string}"
  https_only        = true

  resource_types {
    service   = false
    container = false
    object    = true
  }

  services {
    blob  = true
    queue = false
    table = false
    file  = false
  }

  # SASの有効期間 Azureポータル上で設定した場合は有効期間100年のSASが自動生成される
  start  = "YYYY-MM-DD"
  expiry = "YYYY-MM-DD"

  permissions {
    read    = false
    write   = true
    delete  = true
    list    = false
    add     = false
    create  = false
    update  = false
    process = false
  }
}

# AppServiceの生成
resource "azurerm_app_service" "app01" {
  name                = "AppService名"
  location            = "リージョン"
  resource_group_name = "リソースグループ名"
  app_service_plan_id = "AppServicePlanのリソースID"

  backup {
    name    = "バックアップ名"
    enabled = true

    # ${data.azurerm_storage_account_sas.sas01.sas} : バックアップを格納するコンテナのSASのURI
    storage_account_url = "https://${ストレージアカウント名}.blob.core.windows.net/${コンテナ名}${data.azurerm_storage_account_sas.sas01.sas}&sr=b"

    # バックアップのスケジュール
    schedule {
      frequency_interval = 1

      # "Day" or "Hour"
      frequency_unit           = "Day"
      keep_at_least_one_backup = true
      retention_period_in_days = 30

      # バックアップの開始日時 JST(日本時間)なら "YYYY-MM-DDThh:mm:ss+09:00"
      start_time = "YYYY-MM-DDThh:mm:ss±hh:mm"
    }
  }
}

上記のコードを実行すると以下のバックアップ構成が設定されます。
これでAppServiceのバックアップ構成が完了しました。

バックアップ構成

AppServiceログの設定

次はAppServiceログの設定についてです。
今回はAppServiceログのうち、アプリケーションログとWebサーバログをそれぞれストレージアカウントに保存するように設定します。
なお、今回はアプリケーションログのストリーミングログ機能は設定しません。
AppServiceログをストレージアカウントに保存する際もバックアップと同様に自動でSASが生成されます。
以下がAppServiceログの設定を行ったAppServiceの生成コードです。(ストレージアカウントなどは省略)

# ストレージアカウント、コンテナ、SASの生成は省略

# AppServiceの生成
resource "azurerm_app_service" "app02" {
  name                = "AppService名"
  location            = "リージョン"
  resource_group_name = "リソースグループ名"
  app_service_plan_id = "AppServicePlanのリソースID"
  
  logs {
    application_logs {
      azure_blob_storage {
        # "Error","Warning","Infomation","Verbose" and "Off"
        level             = "Verbose"
        sas_url           = "https://${ストレージアカウント名}.blob.core.windows.net/${コンテナ名}${data.azurerm_storage_account_sas.sas01.sas}&sr=b"
        retention_in_days = 30
      }
    }
    http_logs {
      azure_blob_storage {
        sas_url           = "https://${ストレージアカウント名}.blob.core.windows.net/${コンテナ名}${data.azurerm_storage_account_sas.sas01.sas}&sr=b"
        retention_in_days = 30
      }
    }
  }
}

上記のコードを実行することで以下のAppServiceログの設定が行われます。

AppServiceログの構成

最後に

AppServiceの「データベースをバックアップする」を有効にする方法、AppServiceログの「詳細なエラーメッセージ」と「失敗した要求のトレース」を有効にする方法をご存じの方がいましたら、ぜひご教示ください。