अंतिम समीक्षा: मई 2026
साधारण Terraform के साथ DOP-C02 परीक्षा के AWS संसाधनों को बनाएं — एक समय में एक ब्लॉक, प्रत्येक परीक्षा डोमेन से जुड़ा हुआ। यही कोड OpenTofu पर भी काम करता है।
इस लैब के अंत तक, आप सादे टेराफॉर्म के साथ एक पूर्ण कोड-टू-प्रोडक्शन पाइपलाइन तैयार कर चुके होंगे — एक कोडकमिट गिट रेपो, एक कोडबिल्ड प्रोजेक्ट जो आपकी टेस्ट सूट चलाता है और कलाकृतियों को पैकेज करता है, एक कोडडिप्लॉय एप्लिकेशन जो लक्ष्य तक पहुंचता है, एक कोडपाइपलाइन पाइपलाइन जो स्रोत → बिल्ड → डिप्लॉय को जोड़ती है, और एक क्लाउडवॉच सिंथेटिक्स कैनरी जो परिनियोजित एंडपॉइंट को जांचता है और प्रतिक्रिया देना बंद करने पर अलार्म बजाता है। यह पांच ब्लॉकों में DOP-C02 संदर्भ आर्किटेक्चर है।
प्रत्येक संसाधन एक सादा टेराफॉर्म है। स्निपेट्स को एक एकल main.tf में डालें, terraform init चलाएं, फिर terraform apply स्टेप-बाय-स्टेप चलाएं।
>= 1.5 या ओपनटोफू >= 1.6।us-east-1 के लिए AWS CLI प्रमाणीकृत।https://example.com का उपयोग करते हैं; उत्पादन में यह आपके एप्लिकेशन का हेल्थ-चेक एंडपॉइंट होगा।aws_s3_bucket से बदलें (कोडपाइपलाइन S3 स्रोत का समर्थन करता है)।ज्यादातर पे-पर-यूज़, कोई महत्वपूर्ण निष्क्रिय बिलिंग नहीं:
BUILD_GENERAL1_SMALL पर प्रति बिल्ड-मिनट $0.005; एक लैब बिल्ड में कुछ सेंट लगते हैं।पूरी स्टैक चल रही स्थिति में $5/माह से कम है। काम पूरा होने पर नष्ट कर दें।
मानक शुरुआत। Code* सेवाएँ क्षेत्रीय हैं — वह क्षेत्र चुनें जिसे आपके स्रोत रेपो और लक्ष्य वातावरण साझा करते हैं। लैब के लिए 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-dop-c02"
ManagedBy = "terraform"
}
}
}
resource "aws_s3_bucket" "artifacts" {
bucket_prefix = "certlabpro-dop-c02-artifacts-"
}
resource "aws_s3_bucket_public_access_block" "artifacts" {
bucket = aws_s3_bucket.artifacts.id
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}कोडकमिट AWS गिट होस्ट है। DOP-C02 कोड* सूट को एक कसकर एकीकृत कहानी के रूप में एंड-टू-एंड का परीक्षण करता है — सबसे आम परीक्षा प्रश्न पूछते हैं कि कौन सा AWS-देशी सेवा संयोजन एक दिए गए परिणाम को प्राप्त करता है, और उत्तर लगभग हमेशा कोडकमिट से शुरू होता है।
default_branch = "main" आधुनिक गिट डिफॉल्ट्स से मेल खाता है (कोडकमिट ने ऐतिहासिक रूप से master बनाया था)। apply के बाद हम जो रेपो बनाते हैं वह खाली होता है; वास्तविक उपयोग में आप buildspec.yml और appspec.yml के साथ अपनी पहली कमिट को रूट पर पुश करेंगे — ये वे फ़ाइलें हैं जिन्हें कोडबिल्ड (चरण 3) और कोडडिप्लॉय (चरण 4) प्रत्येक पाइपलाइन रन पर पढ़ते हैं।
resource "aws_codecommit_repository" "app" {
repository_name = "certlabpro-dop-c02-app"
description = "Application source for the DOP-C02 lab pipeline."
default_branch = "main"
}कोडबिल्ड आपकी buildspec.yml से बिल्ड और टेस्ट चरणों को चलाता है। DOP-C02 यहाँ प्रबंधित-छवि बनाम कस्टम-छवि ट्रेड-ऑफ का परीक्षण करता है — प्रबंधित छवियाँ शून्य-रखरखाव वाली होती हैं लेकिन शुरू होने में धीमी होती हैं; कस्टम छवियाँ आपको तेज़ कोल्ड-स्टार्ट और दोहराने योग्य टूलचेन देती हैं। लैब प्रबंधित aws/codebuild/standard:7.0 छवि का उपयोग करती है, जिसमें Node, Python, Java, Go, .NET, Ruby आउट ऑफ़ द बॉक्स शामिल हैं।
IAM भूमिका कोडबिल्ड को क्लाउडवॉच लॉग्स में लिखने (बिल्ड आउटपुट के लिए), कोडकमिट से स्रोत पढ़ने, और चरण 1 से S3 बकेट में कलाकृतियों को लिखने की अनुमति देती है। LINUX_CONTAINER + BUILD_GENERAL1_SMALL $0.005/बिल्ड-मिनट पर सबसे सस्ता टियर है।
resource "aws_iam_role" "codebuild" {
name = "certlabpro-dop-c02-codebuild"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Principal = { Service = "codebuild.amazonaws.com" }
Action = "sts:AssumeRole"
}]
})
}
resource "aws_iam_role_policy" "codebuild" {
name = "build-permissions"
role = aws_iam_role.codebuild.id
policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Effect = "Allow"
Action = ["logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents"]
Resource = "*"
},
{
Effect = "Allow"
Action = ["s3:GetObject", "s3:PutObject", "s3:ListBucket"]
Resource = [aws_s3_bucket.artifacts.arn, "${aws_s3_bucket.artifacts.arn}/*"]
},
{
Effect = "Allow"
Action = "codecommit:GitPull"
Resource = aws_codecommit_repository.app.arn
},
]
})
}
resource "aws_codebuild_project" "build" {
name = "certlabpro-dop-c02-build"
service_role = aws_iam_role.codebuild.arn
source {
type = "CODEPIPELINE"
buildspec = "buildspec.yml"
}
artifacts {
type = "CODEPIPELINE"
}
environment {
type = "LINUX_CONTAINER"
image = "aws/codebuild/standard:7.0"
compute_type = "BUILD_GENERAL1_SMALL"
privileged_mode = false
}
}कोडडिप्लॉय वास्तविक रोलआउट को संभालता है — EC2, लैम्ब्डा, या ECS पर। DOP-C02 परिनियोजन-रणनीति धुरी का बार-बार परीक्षण करता है: AllAtOnce (सबसे सस्ता, सबसे डरावना), HalfAtATime, OneAtATime, CodeDeployDefault.LambdaCanary10Percent5Minutes (लैम्ब्डा कैनरी पैटर्न), और CodeDeployDefault.ECSAllAtOnce। हम लैब के लिए लैम्ब्डा कंप्यूट प्लेटफॉर्म चुनते हैं क्योंकि इसके लिए EC2 इंस्टेंस की वास्तविक रूप से आवश्यकता नहीं होती है — यह लैब को सस्ता और कसकर केंद्रित रखता है।
परिनियोजन कॉन्फ़िगरेशन CodeDeployDefault.LambdaAllAtOnce लैम्ब्डा रणनीतियों में सबसे सरल है। उत्पादन में, जोखिम-कम करने वाले परिनियोजनों के लिए LambdaCanary10Percent5Minutes सबसे अधिक बार अनुशंसित DOP-C02 उत्तर है: यह ट्रैफ़िक का 10% नए संस्करण में स्थानांतरित करता है, क्लाउडवॉच अलार्म के लिए 5 मिनट इंतजार करता है, फिर यदि कोई समस्या नहीं होती है तो शेष को स्थानांतरित करता है।
resource "aws_iam_role" "codedeploy" {
name = "certlabpro-dop-c02-codedeploy"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Principal = { Service = "codedeploy.amazonaws.com" }
Action = "sts:AssumeRole"
}]
})
}
resource "aws_iam_role_policy_attachment" "codedeploy_lambda" {
role = aws_iam_role.codedeploy.name
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSCodeDeployRoleForLambda"
}
resource "aws_codedeploy_app" "app" {
name = "certlabpro-dop-c02-app"
compute_platform = "Lambda"
}
resource "aws_codedeploy_deployment_group" "lambda" {
app_name = aws_codedeploy_app.app.name
deployment_group_name = "default"
service_role_arn = aws_iam_role.codedeploy.arn
deployment_config_name = "CodeDeployDefault.LambdaAllAtOnce"
deployment_style {
deployment_option = "WITH_TRAFFIC_CONTROL"
deployment_type = "BLUE_GREEN"
}
auto_rollback_configuration {
enabled = true
events = ["DEPLOYMENT_FAILURE"]
}
}कोडपाइपलाइन वह ऑर्केस्ट्रेटर है जो पिछले तीन चरणों को एक एकल ग्राफ में जोड़ता है: कोडकमिट से स्रोत, कोडबिल्ड के साथ बिल्ड, कोडडिप्लॉय के साथ डिप्लॉय। हर संक्रमण एक हुक पॉइंट है — आप किसी भी दो चरणों के बीच मैन्युअल अनुमोदन, समानांतर परीक्षण चरण और सूचनाएं जोड़ सकते हैं। DOP-C02 का कॉन्फ़िगरेशन प्रबंधन और IaC डोमेन इस चरण-और-कार्य संरचना का बार-बार परीक्षण करता है।
एक बार पाइपलाइन मौजूद होने पर, आपके पास CI/CD होता है। अंतिम टुकड़ा — क्लाउडवॉच सिंथेटिक्स — परिनियोजन अवलोकन क्षमता पर लूप को बंद करता है: एक कैनरी एक प्रबंधित हेडलेस-ब्राउज़र स्क्रिप्ट (पपेटियर-आधारित) है जो एक शेड्यूल पर चलती है और क्लाउडवॉच को सफलता/विफलता की रिपोर्ट करती है। DOP-C02 का मॉनिटरिंग और लॉगिंग डोमेन इस पैटर्न पर बहुत अधिक निर्भर करता है: एक बदलाव को परिनियोजित करें → कैनरी मिनटों के भीतर प्रतिगमन को पकड़ लेता है → कोडडिप्लॉय ऑटो-रोलबैक (जिसे हमने चरण 4 में जोड़ा था) कैनरी के क्लाउडवॉच अलार्म से ट्रिगर होता है।
नीचे दिया गया कैनरी स्क्रिप्ट हर 5 मिनट में https://example.com को पोल करता है; उत्पादन में आप इसे अपने एप्लिकेशन के हेल्थ एंडपॉइंट पर इंगित करेंगे, जिसमें प्रतिक्रिया निकाय और हेडर्स पर दावे होंगे, न कि केवल HTTP 200।
# ── CodePipeline ──────────────────────────────────────────────
resource "aws_iam_role" "codepipeline" {
name = "certlabpro-dop-c02-codepipeline"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Principal = { Service = "codepipeline.amazonaws.com" }
Action = "sts:AssumeRole"
}]
})
}
resource "aws_iam_role_policy" "codepipeline" {
name = "pipeline-permissions"
role = aws_iam_role.codepipeline.id
policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Action = [
"codecommit:*",
"codebuild:*",
"codedeploy:*",
"s3:*",
"iam:PassRole",
]
Resource = "*"
}]
})
}
resource "aws_codepipeline" "main" {
name = "certlabpro-dop-c02"
role_arn = aws_iam_role.codepipeline.arn
artifact_store {
location = aws_s3_bucket.artifacts.bucket
type = "S3"
}
stage {
name = "Source"
action {
name = "Source"
category = "Source"
owner = "AWS"
provider = "CodeCommit"
version = "1"
output_artifacts = ["source"]
configuration = {
RepositoryName = aws_codecommit_repository.app.repository_name
BranchName = "main"
}
}
}
stage {
name = "Build"
action {
name = "Build"
category = "Build"
owner = "AWS"
provider = "CodeBuild"
version = "1"
input_artifacts = ["source"]
output_artifacts = ["build"]
configuration = {
ProjectName = aws_codebuild_project.build.name
}
}
}
}
# ── Synthetics canary ─────────────────────────────────────────
resource "aws_iam_role" "canary" {
name = "certlabpro-dop-c02-canary"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Principal = { Service = "lambda.amazonaws.com" }
Action = "sts:AssumeRole"
}]
})
}
resource "aws_iam_role_policy_attachment" "canary_logs" {
role = aws_iam_role.canary.name
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
}
data "archive_file" "canary_src" {
type = "zip"
output_path = "${path.module}/build/canary.zip"
source {
filename = "nodejs/node_modules/index.js"
content = <<-EOT
const synthetics = require("Synthetics");
exports.handler = async () => {
const page = await synthetics.getPage();
const res = await page.goto("https://example.com", { waitUntil: "domcontentloaded" });
if (!res.ok()) throw new Error("Status code " + res.status());
};
EOT
}
}
resource "aws_synthetics_canary" "endpoint" {
name = "certlabpro-dop-c02-endpoint"
artifact_s3_location = "s3://${aws_s3_bucket.artifacts.bucket}/canary/"
execution_role_arn = aws_iam_role.canary.arn
handler = "index.handler"
zip_file = data.archive_file.canary_src.output_path
runtime_version = "syn-nodejs-puppeteer-9.0"
start_canary = true
schedule {
expression = "rate(5 minutes)"
}
}terraform destroy इस लैब में सब कुछ नष्ट कर देता है। दो बातें:
destroy करने से पहले इसे खाली करें (aws s3 rm s3://<bucket> --recursive) या बकेट संसाधन पर force_destroy = true का उपयोग करें और नष्ट करने से पहले एक बार फिर से अप्लाई करें।start_canary = true है — यह apply के क्षण से ही 5 मिनट के अंतराल पर लगातार चल रहा है। प्रत्येक रन की लागत ~$0.0012 है; एक सप्ताह तक चलने वाली एक भूली हुई लैब कैनरी की लागत ~$0.25 है। सस्ता, लेकिन वास्तविक। काम पूरा होने पर नष्ट कर दें।DOP-C02 एक व्यापक पेशेवर क्षेत्र को कवर करता है — मल्टी-अकाउंट / मल्टी-रीजन IaC के लिए क्लाउडफॉर्मेशन स्टैकसेट्स, सर्विस कैटलॉग, AWS कॉन्फ़िग रूल्स + रेमेडिएशन, सिस्टम्स मैनेजर ऑप्ससेंटर + पैच मैनेजर, AWS हेल्थ डैशबोर्ड ऑटोमेशन, ट्रस्टेड एडवाइजर चेक, AWS बैकअप, इवेंटब्रिज पाइप्स, क्रॉस-सर्विस ऑर्केस्ट्रेशन के लिए स्टेप फंक्शंस, और डिस्ट्रीब्यूटेड ट्रेसिंग के लिए X-रे।
हम एंड-टू-एंड CI/CD पाइपलाइन पर टिके रहते हैं क्योंकि यह परीक्षा में सबसे अधिक परीक्षण किया गया आर्किटेक्चर है — अन्य सभी DOP-C02 पैटर्न (रेमेडिएशन को फीड करने वाले कॉन्फ़िग नियम, SNS के माध्यम से सिंथेटिक्स पेजिंग, कोडपाइपलाइन के माध्यम से स्टैकसेट्स का रोल आउट) इस आधार पर बनते हैं। पहले स्रोत-से-डिप्लॉय श्रृंखला को अपने हाथों में लें; एक बार जब बुनियादी बातें यांत्रिक महसूस होने लगें तो मल्टी-अकाउंट स्टैकसेट्स और क्रॉस-रीजन ऑर्केस्ट्रेशन को जोड़ें।
यहां प्रदान नहीं किए गए क्षेत्रों के लिए, इस प्रमाणपत्र पृष्ठ के ब्राउज़, मार्गदर्शिका, और Editorial अनुभागों में वैचारिक कवरेज है। एक फॉलो-अप लैब जो क्लाउडफॉर्मेशन स्टैकसेट्स + कॉन्फ़िग रूल्स + सिस्टम्स मैनेजर पैच मैनेजर जोड़ती है, बड़े पैमाने पर संचालन का प्रबंधन डोमेन को पूरा करेगी।