最終確認: 2026年5月
DEA-C01 試験の対象となる AWS サービスを、プレーンな Terraform を使用して構築します。1 ブロックずつ、それぞれ試験ドメインに関連付けられています。同じコードが OpenTofu でも動作します。
このラボの終了までに、プレーンなTerraformを使用して、すべてのAWSデータレイクが共有する基盤をプロビジョニングします。具体的には、階層型ライフサイクルポリシーを持つS3バケット、Glueデータカタログデータベース、S3に格納されるオブジェクトからスキーマを発見するGlueクローラー、そしてサーバーをプロビジョニングせずにデータレイクをクエリできるAthenaワークグループです。これはDEA-C01が「データレイク・オン・S3」と呼ぶアーキテクチャであり、試験問題の約4分の1に登場します。
すべてのリソースはプレーンなTerraformであり、同じコードはOpenTofuで変更なしに動作します。これらのスニペットを単一のmain.tfファイルに配置し、terraform initを実行し、その後terraform applyを段階的に実行してください。
>= 1.5 または OpenTofu >= 1.6。us-east-1で認証済みのAWS CLI(どのリージョンでも動作しますが、ここではus-east-1をデフォルトとします)。ここで使用するすべてのリソースはアイドル時には$0です:
唯一の注意点は、Glueクローラーをスケジュールで実行し続けることです。もしステップ4でscheduleをcron式に設定し、削除を忘れてしまうと、クローラーは永続的に実行され続けます。1回あたりの料金はわずかですが、1年間毎日実行されれば合計でかなりの額になります。完了したら削除してください。
標準的な開始です。GlueとAthenaはリージョンサービスです。生データがすでに存在するリージョンを選択してください。なぜなら、ペタバイト規模ではリージョン間のデータ転送料金が急速に増加するからです。ここではus-east-1をデフォルトとします。
terraform {
required_version = ">= 1.5"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.60"
}
}
}
provider "aws" {
region = "us-east-1"
default_tags {
tags = {
Project = "certlabpro-dea-c01"
ManagedBy = "terraform"
}
}
}S3バケットはデータレイク全体の基盤です。DEA-C01では特にストレージクラスのライフサイクルがテストされます — コールドデータは、時間経過とともにStandard → Standard-IA → Glacier Flexible → Glacier Deep Archiveへと移行させることで、80%以上のコストを節約できます。ここでは暗号化を有効にし、パブリックアクセスをロックダウンし、DEA-C01で最も頻繁にテストされるコストパターンを反映した3層のライフサイクルルールを設定します。
移行は、30日後 → IA、90日後 → Glacier Flexible Retrieval、180日後 → Deep Archiveです。これらの日数は試験の最小要件です(30日未満でIAに移行することはできません — これはS3の厳格な制限であり、DEA-C01でテストされます)。新しいデータとアーカイブデータを混在させるデータレイクの場合、このライフサイクルにより、アプリケーションに変更を加えることなくストレージコストを60〜90%節約できます。
resource "aws_s3_bucket" "lake" {
bucket_prefix = "certlabpro-dea-c01-"
}
resource "aws_s3_bucket_public_access_block" "lake" {
bucket = aws_s3_bucket.lake.id
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
resource "aws_s3_bucket_server_side_encryption_configuration" "lake" {
bucket = aws_s3_bucket.lake.id
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}
resource "aws_s3_bucket_lifecycle_configuration" "lake" {
bucket = aws_s3_bucket.lake.id
rule {
id = "tier-cold-data"
status = "Enabled"
filter { prefix = "raw/" }
transition {
days = 30
storage_class = "STANDARD_IA"
}
transition {
days = 90
storage_class = "GLACIER"
}
transition {
days = 180
storage_class = "DEEP_ARCHIVE"
}
}
}Glueデータカタログは、Athena、EMR、Redshift Spectrum、Lake Formation、SageMaker Feature Storeなど、他のすべてのAWS分析サービスが読み取る中央メタデータストアです。DEA-C01では、この中央カタログモデルが徹底的にテストされます。カタログを一度プロビジョニングすれば、アカウント内のすべての分析インターフェースが自動的にそれを使用します。
Glueにおけるdatabaseは名前空間(PostgreSQLの「スキーマ」と考えてください)であり、tableはS3内のオブジェクトを構造化データとして読み取る方法を記述するメタデータです。ここではデータベースを作成し、ステップ4のクローラーがその下にテーブルを投入します。
resource "aws_glue_catalog_database" "main" {
name = "certlabpro_dea_c01"
description = "Glue Catalog database for the certlabpro DEA-C01 lab."
location_uri = "s3://${aws_s3_bucket.lake.bucket}/raw/"
}GlueクローラーはS3パスをたどり、ファイルの内容からカラム名と型を推測し、ステップ3のカタログデータベースにスキーマを書き込みます。新しいファイルが到着するたびにクローラーを再実行すると、テーブルは新しいパーティションやスキーマの進化を自動的に取得します。DEA-C01では、この発見パターンが「データストレージと管理」ドメインでテストされます。これは、データエンジニアが手動でDDLを作成するのと、データエンジニアがGlueに任せるのとでは違いがあります。
アタッチするIAMロールは、クローラーにステップ2のバケットから読み取り、ステップ3のカタログに書き込むためのアクセス許可を与えます。AWSは、このほとんどをカバーする管理ポリシーAWSGlueServiceRoleを公開しています。これをアタッチし、特定のバケットへのインラインS3読み取りアクセスを追加します。ここでは意図的にscheduleを設定していません。毎日カタログを更新したい場合は、後でschedule = "cron(0 5 * * ? *)"を挿入してください。
resource "aws_iam_role" "glue_crawler" {
name = "certlabpro-dea-c01-glue-crawler"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Principal = { Service = "glue.amazonaws.com" }
Action = "sts:AssumeRole"
}]
})
}
resource "aws_iam_role_policy_attachment" "glue_service" {
role = aws_iam_role.glue_crawler.name
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole"
}
resource "aws_iam_role_policy" "glue_lake_read" {
name = "read-lake-bucket"
role = aws_iam_role.glue_crawler.id
policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Action = ["s3:GetObject", "s3:ListBucket"]
Resource = [aws_s3_bucket.lake.arn, "${aws_s3_bucket.lake.arn}/*"]
}]
})
}
resource "aws_glue_crawler" "raw_data" {
name = "certlabpro-dea-c01-raw-data"
database_name = aws_glue_catalog_database.main.name
role = aws_iam_role.glue_crawler.arn
s3_target {
path = "s3://${aws_s3_bucket.lake.bucket}/raw/"
}
schema_change_policy {
update_behavior = "UPDATE_IN_DATABASE"
delete_behavior = "LOG"
}
}AthenaはSQLを使ってステップ3~4のカタログをクエリします — サーバーは不要で、スキャンされたTBごとに料金が発生します。DEA-C01の「データ運用」ドメインでは、2つの特定のAthena属性が重点的にテストされます。それはクエリごとのデータスキャン制限(ここでは暴走クエリが誤って100 TBをスキャンするのを防ぐために1 GBに制限されています)と、個別の結果バケットです(Athenaはクエリ出力をS3に書き戻します。結果をソースバケットに混ぜるのは、試験で頻繁に出るアンチパターンです)。
ワークグループはガバナンスの単位です。厳格なスキャン制限を持つproductionワークグループと、より高い制限を持つanalytics-power-usersワークグループを設定し、どちらかにIAMプリンシパルをアタッチできます。この最後のピースが整うことで、データレイクの基盤が完成します。データはs3://<bucket>/raw/に格納され、ステップ4のクローラーがそれをカタログ化し、Athenaはこのワークグループが設定したコスト制限内でクエリを実行します。
resource "aws_s3_bucket" "athena_results" {
bucket_prefix = "certlabpro-dea-c01-athena-results-"
}
resource "aws_s3_bucket_public_access_block" "athena_results" {
bucket = aws_s3_bucket.athena_results.id
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
resource "aws_athena_workgroup" "main" {
name = "certlabpro-dea-c01"
state = "ENABLED"
configuration {
enforce_workgroup_configuration = true
publish_cloudwatch_metrics_enabled = true
bytes_scanned_cutoff_per_query = 1073741824 # 1 GB per query — runaway-query guardrail
result_configuration {
output_location = "s3://${aws_s3_bucket.athena_results.bucket}/output/"
encryption_configuration {
encryption_option = "SSE_S3"
}
}
}
}terraform destroyは、このラボのすべてのリソースを削除します。2つの注意点があります:
force_destroy = false(安全なデフォルト)であるため、いずれかのバケットにオブジェクトが含まれている場合、destroyは失敗します(ステップ2のデータレイクバケットには生ファイルが格納され、Athenaはステップ5のバケットに結果を書き込みます)。削除する前に、コンソール(またはaws s3 rm s3://<bucket> --recursive)を介して両方を空にしてください。DEA-C01は、このラボが5つのプレーンなTerraformステップで示すことができるよりも多くの分析領域をカバーしています — ストリーミング取り込みのためのKinesis Data Streams + Kinesis Data Firehose、分散SparkのためのAmazon EMR、サーバーレス変換のためのAWS Lambda、パイプラインオーケストレーションのためのStep Functions、データウェアハウジングのためのRedshift、マネージドKafkaのためのMSK、ログ分析のためのOpenSearch、BIダッシュボードのためのQuickSight、データベース移行のためのAWS DMS、そしてきめ細かいデータレイク権限のためのLake Formationなどです。
ここでは、他のすべてのDEA-C01パターンが構築される基盤であるため、最も頻繁にテストされる単一の基盤、つまりS3 + Glueカタログ + Glueクローラー + Athenaに限定します。Kinesis FirehoseはこのS3バケットに書き込み、EMRはこのGlueカタログから読み取り、Lake FormationはこのAthenaワークグループをゲートします。この基盤をきれいに構築できれば、残りは追加機能です。
Kinesis Firehose → S3 → Glue → Athena(同じチェーンのストリーミング版)をカバーする2番目のハンズオンラボは、自然な次のステップとなるでしょう。残りの概念的な内容は、この認定ページの閲覧、プレイブック、およびEditorialセクションにあります。