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}
13
14provider "aws" {
15region = "eu-west-1"
16}
17
18provider "azurerm" {
19features {}
20subscription_id = var.azure_subscription_id
21}
22
23variable "azure_subscription_id" {
24type = string
25}
26
27# AWS S3 Bucket
28resource "aws_s3_bucket" "veri_depo" {
29bucket = "benim-s3-bucket-${data.aws_caller_identity.current.account_id}"
30}
31
32data "aws_caller_identity" "current" {}
33
34# Azure Resource Group
35resource "azurerm_resource_group" "rg" {
36name = "rg-multi-cloud"
37location = "West Europe"
38}
39
40# Azure Storage Account
41resource "azurerm_storage_account" "storage" {
42name = "depo${random_string.suffix.result}"
43resource_group_name = azurerm_resource_group.rg.name
44location = azurerm_resource_group.rg.location
45account_tier = "Standard"
46account_replication_type = "LRS"
47}
48
49resource "random_string" "suffix" {
50length = 8
51special = false
52lower = true
53}
54
55output "s3_bucket_name" {
56value = aws_s3_bucket.veri_depo.id
57}
58
59output "azure_storage_name" {
60value = azurerm_storage_account.storage.name
61}

Bunu çalıştırmak için önce ortam değişkenlerini ayarlayın:

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
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"
7
8terraform init
9terraform plan
10terraform apply

Beklenen çı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.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz