अंतिम समीक्षा: मई 2026
साधारण Terraform के साथ DVA-C02 परीक्षा के AWS संसाधनों को बनाएं — एक समय में एक ब्लॉक, प्रत्येक परीक्षा डोमेन से जुड़ा हुआ। यही कोड OpenTofu पर भी काम करता है।
इस लैब के अंत तक आप, सादे टेराफॉर्म के साथ, कैननिकल AWS सर्वरलेस माइक्रोसर्विस — एक डायनामोडीबी (DynamoDB) तालिका, न्यूनतम-विशेषाधिकार IAM भूमिका वाला एक लैम्ब्डा फ़ंक्शन, उसके सामने एक HTTP API गेटवे, और क्लाउडवॉच लॉग्स (CloudWatch Logs) + एक लैम्ब्डा-त्रुटि अलार्म — प्रावधानित कर चुके होंगे ताकि आपको पता चले कि सेवा कब बाधित होती है। यह वह आर्किटेक्चर है जिसका DVA-C02 हर दूसरे प्रश्न पर परीक्षण करता है।
प्रत्येक संसाधन सादा टेराफॉर्म है — वही कोड बिना किसी संशोधन के ओपनटोफू (OpenTofu) पर काम करता है। कोई वेरिएबल नहीं, कोई मॉड्यूल नहीं, कोई रिमोट स्टेट नहीं। स्निपेट्स को एक ही main.tf में डालें, एक बार terraform init चलाएँ, फिर terraform apply को चरण-दर-चरण चलाएँ।
>= 1.5 या ओपनटोफू (OpenTofu) >= 1.6।us-east-1 के लिए AWS CLI प्रमाणित।archive_file के माध्यम से योजना-समय पर एक .zip में इनलाइन किया गया है — किसी अलग बिल्ड चरण की आवश्यकता नहीं है।यहां सभी संसाधन पे-पर-यूज़ (उपयोग के अनुसार भुगतान), कोई निष्क्रिय बिलिंग नहीं हैं:
पूरा स्टैक $0 पर निष्क्रिय रहता है। लागत की चिंता के बजाय आदत के तौर पर काम पूरा होने पर नष्ट कर दें।
मानक शुरुआत: aws ~> 5.60 को पिन करें, us-east-1 पर डिफ़ॉल्ट करें, प्रोजेक्ट नाम के साथ सब कुछ टैग करें ताकि कॉस्ट एक्सप्लोरर (Cost Explorer) बाद में रिपोर्ट कर सके कि इस लैब पर कितना खर्च हुआ (~$0 अपेक्षित, लेकिन यह आदत परीक्षा-प्रासंगिक बिंदु है)।
terraform {
required_version = ">= 1.5"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.60"
}
archive = {
source = "hashicorp/archive"
version = "~> 2.4"
}
}
}
provider "aws" {
region = "us-east-1"
default_tags {
tags = {
Project = "certlabpro-dva-c02"
ManagedBy = "terraform"
}
}
}डायनामोडीबी वह NoSQL स्टोर है जिसके लिए DVA-C02 आपसे किसी भी "सिंगल-डिजिट-मिलीसेकंड लेटेंसी एट स्केल" (single-digit-millisecond latency at scale) परिदृश्य में पहुंचने की उम्मीद करता है। हम ऑन-डिमांड बिलिंग (कोई क्षमता योजना नहीं), एक विभाजन कुंजी, और स्वचालित रिकॉर्ड समाप्ति के लिए टीटीएल (TTL) चालू करके एक तालिका बनाते हैं — कैशिंग, सत्र स्टोरेज, और स्वाभाविक रूप से समाप्त होने वाले डेटा के साथ किसी भी वर्कलोड के लिए एक आवर्ती DVA-C02 पैटर्न।
इस लैब में कोई सॉर्ट कुंजी नहीं; हम केवल कुंजी-मान एक्सेस करेंगे। पॉइंट-इन-टाइम रिकवरी (point-in-time recovery) किसी भी प्रोडक्शन तालिका के लिए डिफ़ॉल्ट रूप से चालू होती है जिसे परीक्षा आपसे प्रावधानित करने की उम्मीद करती है; हम इसे यहां भी सक्षम करते हैं। billing_mode = PAY_PER_REQUEST और point_in_time_recovery दोनों ही उच्च-आवृत्ति वाले परीक्षा विशेषताएँ हैं।
resource "aws_dynamodb_table" "items" {
name = "certlabpro-dva-c02-items"
billing_mode = "PAY_PER_REQUEST"
hash_key = "id"
attribute {
name = "id"
type = "S"
}
ttl {
attribute_name = "expires_at"
enabled = true
}
point_in_time_recovery {
enabled = true
}
}लैम्ब्डा वह जगह है जहाँ हमारा एप्लिकेशन लॉजिक रहता है। हम इसे न्यूनतम-विशेषाधिकार भूमिका देते हैं: यह अपने क्लाउडवॉच लॉग समूह (CloudWatch log group) (AWSLambdaBasicExecutionRole प्रबंधित नीति) में लिख सकता है और चरण 2 में बनाई गई केवल एक तालिका के खिलाफ ठीक चार डायनामोडीबी कार्यों (GetItem, PutItem, UpdateItem, Query) को कॉल कर सकता है।
archive_file डेटा स्रोत इनलाइन पायथन हैंडलर को प्लान समय पर एक .zip में बंडल करता है, इसलिए कोई अलग बिल्ड चरण नहीं होता है। हैंडलर जानबूझकर बहुत छोटा है (JSON के रूप में पाथ + तालिका नाम को वापस दर्शाता है) — DVA-C02 लैम्ब्डा कोड की तुलना में लैम्ब्डा कॉन्फ़िगरेशन का कहीं अधिक परीक्षण करता है, और परीक्षा-प्रासंगिक विशेषताएँ यहाँ हैं: runtime, handler, timeout, memory_size, पर्यावरण चर, और भूमिका।
data "archive_file" "lambda_src" {
type = "zip"
output_path = "${path.module}/build/handler.zip"
source {
filename = "index.py"
content = <<-EOT
import json, os
def handler(event, context):
return {
"statusCode": 200,
"headers": {"Content-Type": "application/json"},
"body": json.dumps({
"table": os.environ["TABLE_NAME"],
"path": event.get("rawPath", "/"),
}),
}
EOT
}
}
resource "aws_iam_role" "lambda" {
name = "certlabpro-dva-c02-lambda"
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" "lambda_logs" {
role = aws_iam_role.lambda.name
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
}
resource "aws_iam_role_policy" "lambda_ddb" {
name = "ddb-table-access"
role = aws_iam_role.lambda.id
policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Action = ["dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:Query"]
Resource = aws_dynamodb_table.items.arn
}]
})
}
resource "aws_lambda_function" "api" {
function_name = "certlabpro-dva-c02-api"
role = aws_iam_role.lambda.arn
runtime = "python3.12"
handler = "index.handler"
filename = data.archive_file.lambda_src.output_path
source_code_hash = data.archive_file.lambda_src.output_base64sha256
timeout = 10
memory_size = 256
environment {
variables = {
TABLE_NAME = aws_dynamodb_table.items.name
}
}
}
resource "aws_cloudwatch_log_group" "lambda" {
name = "/aws/lambda/${aws_lambda_function.api.function_name}"
retention_in_days = 7
}एपीआई गेटवे (API Gateway) वह है जो हमारे लैम्ब्डा को ऐसा कुछ बनाता है जिसे दुनिया कॉल कर सकती है। DVA-C02 विशेष रूप से अधिकांश आधुनिक प्रश्नों में HTTP APIs (सस्ता, तेज, नया API गेटवे फ्लेवर) का REST APIs (पुराना फ्लेवर) पर परीक्षण करता है — HTTP APIs लगभग 70% सस्ते और लगभग 60% कम-लेटेंसी वाले होते हैं, और वे उसी लैम्ब्डा इंटीग्रेशन का समर्थन करते हैं जिसकी हमें आवश्यकता है।
तीन संसाधन इसे एक साथ जोड़ते हैं: स्वयं API, एक इंटीग्रेशन जो हमारे लैम्ब्डा की ओर इंगित करता है, और एक रूट जो आने वाले ANY / रिक्वेस्ट को उस इंटीग्रेशन में मैप करता है। ऑटो-डिप्लॉय स्टेज का मतलब है कि API में बदलाव terraform apply पर तुरंत प्रभावी होते हैं।
aws_lambda_permission वह हिस्सा है जिसे शुरुआती लोग भूल जाते हैं: API गेटवे फ़ंक्शन की अपनी संसाधन नीति के बाहर से हमारे लैम्ब्डा को आमंत्रित कर रहा है, इसलिए हमें ऐसा करने की अनुमति देने की आवश्यकता है। इस संसाधन के बिना, API रिक्वेस्ट को स्वीकार करेगा और फिर एक 500 वापस करेगा, एक लैम्ब्डा को आमंत्रित करने का प्रयास करेगा जिसे उसे आमंत्रित करने की अनुमति नहीं है।
resource "aws_apigatewayv2_api" "main" {
name = "certlabpro-dva-c02"
protocol_type = "HTTP"
}
resource "aws_apigatewayv2_integration" "lambda" {
api_id = aws_apigatewayv2_api.main.id
integration_type = "AWS_PROXY"
integration_uri = aws_lambda_function.api.invoke_arn
payload_format_version = "2.0"
}
resource "aws_apigatewayv2_route" "root" {
api_id = aws_apigatewayv2_api.main.id
route_key = "ANY /"
target = "integrations/${aws_apigatewayv2_integration.lambda.id}"
}
resource "aws_apigatewayv2_stage" "default" {
api_id = aws_apigatewayv2_api.main.id
name = "$default"
auto_deploy = true
}
resource "aws_lambda_permission" "apigw" {
statement_id = "AllowAPIGatewayInvoke"
action = "lambda:InvokeFunction"
function_name = aws_lambda_function.api.function_name
principal = "apigateway.amazonaws.com"
source_arn = "${aws_apigatewayv2_api.main.execution_arn}/*/*"
}
output "api_url" {
value = aws_apigatewayv2_api.main.api_endpoint
}हर लैम्ब्डा क्लाउडवॉच (CloudWatch) को एक Errors मेट्रिक उत्सर्जित करता है — उन इन्वोकेशन की गणना जो त्रुटिपूर्ण थे। DVA-C02 मॉनिटरिंग, लॉगिंग और समस्या निवारण (Monitoring, Logging, and Troubleshooting) डोमेन (परीक्षा का ~12%) यह परीक्षण कर रहा है कि क्या आप इसे पहले दिन से ही उपयोग करते हैं। हम लैम्ब्डा की त्रुटि दर पर एक क्लाउडवॉच अलार्म बनाते हैं और SNS के माध्यम से एक ईमेल पते पर सूचनाएं भेजते हैं।
terraform apply के बाद, AWS email_endpoint में दिए गए पते पर एक पुष्टिकरण ईमेल भेजता है — एक बार सदस्यता की पुष्टि करें पर क्लिक करें, और त्रुटियाँ बढ़ने पर अलार्म वास्तव में आप तक पहुँचेगा।
चरण 2 से 5 तक का संयोजन संपूर्ण माइक्रोसर्विस है: एक स्टेटफुल स्टोर (DynamoDB), स्टेटलेस कंप्यूट (Lambda), एक HTTPS एज (API Gateway HTTP API), और ऑपरेशनल विजिबिलिटी (CloudWatch Logs + अलार्म)। यह DVA-C02 आर्किटेक्चर पांच ब्लॉक में है।
resource "aws_sns_topic" "alerts" {
name = "certlabpro-dva-c02-alerts"
}
resource "aws_sns_topic_subscription" "alerts_email" {
topic_arn = aws_sns_topic.alerts.arn
protocol = "email"
endpoint = "you@example.com" # replace with your real email
}
resource "aws_cloudwatch_metric_alarm" "lambda_errors" {
alarm_name = "certlabpro-dva-c02-lambda-errors"
comparison_operator = "GreaterThanThreshold"
evaluation_periods = 1
metric_name = "Errors"
namespace = "AWS/Lambda"
period = 300
statistic = "Sum"
threshold = 5
alarm_description = "Lambda errored more than 5 times in 5 minutes."
alarm_actions = [aws_sns_topic.alerts.arn]
treat_missing_data = "notBreaching"
dimensions = {
FunctionName = aws_lambda_function.api.function_name
}
}terraform destroy इस लैब में सब कुछ साफ-सुथरा हटा देता है। दो बातें ध्यान दें:
DVA-C02 इस लैब की क्षमता से अधिक डेवलपर-उन्मुख सेवाओं को कवर करता है — ऑर्केस्ट्रेशन के लिए स्टेप फंक्शंस (Step Functions), एसिंक्रोनस मैसेजिंग के लिए SQS + SNS, शेड्यूल्ड जॉब्स के लिए इवेंटब्रिज (EventBridge), रीयल-टाइम पाइपलाइन के लिए किनेसिस डेटा स्ट्रीम्स (Kinesis Data Streams), डिस्ट्रीब्यूटेड ट्रेसिंग के लिए X-Ray, सीक्रेट्स मैनेजर (Secrets Manager) + पैरामीटर स्टोर (Parameter Store), उपयोगकर्ता प्रमाणीकरण के लिए कॉग्निटो (Cognito), ग्राफक्यूएल (GraphQL) के लिए ऐपसिंक (AppSync), कंटेनरों के लिए ECS / EKS / फारगेट (Fargate), CI/CD के लिए कोडकमिट (CodeCommit) + कोडबिल्ड (CodeBuild) + कोडडिप्लॉय (CodeDeploy) + कोडपाइपलाइन (CodePipeline), स्टैटिक एसेट्स के लिए S3, और एज के लिए क्लाउडफ्रंट (CloudFront)।
हम एकल सर्वाधिक-परीक्षणित सर्वरलेस माइक्रोसर्विस पैटर्न — लैम्ब्डा + एपीआई गेटवे HTTP API + डायनामोडीबी + क्लाउडवॉच — पर टिके रहते हैं क्योंकि यह वह आर्किटेक्चर है जिसे प्रत्येक DVA-C02 उम्मीदवार को याद से बनाने और समझाने में सक्षम होना चाहिए। अन्य पैटर्न इन प्रिमिटिव्स पर आधारित होते हैं (स्टेप फंक्शंस लैम्ब्डा को कंपोज करते हैं; SQS लैम्ब्डा को ट्रिगर करता है; इवेंटब्रिज उन्हें शेड्यूल करता है) और इस आधार में एक-एक करके एक टुकड़ा जोड़कर सबसे अच्छी तरह सीखे जाते हैं।
बाकी के सेवा-दर-सेवा अवधारणात्मक कवरेज के लिए, इस प्रमाणपत्र पृष्ठ के ब्राउज़, मार्गदर्शिका, और Editorial अनुभाग देखें।