Последняя проверка: май 2026 г.
Разверните сервисы AWS для экзамена MLA-C01 с помощью чистого Terraform: пошаговое руководство с привязкой каждого блока к разделам экзамена. Код также совместим с OpenTofu.
К концу этой лабораторной работы вы развернете с помощью простого Terraform уровень управления ML-платформы на базе SageMaker — бакет S3 для обучающих данных и артефактов модели, роль IAM с минимальными привилегиями, которую принимает SageMaker, группу пакетов моделей SageMaker (реестр, каталогизирующий версии моделей) и правило EventBridge, которое реагирует на события одобрения модели, чтобы можно было автоматизировать продвижение в производство.
Мы намеренно избегаем развертывания уровня данных — заданий обучения, конечных точек, экземпляров ноутбуков, доменов Studio — потому что все они тарифицируются в режиме ожидания и превратили бы лабораторную работу в ловушку для счетов.
Как только уровень управления будет настроен, уровень данных подключается без проблем: вы указываете заданию обучения роль из Шага 3, оно записывает свой артефакт в бакет из Шага 2 и регистрирует новую версию в группу пакетов моделей из Шага 4.
Каждый ресурс — это простой Terraform. Вставьте фрагменты кода в один файл main.tf, запустите terraform init, затем terraform apply шаг за шагом.
>= 1.5 или OpenTofu >= 1.6.us-east-1 (SageMaker доступен в большинстве регионов; us-east-1 имеет самое широкое покрытие функций, включая SageMaker Pipelines).Все в этой лабораторной работе ничего не стоит в режиме ожидания:
Все, что мы намеренно не развертывали, — это то, где SageMaker тратит деньги:
Как только вы подключите обучение или вывод в этой лабораторной работе, следите за счетом. Уровень управления, который предоставляет эта лабораторная работа, — это та часть, которую можно безопасно оставить работающей.
Стандартное начало. SageMaker является региональным сервисом, и большинство новых функций SageMaker (Pipelines, Model Cards, JumpStart) сначала появляются в us-east-1 и us-west-2 — выберите один из них, чтобы избежать сюрпризов.
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"
}
}
}Каждое задание обучения SageMaker читает входные данные из S3 и записывает свой артефакт модели обратно в S3 — это интерфейс хранения, который предоставляет SageMaker. Мы создаем один бакет с соглашением об именовании папок (training-data/, model-artifacts/), которое отражает эталонную архитектуру MLA-C01.
Шифрование в состоянии покоя является обязательным для любого хранилища данных ML — экзамен явно проверяет это в разделе Безопасность, соответствие требованиям и управление для ML-решений. Мы используем AES256 здесь для простоты; в производстве ключ KMS, управляемый клиентом, предоставляет вам более детальный журнал аудита.
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, конечные точки и конвейеры выполняются под ролью IAM. Мы создаем одну роль с политикой доверия, которая указывает sagemaker.amazonaws.com, и ограничиваем ее разрешения до того, что точно требуется рабочей нагрузке ML: чтение из префикса обучающих данных, запись в префикс артефактов модели и отправка журналов в CloudWatch. Экзамен постоянно проверяет эту модель минимальных привилегий.
Для лабораторной работы мы дополнительно прикрепляем управляемую AWS политику AmazonSageMakerFullAccess, потому что ручное покрытие каждого действия SageMaker займет сотни строк и не является предметом тестирования MLA-C01. В производстве вы бы сузили эти разрешения — это отдельное упражнение по ужесточению безопасности.
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/*"
},
]
})
}Группа пакетов моделей — это реестр моделей SageMaker, именованный контейнер для нескольких версий одной и той же модели, каждая со своим статусом (PendingManualApproval, Approved, Rejected). Каждая история MLOps, которую проверяет MLA-C01, проходит через этот объект: конвейер обучения регистрирует новую версию → инженер MLOps проверяет → статус меняется на Approved → конвейер CI/CD подхватывает изменение и развертывает новую модель на конечной точке.
Сама группа ничего не стоит — это метаданные. Как только она существует, задания обучения и конвейеры могут вызывать RegisterModel для нее, и SageMaker автоматически отслеживает происхождение. Мы закладываем основу, на которую будет реагировать правило EventBridge из Шага 5.
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."
}Каждое действие реестра моделей SageMaker генерирует событие EventBridge — регистрацию, изменения статуса, удаления. Домен Развертывание и оркестровка MLA-C01 проверяет этот точный шаблон: одобрение модели должно запускать следующую автоматизацию (развертывание на промежуточном этапе, запуск интеграционных тестов, оповещение дежурного) без вмешательства человека через консоль.
Мы создаем правило EventBridge, которое соответствует переходам статуса Approved для нашей конкретной группы пакетов моделей, и нацеливаем его на топик SNS в качестве заполнителя для нижестоящих систем — в производстве вы бы указали на конечный автомат Step Functions, Lambda или конвейер CodePipeline. Структура остается прежней; меняется только ARN целевого объекта.
С этим последним элементом цепочка уровня управления завершена: задание обучения (уровень данных, здесь не предусмотрен) записывает свой артефакт в S3 из Шага 2, принимает роль из Шага 3 для этого, регистрирует новую версию в группе пакетов моделей из Шага 4, и любое одобрение запускает нижестоящую автоматизацию через правило EventBridge из Шага 5. Подключите задание обучения, и цикл запустится сам по себе.
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 чисто удаляет все в этой лабораторной работе. Примечания:
force_destroy = false (безопасное значение по умолчанию) — если вы загружали в него какие-либо обучающие данные, опустошите его через консоль (или aws s3 rm s3://<bucket> --recursive) перед удалением.aws sagemaker delete-model-package), затем удалите группу.MLA-C01 охватывает множество поверхностей SageMaker, которые эта лабораторная работа не предоставляет — задания обучения (вычисления, которые тарифицируются посекундно), конечные точки (экземпляры, которые тарифицируются 24/7), домены Studio (многопользовательская IDE), экземпляры ноутбуков (однопользовательская IDE, которая легко тарифицируется 24/7, если ее забыть), JumpStart (развертывания базовых моделей в один клик), Feature Store, Model Monitor, Clarify (обнаружение предвзятости), Edge Manager, Ground Truth (разметка), Pipelines (уровень оркестровки над всем этим) и Autopilot.
Мы придерживаемся уровня управления — частей, которые вы можете оставить работающими без сюрпризов в счетах, — потому что это основа, к которой прикрепляются все остальные паттерны MLA-C01. Слот задания обучения в вашем аккаунте указывает на роль и бакет, созданные этой лабораторной работой. Развертывание конечной точки считывает артефакт модели, на который ссылается этот реестр. Конвейеры оркестрируют регистрацию в группу, созданную этой лабораторной работой.
Для практического ознакомления с компонентами уровня данных правильным шагом является последующая лабораторная работа, которая добавляет один из них за раз (одно задание обучения, которое запускается один раз и останавливается; одна конечная точка за явным бюджетным оповещением) — никогда несколько одновременно, потому что затраты реальны и кумулятивны. Концептуальное освещение остального содержится в разделах Просмотр, Справочник и Editorial этой страницы сертификации.