Met Terraform 1.5 en later kunt u het import
-blok gebruiken om de import van resources rechtstreeks in uw configuratie te beheren. Met deze functie wordt het proces van het importeren van bestaande infrastructuur in de Terraform-state vereenvoudigd, waardoor de noodzaak voor een aparte CLI-opdracht terraform import
wordt geëlimineerd.
In dit artikel leggen we het importblok uit en hoe u het kunt gebruiken om verschillende resources te importeren.
Wat Is een Terraform Importblok?
Het Terraform import
-blok geïntroduceerd in Terraform v1.5.0 biedt een declaratieve benadering voor het importeren van bestaande infrastructuurresources in een Terraform-statebestand. Het maakt het mogelijk om resource-imports een integraal onderdeel te laten worden van het planningsproces van Terraform – vergelijkbaar met andere beheerde resources – in plaats van behandeld te worden als een directe state-operatie.
Als gevolg hiervan verbetert het import
-blok de transparantie en stemt het resource-imports af op de kernprincipes van infrastructuur als code (IaC), waardoor gebruikers hun infrastructuur effectiever en voorspelbaarder kunnen beheren.
De syntaxis voor een import
-blok in Terraform is als volgt:
import {
to = <resource_address>
id = <resource_identifier>
}
to
: Geeft het resource-adres in uw configuratie aan waar de geïmporteerde resource zal worden toegewezen.id
: Definieert de unieke identificator van de bestaande bron in de API van de provider. Zorg ervoor dat uw Terraform-provider correct is geconfigureerd om toegang te krijgen tot de te importeren bron.
Merk op dat sommige brontypen mogelijk aanvullende vereisten of beperkingen hebben voor het importeren.
Import Block vs. Terraform Import Command
Een import
-blok in Terraform stelt u in staat om bronnen rechtstreeks in uw configuratiebestand te definiëren, waardoor het beheer van bestaande infrastructuur wordt vereenvoudigd.
In tegenstelling hiermee, wanneer de terraform import
-opdracht wordt gebruikt zonder een import
-blok, koppelt het een bestaande bron aan de Terraform-status, maar genereert het niet automatisch de overeenkomstige configuratie in uw code. U moet deze configuratie handmatig toevoegen. De importopdracht is bijzonder nuttig voor eenmalige imports of voor het overbrengen van infrastructuur naar het Terraform-beheer.
Beide methoden vereisen zorgvuldige behandeling om consistentie tussen de Terraform-status en de daadwerkelijke infrastructuur te waarborgen. Import
-blokken zijn over het algemeen beter geschikt voor doorlopend beheer van bronnen, terwijl de op zichzelf staande opdracht goed werkt voor incidentele imports.
Voorbeeld 1: Gebruik van Terraform Import Block om een S3-bucket te importeren
Stel dat we een bestaande AWS S3 bucket (my-existing-bucket
) hebben die je wilt beheren met Terraform.
Met het resource
block wordt de S3-bucket gespecificeerd (aws_s3_bucket.example
) en het bucket
attribuut definieert de naam van de bestaande bucket:
resource "aws_s3_bucket" "example" {
bucket = "my-existing-bucket"
}
import {
to = aws_s3_bucket.example
id = "my-existing-bucket"
}
Het import
block koppelt de bestaande S3-bucket aan de Terraform-resource.
to
: Koppelt het geïmporteerde resource aan het adres van hetresource
block (aws_s3_bucket.example
)id
: Specificeert de unieke ID van de bucket (my-existing-bucket
).
Wanneer je terraform plan
uitvoert, leest Terraform het import
block, controleert de status van de bestaande S3-bucket en toont een voorbeeld van de wijzigingen die het zal aanbrengen in het statusbestand. Vervolgens, nadat we terraform apply
uitvoeren, bijwerkt Terraform het statusbestand om de bestaande bucket op te nemen en deze te koppelen aan de resource aws_s3_bucket.example
.
Na het uitvoeren van terraform apply
en succesvol importeren van de resource, is het een goede praktijk om het import
-blok te verwijderen. Het behouden ervan veroorzaakt geen schade, maar verwijderen helpt bij het behouden van een schone configuratie en minimaliseert mogelijke verwarring tijdens toekomstig beheer van de status.
Voorbeeld 2: Gebruik van Terraform Import Block om een EC2-instantie te importeren
Laten we een ander voorbeeld bekijken: We hebben een bestaande EC2-instantie met het ID i-1234567890abcdef0
en willen deze onder Terraform-beheer brengen.
We definiëren de aws_instance
-resource die we willen beheren met Terraform in het resource
-blok. Zorg ervoor dat de attributen (bijv. ami
, instance_type
) overeenkomen met de configuratie van de bestaande instantie:
resource "aws_instance" "example" {
ami = "ami-0abcdef1234567890" # Replace with the actual AMI ID
instance_type = "t2.micro"
}
import {
to = aws_instance.example
id = "i-1234567890abcdef0"
}
In het import
-blok:
to
: Koppelt de resource in jouw configuratie (aws_instance.example
) aan de bestaande resource.id
: Specificeert het unieke ID van de EC2-instantie die je importeert.
Zodra je het resource-blok en de importverklaring aan je Terraform-configuratiebestand toevoegt, voer terraform plan
uit om de wijzigingen te bekijken. Voer vervolgens terraform apply
uit om de resource in het statusbestand van Terraform te importeren.
Na de import zal Terraform de bestaande EC2-instantie beheren, ervoor zorgend dat de configuratie declaratief blijft.
Voorbeeld 3: Gebruik van het Terraform Import Block om een Azure Resource Group te importeren
In het volgende voorbeeld zullen we een Azure resourcegroep importeren.
We hebben een bestaande Azure resourcegroep met de naam example-resource-group
in de regio East US
, en we willen deze beheren met Terraform.
Ten eerste definiëren we in het resource
block de resource azurerm_resource_group
die Terraform zal beheren:
resource "azurerm_resource_group" "example" {
name = "example-resource-group"
location = "East US"
}
import {
to = azurerm_resource_group.example
id = "/subscriptions/<subscription_id>/resourceGroups/example-resource-group"
}
Het import block:
to
: Koppelt de resource in uw configuratie (azurerm_resource_group.example
) aan de bestaande Azure resource.id
: Specificeert de volledig gekwalificeerde Azure resource ID van de resourcegroep. Vergeet niet om<subscription_id>
te vervangen door uw daadwerkelijke abonnements-ID.
Voeg de resource en het import block toe aan uw Terraform configuratiebestand. Voer vervolgens het terraform plan
commando uit om de wijzigingen te bekijken en voer terraform apply
uit om de wijzigingen toe te passen en de resource te importeren in het Terraform state bestand.
Kun je het Terraform Import Block voorwaardelijk gebruiken?
Het Terraform importblok is ontworpen om declaratief te zijn en vereist specifieke waarden die bekend zijn bij het plannen. Daarom kan het niet voorwaardelijk worden gebruikt in uw Terraform-code.
Het importblok ondersteunt geen dynamische expressies of variabelen om de import-ID te bepalen op basis van voorwaarden. Pogingen om constructies zoals count of variabelen te gebruiken binnen het importblok zullen leiden tot fouten, aangezien Terraform dergelijke argumenten niet toestaat in deze context.
Belangrijke punten
De introductie van het importblok in Terraform 1.5+ vereenvoudigt het beheer van resources door het direct importeren en definiëren van resources in configuratiebestanden mogelijk te maken. Het sluit aan bij IaC-principes door de complexiteit te verminderen en het gemakkelijker te maken om bestaande infrastructuur te integreren in Terraform-configuraties.
Source:
https://dzone.com/articles/how-to-use-terraform-import-block