ACS 事業部の埜下です。
2024年2月2日 に Terraform の AzureRM プロバイダ v3.90.0 がリリースされました。 少し遅れてしまいましたが、アップデートの内容を確認していきましょう。
AzureRM プロバイダのアップデート内容は 3 つのカテゴリに分かれてリリースページにて報告されていますが、FEATURES
の内容を拾いつつ、影響の大きそうな ENHANCEMENTS
や BUG FIXES
があれば確認します。
カテゴリ | 内容 |
---|---|
FEATURES | 新しいリソース、データソースの追加 プロバイダ自体の機能追加 |
ENHANCEMENTS | 既存リソース、データソースのプロパティ変更 利用している SDK (hashicorp/go-azure-sdk) などバージョンアップ対応 |
BUG FIXES | バグ修正 |
AppConfiguration, DataFactory, SignalRServiceリソースプロバイダーが登録されます
このバージョンから Azure リソースプロバイダーとして次のプロバイダーが自動登録されます。
- AppConfiguration
- DataFactory
- SignalRService
これにより、Terraform で利用する Azure ユーザやサービスプリンシパルにサブスクリプションへの「所有者 (Owner)」か「共同作成者 (Contributor)」のロールが付与されていないとエラーが発生します。 権限が制限されている環境で Terraform を利用されている場合はご注意ください。
リソースプロバイダーが登録されていない、かつ権限が不足している場合は Terrraform で次のようなエラーが発生します。
$ terraform plan Planning failed. Terraform encountered an error while generating this plan. ╷ │ Error: Error ensuring Resource Providers are registered. │ │ Terraform automatically attempts to register the Resource Providers it supports to │ ensure it's able to provision resources. │ │ If you don't have permission to register Resource Providers you may wish to use the │ "skip_provider_registration" flag in the Provider block to disable this functionality. │ │ Please note that if you opt out of Resource Provider Registration and Terraform tries │ to provision a resource from a Resource Provider which is unregistered, then the errors │ may appear misleading - for example: │ │ > API version 2019-XX-XX was not found for Microsoft.Foo │ │ Could indicate either that the Resource Provider "Microsoft.Foo" requires registration, │ but this could also indicate that this Azure Region doesn't support this API version. │ │ More information on the "skip_provider_registration" flag can be found here: │ https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs#skip_provider_registration │ │ Original Error: Cannot register providers: Microsoft.SignalRService, Microsoft.DataFactory, Microsoft.AppConfiguration. Errors were: Cannot register provider Microsoft.SignalRService with Azure Resource Manager: unexpected status 403 with error: AuthorizationFailed: The client '00000000-0000-0000-0000-000000000000' with object id '00000000-0000-0000-0000-000000000000' does not have authorization to perform action 'Microsoft.SignalRService/register/action' over scope '/subscriptions/00000000-0000-0000-0000-000000000000' or the scope is invalid. If access was recently granted, please refresh your credentials.. │ Cannot register provider Microsoft.DataFactory with Azure Resource Manager: unexpected status 403 with error: AuthorizationFailed: The client '00000000-0000-0000-0000-000000000000' with object id '00000000-0000-0000-0000-000000000000' does not have authorization to perform action 'Microsoft.DataFactory/register/action' over scope '/subscriptions/00000000-0000-0000-0000-000000000000' or the scope is invalid. If access was recently granted, please refresh your credentials.. │ Cannot register provider Microsoft.AppConfiguration with Azure Resource Manager: unexpected status 403 with error: AuthorizationFailed: The client '00000000-0000-0000-0000-000000000000' with object id '00000000-0000-0000-0000-000000000000' does not have authorization to perform action 'Microsoft.AppConfiguration/register/action' over scope '/subscriptions/00000000-0000-0000-0000-000000000000' or the scope is invalid. If access was recently granted, please refresh your credentials.. │ │ with provider["registry.terraform.io/hashicorp/azurerm"], │ on providers.tf line 10, in provider "azurerm": │ 10: provider "azurerm" { │ ╵
プロバイダーを追加する場合、権限を持っているユーザが手動登録するか、Terraform のユーザやサービスプリンシパルにロールを付与して実行してください。
後者では terraform plan
コマンドだけでプロバイダーが登録されます。
今回は 1分ほどで登録が完了しました。
プロバイダーを登録せずに Terraform を実行したい場合は provider ブロックに skip_provider_registration = true
を設定するか、環境変数 ARM_SKIP_PROVIDER_REGISTRATION
を使用してください。
provider "azurerm" { skip_provider_registration = true features {} }
新規リソース
azurerm_kubernetes_fleet_update_strategy (Azure Kubernetes Fleet Manager)
ドキュメント:azurerm_kubernetes_fleet_update_strategy
azurerm_kubernetes_fleet_update_strategy
はA zure Kubernetes Fleet Manager の複数クラスタ間で更新プログラムを調整する「更新戦略」を構成するリソースです。
上図のように、更新戦略にはクラスタの更新順序を定義する「ステージ」と「グループ」、それとステージ間の「待機時間」があります。
azurerm_kubernetes_fleet_update_strategy
リソースはそれらを構成します。
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 } }
では、この更新戦略を適用するクラスタの指定ですが、それは次のバージョン v3.91.0
でリリースされた azurerm_kubernetes_fleet_member
リソースで構成できます。
そのため、この Azure Kubernetes Fleet Manager を Terraform で管理する場合はこのバージョン v.3.90.0
ではなく次のバージョン v.3.91.0
を利用するのがよいでしょう。
azurerm_site_recovery_vmware_replicated_vm (Azure Site Recovery)
ドキュメント:azurerm_site_recovery_vmware_replicated_vm
Azure Site Recovery で VMware VM に対するレプリケーションを Terraform で設定できるようになりました。 これにより、VMware VM のディザスターリカバリー先として Azure を利用できます。
resource "azurerm_site_recovery_vmware_replicated_vm" "example" { name = "example-vmware-vm" recovery_vault_id = azurerm_recovery_services_vault.example.id source_vm_name = "example-vm" appliance_name = "example-appliance" recovery_replication_policy_id = azurerm_site_recovery_vmware_replication_policy_association.example.policy_id physical_server_credential_name = "example-creds" license_type = "NotSpecified" target_boot_diagnostics_storage_account_id = azurerm_storage_account.example.id target_vm_name = "example_replicated_vm" target_resource_group_id = azurerm_resource_group.example.id default_log_storage_account_id = azurerm_storage_account.example.id default_recovery_disk_type = "Standard_LRS" target_network_id = azurerm_virtual_network.example.id network_interface { source_mac_address = "00:00:00:00:00:00" target_subnet_name = azurerm_subnet.example.name is_primary = true } }
azurerm_spring_cloud_new_relic_application_performance_monitoring (Azure Spring Apps)
ドキュメント:azurerm_spring_cloud_new_relic_application_performance_monitoring
Azure Spring Apps の Spring Boot アプリケーションを New Relic で監視する設定を azurerm_spring_cloud_new_relic_application_performance_monitoring
リソースで構成できます。
resource "azurerm_spring_cloud_new_relic_application_performance_monitoring" "example" { name = "example" spring_cloud_service_id = azurerm_spring_cloud_service.example.id app_name = "example-app-name" license_key = "example-license-key" app_server_port = 8080 labels = { tagName1 = "tagValue1" tagName2 = "tagValue2" } globally_enabled = true }
新規データソース
azurerm_nginx_configuration (Nginx デプロイ)
ドキュメント:azurerm_nginx_configuration
Nginx デプロイの構成を参照するデータソース azurerm_nginx_configuration
が追加されました。
これで v3.27.0 で追加された azurerm_nginx_deployment
リソース、v3.29.0 で追加された azurerm_nginx_configuration
リソースと azurerm_nginx_certificate
リソースに対応するデータソースを利用できるようになりました。
azurerm_virtual_desktop_workspace (Azure Virtual Desktop)
ドキュメント:azurerm_virtual_desktop_workspace
Azure Virtual Desktop のワークスペースを参照できるデータソース azurerm_virtual_desktop_workspace
が追加されました。
ワークスペースは、Azure Virtual Desktop でのアプリケーション グループの論理的なグループです。 ユーザーに公開されたデスクトップとアプリケーションがそのユーザーに表示されるようにするには、各 Azure Virtual Desktop アプリケーション グループがワークスペースに関連付けられている必要があります。
今回はアップデート確認は以上です。
【PR】
私達 ACS 事業部は Azure・AKS などのクラウドネイティブ技術を活用した内製化のご支援をしております。
一緒に働いていただける仲間も募集中です!
まだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。
我々の事業部の CultureDeck はコチラ。