Data Sources によるデータの取得
Data Sources を使って既存のインフラや外部サービスの情報を取得し、より動的で柔軟な構成を実現します。
「Data Sources によるデータの取得」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
データソースとは
Terraformでは、現在の設定で管理されていない既存のインフラや外部データを参照する必要が生じることがあります。
このような場合に役立つのがデータソースです。データソースを使用すると、すでにプロビジョニングされたリソースや外部サービスに関する情報をTerraformの設定から取得できます。
データソースとリソースの違い
データソースとリソースの違いを理解することが重要です。
- リソースは、Terraformが作成、更新、または削除するインフラを定義します。
- データソースは、既存のインフラやデータに関する情報を取得するだけです。何かを作成または変更することはありません。
インフラに対する読み取り専用のクエリだと考えるとよいでしょう。
実用的なユースケース
データソースは、次のような用途で非常に役立ちます。
- 既存のVirtual Private Cloud(VPC)のIDを確認する。
- EC2インスタンス用の最新のAmazon Machine Image(AMI)を取得する。
- シークレット管理サービスからシークレットを取得する。
- DNSレコードやネットワーク設定を検索する。
これにより、設定をより動的にし、ハードコードを減らせます。
データソースを定義する
データソースブロックは、リソースブロックとよく似ています。dataキーワードで始まり、その後にプロバイダーと種類、ローカル名を指定します。
data "aws_vpc" "selected" {
filter {
name = "tag:Name"
values = ["my-existing-vpc"]
}
}取得したデータを使用する
データソースが情報を取得すると、その属性を設定の他の部分から利用できるようになります。data.<TYPE>.<NAME>.<ATTRIBUTE>という構文で参照できます。
たとえば、選択したVPCのIDを取得するには、次のようにします。
output "vpc_id" {
value = data.aws_vpc.selected.id
}最新のAMIを取得する
よくある作業の1つに、EC2インスタンス用の最新のAmazon Machine Image(AMI)の検索があります。これによりAMI IDのハードコードを避け、設定の堅牢性を高められます。
最新のAmazon Linux 2 AMIを取得する方法は次のとおりです。
provider "aws" {
region = "us-east-1"
}
data "aws_ami" "amazon_linux_2" {
most_recent = true
owners = ["amazon"]
filter {
name = "name"
values = ["amzn2-ami-hvm-*-x86_64-gp2"]
}
filter {
name = "virtualization-type"
values = ["hvm"]
}
}
output "latest_ami_id" {
value = data.aws_ami.amazon_linux_2.id
}動的なS3ポリシードキュメント
データソースはクラウドリソース専用ではありません。aws_iam_policy_documentデータソースを使用すると、複雑なIAMポリシーを構造化された形で構築できます。
これはポリシーを作成するのではなく、S3バケットなどのリソースに適用できるJSONドキュメントを生成します。
provider "aws" {
region = "us-east-1"
}
data "aws_iam_policy_document" "s3_read_only_policy" {
statement {
principals {
type = "AWS"
identifiers = ["arn:aws:iam::123456789012:user/example-user"]
}
actions = [
"s3:GetObject",
"s3:ListBucket"
]
resources = [
"arn:aws:s3:::my-example-bucket",
"arn:aws:s3:::my-example-bucket/*"
]
}
}
output "policy_json" {
value = data.aws_iam_policy_document.s3_read_only_policy.json
}検索条件を絞り込む
多くのデータソースはfilterブロックをサポートしています。これを使用すると条件を指定して結果を絞り込み、正しいリソースやデータを確実に取得できます。
フィルターでは通常、name(絞り込み対象の属性)とvalues(その属性で許容する値のリスト)を指定します。
data "aws_instance" "web" {
instance_state_names = ["running"]
filter {
name = "tag:Environment"
values = ["production"]
}
filter {
name = "instance-type"
values = ["t2.micro", "t3.micro"]
}
}データソースのベストプラクティス
設定をクリーンかつ効率的に保つには、次の点に従ってください。
- 具体的に指定する: フィルターを使用して必要なデータだけを取得し、曖昧さを避けます。
- べき等性: データソースは本質的にべき等です。つまり、複数回実行しても同じ結果になります。
- 呼び出しを最小限にする:
terraform planの処理を高速化するため、必要な場合にのみデータを取得します。 - 出力と組み合わせる: 他の設定やユーザーが必要とする可能性のある取得データを、出力を使用して公開します。
データソースクイズ
Terraformのデータソースについて、正しい説明は次のうちどれですか。
まとめ: データをクエリする
Terraformのデータソースを使用すると、既存のインフラや外部サービスに関する情報を設定からクエリして取得できることを学びました。
この強力な機能により、ハードコードされた値を避け、環境の現在の状態に適応した動的で柔軟かつ堅牢な設定を作成できます。データソースは読み取り専用であり、作成や変更は決して行わないことを覚えておいてください。
よくある質問
「Data Sources によるデータの取得」レッスンは無料ですか?
はい。「Data Sources によるデータの取得」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「Data Sources によるデータの取得」で何を学びますか?
Data Sources を使って既存のインフラや外部サービスの情報を取得し、より動的で柔軟な構成を実現します。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「Data Sources によるデータの取得」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Data Sources によるデータの取得
- Local と Remote Exec Provisioner
- Null Resource とトリガー
- 外部データとテンプレートの利用