ACS 事業部の埜下です。
2024年2月9日 に Terraform の AzureRM プロバイダ v3.91.0 がリリースされました。
今回は Fleet Manager と Chaos Studio に追加リソースがあり、それぞれ一通りのリソースが出揃った感じがあります。 また、AKS 用バックアップポリシーのリソースも追加されてます。
Azure サービス | リソース、データソース |
---|---|
Azure Kubernetes Fleet Manager | azurerm_kubernetes_fleet_member |
Azure Backup | azurerm_data_protection_backup_policy_kubernetes_cluster |
Azure Chaos Studio | azurerm_chaos_studio_experiment azurerm_chaos_studio_capability |
Azure Deployment Environments | azurerm_dev_center_gallery |
Azure IoT Central | azurerm_iotcentral_organization |
Azure Spring Apps | azurerm_spring_cloud_app_dynamics_application_performance_monitoring |
Azure Databricks | azurerm_databricks_access_connector データソース |
AzureRM プロバイダのアップデート内容は 3 つのカテゴリに分かれてリリースページにて報告されていますが、FEATURES
の内容を拾いつつ、影響の大きそうな ENHANCEMENTS
や BUG FIXES
があれば確認します。
カテゴリ | 内容 |
---|---|
FEATURES | 新しいリソース、データソースの追加 プロバイダ自体の機能追加 |
ENHANCEMENTS | 既存リソース、データソースのプロパティ変更 利用している SDK (hashicorp/go-azure-sdk) などバージョンアップ対応 |
BUG FIXES | バグ修正 |
Azure Kubernetes Fleet Manager
azurerm_kubernetes_fleet_member
ドキュメント:azurerm_kubernetes_fleet_member
Azure Kubernetes Fleet Manager のフリートメンバーの AKS クラスタを管理する azurerm_kubernetes_fleet_member
リソースが追加されました。
このリソースと v3.90.0 で追加された azurerm_kubernetes_fleet_update_strategy
リソースと組み合わせることで、Azure Kubernetes Fleet Manager の更新戦略を Terraform で管理できるようになります。
resource "azurerm_kubernetes_fleet_manager" "example" { name = "example" location = azurerm_resource_group.example.location resource_group_name = azurerm_resource_group.example.name } resource "azurerm_kubernetes_fleet_update_strategy" "example" { name = "example" kubernetes_fleet_manager_id = azurerm_kubernetes_fleet_manager.example.id stage { name = "example-stage-1" group { name = "example-group-1" } after_stage_wait_in_seconds = 21 } } resource "azurerm_kubernetes_fleet_member" "example" { kubernetes_cluster_id = azurerm_kubernetes_cluster.example.id kubernetes_fleet_id = azurerm_kubernetes_fleet_manager.example.id name = "example" group = "example-group-1" }
Azure Backup
azurerm_data_protection_backup_policy_kubernetes_cluster
ドキュメント:azurerm_data_protection_backup_policy_kubernetes_cluster
Azure Backup を使用した Azure Kubernetes Service (AKS) のバックアップポリシーを Terraform で構成できるようになりました。
AKS のバックアップ拡張機能有効化も azurerm_kubernetes_cluster_extension
リソースで可能ですが、AKS のバックアップ構成に対応したリソースはまだ無いため、Terraform を使って AKS のバックアップを構成するには AzAPI プロバイダも使う必要があります。
AKS バックアップ全体の流れはこちらの方の記事が分かりやすかったです。
以下は、今回リリースされた azurerm_data_protection_backup_policy_kubernetes_cluster
リソースを含めた Terraform による AKS のバックアップ構成例です。
resource "azurerm_kubernetes_cluster_extension" "example" { name = "backup" cluster_id = azurerm_kubernetes_cluster.example.id extension_type = "microsoft.dataprotection.kubernetes" release_train = "stable" configuration_settings = { "credentials.tenantId" = data.azurerm_client_config.example.tenant_id "configuration.backupStorageLocation.config.subscriptionId" = data.azurerm_client_config.example.subscription_id "configuration.backupStorageLocation.config.resourceGroup" = azurerm_storage_account.example.resource_group_name "configuration.backupStorageLocation.config.storageAccount" = azurerm_storage_account.example.name "configuration.backupStorageLocation.bucket" = azurerm_storage_container.example.name } } resource "azurerm_data_protection_backup_vault" "example" { name = "example-backup-vault" resource_group_name = azurerm_resource_group.example.name location = azurerm_resource_group.example.location datastore_type = "VaultStore" redundancy = "LocallyRedundant" } resource "azurerm_data_protection_backup_policy_kubernetes_cluster" "example" { name = "example-backup-policy" resource_group_name = azurerm_resource_group.example.name vault_name = azurerm_data_protection_backup_vault.example.name backup_repeating_time_intervals = ["R/2021-05-23T02:30:00+00:00/P1W"] time_zone = "Tokyo Standard Time" default_retention_rule { life_cycle { duration = "P7D" data_store_type = "OperationalStore" } } } resource "azapi_resource" "backup_configuration" { name = "cluster-configuration" parent_id = azurerm_data_protection_backup_vault.example.id type = "Microsoft.DataProtection/backupVaults/backupInstances@2023-08-01-preview" schema_validation_enabled = false # to prevent invalid preview API version errors body = templatefile("${path.module}/azapi-resources/backup-configuration.json", { name = "cluster-configuration" backup_policy_id = azapi_resource.backup_policy.id cluster_name = azurerm_kubernetes_cluster.example.name cluster_id = azurerm_kubernetes_cluster.example.id cluster_location = azurerm_kubernetes_cluster.example.location disk_snapshot_resource_group_id = azurerm_kubernetes_cluster.example.node_resource_group_id }) }
backup-configuration.json
{ "properties": { "policyRules": [ { "lifecycles": [ { "deleteAfter": { "objectType": "AbsoluteDeleteOption", "duration": "P4W" }, "targetDataStoreCopySettings": [], "sourceDataStore": { "dataStoreType": "OperationalStore", "objectType": "DataStoreInfoBase" } } ], "isDefault": false, "name": "Weekly", "objectType": "AzureRetentionRule" }, { "lifecycles": [ { "deleteAfter": { "objectType": "AbsoluteDeleteOption", "duration": "P7D" }, "targetDataStoreCopySettings": [], "sourceDataStore": { "dataStoreType": "OperationalStore", "objectType": "DataStoreInfoBase" } } ], "isDefault": true, "name": "Default", "objectType": "AzureRetentionRule" }, { "backupParameters": { "backupType": "Incremental", "objectType": "AzureBackupParams" }, "trigger": { "schedule": { "repeatingTimeIntervals": [ "R/2023-11-17T13:47:10+00:00/PT4H" ], "timeZone": "UTC" }, "taggingCriteria": [ { "tagInfo": { "tagName": "Weekly", "id": "Weekly_" }, "taggingPriority": 20, "isDefault": false, "criteria": [ { "absoluteCriteria": [ "FirstOfWeek" ], "objectType": "ScheduleBasedBackupCriteria" } ] }, { "tagInfo": { "tagName": "Default", "id": "Default_" }, "taggingPriority": 99, "isDefault": true } ], "objectType": "ScheduleBasedTriggerContext" }, "dataStore": { "dataStoreType": "OperationalStore", "objectType": "DataStoreInfoBase" }, "name": "BackupHourly", "objectType": "AzureBackupRule" } ], "datasourceTypes": [ "Microsoft.ContainerService/managedClusters" ], "objectType": "BackupPolicy" } }
AzAPI リソースの参照元はこちら。
Azure backup for AKS with Terraform · GitHub
Azure Chaos Studio
azurerm_chaos_studio_experiment, azurerm_chaos_studio_capability
ドキュメント:azurerm_chaos_studio_experiment, azurerm_chaos_studio_capability
v3.89.0 では Azure Chaos Studio のターゲットを作成する azurerm_chaos_studio_target
リソースが追加されましたが、「カオス実験 (Chaos experiments)」という Azure リソースに対応した AzureRMプロバイダのリソースはありませんでした。
今回のリリースで「カオス実験 (Chaos experiments)」に対応した azurerm_chaos_studio_experiment
リソース、「機能 (Capability)」に対応した azurerm_chaos_studio_capability
リソースが追加され、Azure Chaos Studio の一通りの設定を Terraform で構成できるようになりました。
「機能」はターゲットのリソースが持っている拡張リソースで、どんな機能が使えるかは以下の障害ライブラリ(なんと恐ろしいライブラリ…)から確認できます。
次のコードは Linux VM に対してシャットダウン (Shutdown-1.0) を引き起こす実験の構成です。
resource "azurerm_chaos_studio_target" "example" { location = azurerm_resource_group.example.location target_resource_id = azurerm_linux_virtual_machine.example.id target_type = "Microsoft-VirtualMachine" } resource "azurerm_chaos_studio_capability" "example" { chaos_studio_target_id = azurerm_chaos_studio_target.example.id capability_type = "Shutdown-1.0" } resource "azurerm_chaos_studio_experiment" "example" { location = azurerm_resource_group.example.location name = "example" resource_group_name = azurerm_resource_group.example.name identity { type = "SystemAssigned" } selectors { name = "Selector1" chaos_studio_target_ids = [azurerm_chaos_studio_target.example.id] } steps { name = "example" branch { name = "example" actions { urn = azurerm_chaos_studio_capability.example.urn selector_name = "Selector1" parameters = { abruptShutdown = "false" } action_type = "continuous" duration = "PT10M" } } } }
Azure Deployment Environments
azurerm_dev_center_gallery
ドキュメント:azurerm_dev_center_gallery
Azure Deployment Environments の「デベロッパー センター (Dev center)」では Azure Compute Gallery という Azure VM のイメージを公開するサービと連携できます(ただし、今は公式のドキュメントは無さそう)。
Azure Compute Gallery は azurerm_shared_image_gallery
というリソースで構成され、デベロッパー センターと Azure Compute Gallery を紐付ける役割をするのが今回リリースされた azurerm_dev_center_gallery
リソースです。
resource "azurerm_dev_center" "test" { name = "example-devcenter" resource_group_name = azurerm_resource_group.test.name location = azurerm_resource_group.test.location } resource "azurerm_shared_image_gallery" "example" { name = "example-image-gallery" location = azurerm_resource_group.example.location resource_group_name = azurerm_resource_group.example.name } resource "azurerm_dev_center_gallery" "example" { dev_center_id = azurerm_dev_center.example.id shared_gallery_id = azurerm_shared_image_gallery.example.id name = "example" }
Azure IoT Central
azurerm_iotcentral_organization
ドキュメント:azurerm_iotcentral_organization
Azure IoT Central という IoT ソリューションの開発、管理するための PaaS があり、「どのユーザーがどのデバイスを表示できるか」を管理するための「組織」という機能があります。
上図のように組織は階層化されていて、今回追加された azurerm_iotcentral_organization
リソースも parent_organization_id
というパラメータで別のリソースを親として参照して構成できます。
resource "azurerm_iotcentral_application" "example" { name = "example-iotcentral-app" resource_group_name = azurerm_resource_group.example.name location = azurerm_resource_group.example.location sub_domain = "example-iotcentral-app-subdomain" display_name = "example-iotcentral-app-display-name" sku = "ST1" template = "iotc-default@1.0.0" tags = { Foo = "Bar" } } resource "azurerm_iotcentral_organization" "example_parent" { iotcentral_application_id = azurerm_iotcentral_application.example.id organization_id = "example-parent-organization-id" display_name = "Org example parent" } resource "azurerm_iotcentral_organization" "example" { iotcentral_application_id = azurerm_iotcentral_application.example.id organization_id = "example-child-organization-id" display_name = "Org example" parent_organization_id = azurerm_iotcentral_organization.example_parent.organization_id }
Azure Spring Apps
azurerm_spring_cloud_app_dynamics_application_performance_monitoring
ドキュメント:azurerm_spring_cloud_app_dynamics_application_performance_monitoring
最近頻繁に機能追加されている Spring Apps 監視用リソースです。 今回は AppDynamics と連携するためのリソースが追加されました。
resource "azurerm_spring_cloud_app_dynamics_application_performance_monitoring" "example" { name = "example" spring_cloud_service_id = azurerm_spring_cloud_service.example.id agent_account_name = "example-agent-account-name" agent_account_access_key = "example-agent-account-access-key" controller_host_name = "example-controller-host-name" agent_application_name = "example-agent-application-name" agent_tier_name = "example-agent-tier-name" agent_node_name = "example-agent-node-name" agent_unique_host_id = "example-agent-unique-host-id" controller_ssl_enabled = true controller_port = 8080 globally_enabled = true }
Azure Databricks
azurerm_databricks_access_connector データソース
ドキュメント:azurerm_databricks_access_connector
Azure Databricks でストレージにアクセスするときに使われるマネージド ID を参照するデータソースが追加されました。
Databricks のドキュメントでは Databricks Provider の databricks_storage_credential
リソースで azurerm_databricks_access_connector
リソースの情報を参照していました。
今回のデータソース追加により、Terraform 管理外の Databricks アクセス コネクタ用のマネージド ID を参照して使えるようになったようです。
data "azurerm_databricks_access_connector" "example" { name = "example" resource_group_name = "example" } resource "databricks_storage_credential" "example" { name = "team_X_credential" azure_managed_identity { access_connector_id = data.azurerm_databricks_access_connector.example.id } comment = "Managed by TF" owner = databricks_group.team_X_admins.display_name }
今回はアップデート情報は以上です。
【PR】
私達 ACS 事業部は Azure・AKS などのクラウドネイティブ技術を活用した内製化のご支援をしております。
一緒に働いていただける仲間も募集中です!
まだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。
我々の事業部の CultureDeck はコチラ。