Zuletzt überprüft: Mai 2026
Erstellen Sie die AWS-Dienste der MLA-C01-Prüfung mit reinem Terraform — ein Block nach dem anderen, jeweils abgestimmt auf eine Prüfungsdomäne. Derselbe Code funktioniert auch mit OpenTofu.
Am Ende dieses Labs haben Sie mit einfachem Terraform die Steuerungsebene einer SageMaker-basierten ML-Plattform bereitgestellt – einen S3-Bucket für Trainingsdaten und Modellartefakte, eine IAM-Rolle mit geringsten Berechtigungen, die SageMaker annimmt, eine SageMaker-Modellpaketgruppe (das Register, das Modellversionen katalogisiert) und eine EventBridge-Regel, die auf Modellgenehmigungsereignisse reagiert, sodass die Beförderung in die Produktion automatisiert werden kann.
Wir vermeiden bewusst die Bereitstellung der Datenebene – Trainingsaufträge, Endpunkte, Notebook-Instanzen, Studio-Domänen – da alle im Leerlauf kostenpflichtig sind und ein Lab zu einer Kostenfalle machen würden. Sobald die Steuerungsebene eingerichtet ist, lässt sich die Datenebene sauber integrieren: Sie verweisen einen Trainingsauftrag auf die Rolle aus Schritt 3, dieser schreibt sein Artefakt in den Bucket aus Schritt 2 und registriert eine neue Version in der Modellpaketgruppe aus Schritt 4.
Jede Ressource ist reines Terraform. Fügen Sie die Snippets in eine einzelne main.tf ein, führen Sie terraform init aus und dann terraform apply Schritt für Schritt.
>= 1.5 oder OpenTofu >= 1.6.us-east-1 (SageMaker ist in den meisten Regionen verfügbar; us-east-1 bietet die umfassendste Funktionsabdeckung, einschließlich SageMaker Pipelines).Alles in diesem Lab kostet nichts im Leerlauf:
Alles, was wir bewusst nicht bereitgestellt haben, verursacht die SageMaker-Kosten:
Sobald Sie Training oder Inferenz in dieses Lab integrieren, achten Sie auf die Rechnung. Die Steuerungsebene, die dieses Lab bereitstellt, ist der Teil, den Sie bedenkenlos laufen lassen können.
Standard-Eröffnung. SageMaker ist regional, und die meisten neueren SageMaker-Funktionen (Pipelines, Modellkarten, JumpStart) werden zuerst in us-east-1 und us-west-2 eingeführt – wählen Sie eine davon, um die geringsten Überraschungen zu erleben.
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-mla-c01"
ManagedBy = "terraform"
}
}
}Jeder SageMaker-Trainingsauftrag liest Eingabedaten von S3 und schreibt sein Modellartefakt zurück nach S3 – das ist die von SageMaker bereitgestellte Speicherschnittstelle. Wir erstellen einen Bucket mit einer Ordnerkonvention (training-data/, model-artifacts/), die die MLA-C01-Referenzarchitektur widerspiegelt.
Verschlüsselung im Ruhezustand ist für jeden ML-Datenspeicher unerlässlich – die Prüfung testet dies explizit unter Sicherheit, Compliance und Governance für ML-Lösungen. Wir verwenden hier AES256 der Einfachheit halber; in der Produktion würde ein vom Kunden verwalteter KMS-Schlüssel eine detailliertere Überwachung ermöglichen.
resource "aws_s3_bucket" "ml" {
bucket_prefix = "certlabpro-mla-c01-"
}
resource "aws_s3_bucket_public_access_block" "ml" {
bucket = aws_s3_bucket.ml.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" "ml" {
bucket = aws_s3_bucket.ml.id
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}
resource "aws_s3_bucket_versioning" "ml" {
bucket = aws_s3_bucket.ml.id
versioning_configuration {
status = "Enabled"
}
}SageMaker-Trainingsaufträge, Endpunkte und Pipelines werden alle unter einer IAM-Rolle ausgeführt. Wir erstellen eine Rolle mit einer Vertrauensrichtlinie, die sagemaker.amazonaws.com benennt und ihre Berechtigungen genau auf das beschränkt, was eine ML-Workload benötigt: Lesen aus dem Präfix für Trainingsdaten, Schreiben in das Präfix für Modellartefakte und Senden von Protokollen an CloudWatch. Die Prüfung testet dieses Prinzip der geringsten Rechte immer wieder.
Für das Lab fügen wir zusätzlich die von AWS verwaltete Richtlinie AmazonSageMakerFullAccess an, da das manuelle Abdecken jeder SageMaker-Aktion Hunderte von Zeilen umfassen würde und nicht das ist, was MLA-C01 testet. In der Produktion würden Sie dies eingrenzen – das ist eine separate Härtungsübung.
resource "aws_iam_role" "sagemaker_exec" {
name = "certlabpro-mla-c01-sagemaker-exec"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Principal = { Service = "sagemaker.amazonaws.com" }
Action = "sts:AssumeRole"
}]
})
}
resource "aws_iam_role_policy_attachment" "sagemaker_full" {
role = aws_iam_role.sagemaker_exec.name
policy_arn = "arn:aws:iam::aws:policy/AmazonSageMakerFullAccess"
}
resource "aws_iam_role_policy" "sagemaker_lab_bucket" {
name = "lab-bucket-read-write"
role = aws_iam_role.sagemaker_exec.id
policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Effect = "Allow"
Action = ["s3:GetObject", "s3:ListBucket"]
Resource = [aws_s3_bucket.ml.arn, "${aws_s3_bucket.ml.arn}/training-data/*"]
},
{
Effect = "Allow"
Action = "s3:PutObject"
Resource = "${aws_s3_bucket.ml.arn}/model-artifacts/*"
},
]
})
}Eine Modellpaketgruppe ist SageMakers Modellregister – ein benannter Container für mehrere Versionen desselben Modells, jede mit ihrem eigenen Status (PendingManualApproval, Approved, Rejected). Jede MLOps-Story, die MLA-C01 testet, läuft über dieses Objekt: Trainingspipeline registriert eine neue Version → MLOps-Ingenieur überprüft → Status wird auf Approved geändert → CI/CD-Pipeline übernimmt die Änderung und rollt das neue Modell auf den Endpunkt aus.
Die Gruppe selbst kostet nichts – es sind Metadaten. Sobald sie existiert, können Trainingsaufträge und Pipelines RegisterModel darauf aufrufen, und SageMaker verfolgt die Herkunft automatisch. Wir legen den Grundstein, auf den die EventBridge-Regel in Schritt 5 reagieren wird.
resource "aws_sagemaker_model_package_group" "main" {
model_package_group_name = "certlabpro-mla-c01-models"
model_package_group_description = "Lab-only model registry for the MLA-C01 walkthrough."
}Jede SageMaker-Modellregisteraktion sendet ein EventBridge-Ereignis – Registrierung, Statusänderungen, Löschungen. Der MLA-C01-Bereich Bereitstellung und Orchestrierung testet genau dieses Muster: Die Modellgenehmigung sollte die nächste Automatisierung (Bereitstellung in Staging, Ausführen von Integrationstests, Benachrichtigung im Bereitschaftsdienst) auslösen, ohne dass ein Mensch Knöpfe in der Konsole drückt.
Wir erstellen eine EventBridge-Regel, die auf Approved-Statusübergänge für unsere spezifische Modellpaketgruppe passt, und zielen auf ein SNS-Thema als Platzhalter für nachgelagerte Systeme ab – in der Produktion würden Sie auf eine Step Functions-Zustandsmaschine, eine Lambda-Funktion oder eine CodePipeline-Pipeline verweisen. Die Struktur bleibt gleich; nur die Ziel-ARN ändert sich.
Mit diesem letzten Teil ist die Steuerungsebenenkette abgeschlossen: Ein Trainingsauftrag (Datenebene, hier nicht bereitgestellt) schreibt sein Artefakt in S3 aus Schritt 2, übernimmt die Rolle aus Schritt 3 dafür, registriert eine neue Version in der Modellpaketgruppe aus Schritt 4, und jede Genehmigung löst die nachgelagerte Automatisierung über die EventBridge-Regel aus Schritt 5 aus. Schließen Sie einen Trainingsauftrag an und die Schleife läuft von selbst.
resource "aws_sns_topic" "model_approvals" {
name = "certlabpro-mla-c01-model-approvals"
}
resource "aws_cloudwatch_event_rule" "model_approved" {
name = "certlabpro-mla-c01-model-approved"
description = "Fires when a model version in our registry is approved."
event_pattern = jsonencode({
source = ["aws.sagemaker"]
"detail-type" = ["SageMaker Model Package State Change"]
detail = {
ModelPackageGroupName = [aws_sagemaker_model_package_group.main.model_package_group_name]
ModelApprovalStatus = ["Approved"]
}
})
}
resource "aws_cloudwatch_event_target" "notify_sns" {
rule = aws_cloudwatch_event_rule.model_approved.name
arn = aws_sns_topic.model_approvals.arn
}
resource "aws_sns_topic_policy" "allow_events" {
arn = aws_sns_topic.model_approvals.arn
policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Principal = { Service = "events.amazonaws.com" }
Action = "sns:Publish"
Resource = aws_sns_topic.model_approvals.arn
}]
})
}terraform destroy entfernt alles in diesem Lab sauber. Hinweise:
force_destroy = false (die sichere Standardeinstellung) – wenn Sie Trainingsdaten hochgeladen haben, leeren Sie ihn über die Konsole (oder aws s3 rm s3://<bucket> --recursive), bevor Sie ihn zerstören.aws sagemaker delete-model-package), und zerstören Sie sie dann.MLA-C01 deckt viele SageMaker-Oberflächen ab, die dieses Lab nicht bereitstellt – Trainingsaufträge (Rechenleistung, die pro Sekunde abgerechnet wird), Endpunkte (Instanzen, die rund um die Uhr abgerechnet werden), Studio-Domänen (Multi-User-IDE), Notebook-Instanzen (Einzel-User-IDE, die bei Vergessen leicht rund um die Uhr abgerechnet wird), JumpStart (Ein-Klick-Bereitstellung von Basismodellen), Feature Store, Model Monitor, Clarify (Bias-Erkennung), Edge Manager, Ground Truth (Beschriftung), Pipelines (die Orchestrierungsebene über all dem) und Autopilot.
Wir konzentrieren uns auf die Steuerungsebene – die Teile, die Sie ohne Kostenüberraschungen laufen lassen können –, denn das ist die Grundlage, an die sich alle anderen MLA-C01-Muster anbinden. Ein Trainingsauftrag-Slot in Ihrem Konto verweist auf die Rolle und den Bucket, die dieses Lab erstellt hat. Eine Endpunktbereitstellung liest das Modellartefakt, auf das dieses Register verweist. Pipelines orchestrieren die Registrierung in der Gruppe, die dieses Lab erstellt hat.
Für praktische Übungen mit den Datenebenen-Komponenten ist der richtige Ansatz ein Folge-Lab, das jeweils eine davon hinzufügt (ein einzelner Trainingsauftrag, der einmal läuft und stoppt; ein einzelner Endpunkt hinter einem expliziten Budgetalarm) – niemals mehrere auf einmal, da die Kosten real und kumulativ sind. Die konzeptionelle Abdeckung des Rests finden Sie in den Abschnitten Durchsuchen, Handbuch und Editorial dieser Zertifizierungsseite.