Memahami sumber data Terraform - AWS Panduan Preskriptif

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Memahami sumber data Terraform

Ini sangat umum untuk tumpukan penyebaran untuk mengandalkan data dari sumber daya yang sudah ada sebelumnya. Sebagian besar alat IAC memiliki cara untuk mengimpor sumber daya yang dibuat oleh beberapa proses lain. Sumber daya yang diimpor ini biasanya hanya dibaca (meskipun peran IAM adalah pengecualian penting) dan digunakan untuk mengakses data yang dibutuhkan oleh sumber daya dalam tumpukan. AWS CloudFormation memungkinkan untuk mengimpor sumber daya, tetapi ide ini dapat dijelaskan dengan lebih baik dengan melihat. AWS Cloud Development Kit (AWS CDK)

AWS CDK Ini membantu pengembang menggunakan bahasa pemrograman yang ada untuk menghasilkan CloudFormation template. Hasil akhir dari suatu AWS CDK operasi adalah sumber daya yang diimpor di CloudFormation. Namun sintaks yang digunakan dengan AWS CDK membuat perbandingan yang lebih mudah dengan Terraform. Berikut adalah contoh mengimpor sumber daya dengan menggunakan file. AWS CDK

const importedBucket: IBucket = Bucket.fromBucketAttributes( scope, "imported-bucket", { bucketName: "My_S3_Bucket" } );

Sumber daya yang diimpor biasanya dibuat dengan memanggil metode statis pada kelas yang sama yang Anda gunakan untuk membuat sumber daya baru dari jenis yang sama. Memanggil new Bucket(... akan membuat sumber daya baru, dan memanggil Bucket.fromBucketAttributes(... impor yang sudah ada. Anda meneruskan subset properti bucket ke dalam fungsi sehingga AWS CDK dapat menemukan bucket yang tepat. Perbedaan lain, bagaimanapun, adalah bahwa membuat bucket baru mengembalikan instance lengkap Bucket kelas, dengan semua properti dan metode yang tersedia di dalamnya. Mengimpor sumber daya mengembalikanIBucket, yang merupakan tipe yang hanya berisi properti yang Bucket harus dimiliki. Meskipun Anda dapat mengimpor sumber daya dari tumpukan eksternal, opsi apa yang dapat Anda lakukan dengannya terbatas.

Di Terraform, tujuan serupa dicapai dengan menggunakan sumber data. Sebagian besar sumber daya Terraform yang ditentukan memiliki sumber data yang menyertainya yang tersedia di sampingnya. Berikut ini adalah contoh sumber daya bucket Terraform S3 diikuti oleh sumber data yang sesuai.

# S3 Bucket resource: resource "aws_s3_bucket" "My_S3_Bucket" { bucket = "My_S3_Bucket" } # S3 Bucket data source: data "aws_s3_bucket" "My_S3_Bucket" { bucket = "My_S3_Bucket" }

Satu-satunya perbedaan antara kedua item ini adalah awalan nama. Seperti yang ditunjukkan dalam dokumentasi untuk sumber data, ada lebih sedikit parameter yang tersedia yang dapat Anda berikan ke sumber data daripada sumber daya. Ini karena sumber daya menggunakan parameter tersebut untuk mendeklarasikan semua properti bucket S3 baru, sedangkan sumber data hanya membutuhkan informasi yang cukup untuk mengidentifikasi dan mengimpor data sumber daya yang ada secara unik.

Kesamaan antara sintaks sumber daya Terraform dan sumber data bisa nyaman, tetapi juga bisa bermasalah. Adalah umum bagi pengembang Terraform pemula untuk secara tidak sengaja menggunakan sumber data daripada sumber daya dalam konfigurasi mereka. Sumber data Terraform selalu hanya dibaca. Anda dapat menggunakannya sebagai pengganti sumber daya yang sesuai untuk tindakan baca (seperti memberikan nama ID ke sumber daya lain). Namun, Anda tidak dapat menggunakannya untuk tindakan menulis, yang secara fundamental mengubah beberapa aspek sumber daya yang mendasarinya. Untuk alasan ini, Anda dapat menganggap sumber data Terraform sebagai versi kloning dari sumber daya yang mendasarinya.

Mirip dengan contoh AWS CDK iBucket sebelumnya, sumber data berguna untuk skenario hanya-baca. Jika Anda perlu mendapatkan data dari sumber daya yang ada tetapi tidak perlu mempertahankan sumber daya itu dalam tumpukan Anda, gunakan sumber data. Contoh yang baik dari hal ini adalah ketika Anda membuat instans Amazon EC2 yang menggunakan VPC default akun. Karena VPC itu sudah ada, yang perlu Anda lakukan hanyalah menarik datanya. Contoh kode berikut menunjukkan cara menggunakan data untuk mengidentifikasi VPC target.

data "aws_vpc" "default" { default = true } resource "aws_instance" "instance1" { ami = "ami-123456" instance_type = "t2.micro" subnet_id = data.aws_vpc.default.main_route_table_id }