Terraform ile Çok Bulutlu Altyapı: AWS ve Azure Aynı Kodda
Terraform, birden fazla bulut sağlayıcısını aynı yapılandırma dilinde yönetmenizi sağlar. AWS ve Azure'u aynı projede kullanmak istiyorsanız, her iki provider'ı tanımlayıp gerekli kaynakları oluşturmanız yeterli.
Temel yaklaşım şu: her provider için ayrı blok tanımlarsınız, sonra o provider'a ait kaynakları çağırırsınız. Örneğin AWS'de EC2 örneği, Azure'da ise sanal makine (VM) oluşturabilirsiniz.
Aşağıdaki örnek, AWS'de bir S3 bucket'ı ve Azure'da bir Storage Account'ı aynı anda kurar:
1terraform {2required_providers {3aws = {4source = "hashicorp/aws"5version = "~> 5.0"6}7azurerm = {8source = "hashicorp/azurerm"9version = "~> 3.0"10}11}12}1314provider "aws" {15region = "eu-west-1"16}1718provider "azurerm" {19features {}20subscription_id = var.azure_subscription_id21}2223variable "azure_subscription_id" {24type = string25}2627# AWS S3 Bucket28resource "aws_s3_bucket" "veri_depo" {29bucket = "benim-s3-bucket-${data.aws_caller_identity.current.account_id}"30}3132data "aws_caller_identity" "current" {}3334# Azure Resource Group35resource "azurerm_resource_group" "rg" {36name = "rg-multi-cloud"37location = "West Europe"38}3940# Azure Storage Account41resource "azurerm_storage_account" "storage" {42name = "depo${random_string.suffix.result}"43resource_group_name = azurerm_resource_group.rg.name44location = azurerm_resource_group.rg.location45account_tier = "Standard"46account_replication_type = "LRS"47}4849resource "random_string" "suffix" {50length = 851special = false52lower = true53}5455output "s3_bucket_name" {56value = aws_s3_bucket.veri_depo.id57}5859output "azure_storage_name" {60value = azurerm_storage_account.storage.name61}Bunu çalıştırmak için önce ortam değişkenlerini ayarlayın:
1export AWS_ACCESS_KEY_ID="your-key"2export AWS_SECRET_ACCESS_KEY="your-secret"3export ARM_SUBSCRIPTION_ID="your-azure-subscription"4export ARM_CLIENT_ID="your-client-id"5export ARM_CLIENT_SECRET="your-client-secret"6export ARM_TENANT_ID="your-tenant-id"78terraform init9terraform plan10terraform applyBeklenen çıktı: S3 bucket'ının adı ve Azure Storage Account'unun adı.
Sık hata: Provider kimlik bilgilerini ayarlamadan terraform init çalıştırmak. Her sağlayıcının kendi API anahtarları gerekir; ortam değişkenleri ya da terraform.tfvars dosyasında tanımlayın. Ayrıca, Azure'da Resource Group'u her zaman önce oluşturun; diğer kaynaklar ona bağlıdır.
Bu yapı, dev ortamında AWS, prod'ta Azure kullanmanız gerektiğinde de uygun: workspace'ler ya da ayrı tfvars dosyaları ile sağlayıcı seçimini kontrol edebilirsiniz.
0 yorum