अंतिम समीक्षा: मई 2026
साधारण Terraform के साथ SOA-C03 परीक्षा के AWS संसाधनों को बनाएं — एक समय में एक ब्लॉक, प्रत्येक परीक्षा डोमेन से जुड़ा हुआ। यही कोड OpenTofu पर भी काम करता है।
इस लैब के अंत तक, आप प्लेन टेराफ़ॉर्म के साथ एक पूर्ण मॉनिटर-और-स्वयं-ठीक करने वाला लूप प्रोविज़न कर चुके होंगे — एक मीट्रिक फ़िल्टर के साथ एक CloudWatch लॉग ग्रुप, एक SNS टॉपिक जो किसी व्यक्ति को सूचित करता है, एक Systems Manager रनबुक जो स्वचालित समाधान करता है, और एक EventBridge नियम जो उच्च-गंभीरता वाली घटनाओं को रनबुक से जोड़ता है ताकि सामान्य घटनाएं किसी के जागने से पहले ही खुद-ब-खुद ठीक हो जाएं।
प्रत्येक रिसोर्स प्लेन टेराफ़ॉर्म है — वही कोड OpenTofu पर बिना किसी संशोधन के काम करता है। कोई वैरिएबल नहीं, कोई मॉड्यूल नहीं। स्निपेट्स को एक ही main.tf में डालें, terraform init चलाएँ, फिर terraform apply चरण-दर-चरण चलाएँ।
>= 1.5 या OpenTofu >= 1.6।us-east-1 के लिए AWS CLI प्रमाणित।इस लैब में सब कुछ निष्क्रिय रहने पर निःशुल्क है:
यदि ऑटो-सुधार वास्तव में शुरू होता है (चरण 5 एक SSM दस्तावेज़ को ट्रिगर करता है), तो इसका कोई अतिरिक्त शुल्क नहीं लगता है — यहां उपयोग की गई कार्रवाइयों के लिए Systems Manager Automation निःशुल्क है।
मानक शुरुआत। default_tags पूरे स्टैक पर लागू होते हैं ताकि ऑपरेशंस टीम बाद में Cost Explorer, AWS Config, और Tag Editor को Project = certlabpro-soa-c03 द्वारा फ़िल्टर करके इस लैब द्वारा बनाई गई हर चीज़ देख सके। SOA-C03 का विश्वसनीयता और व्यवसाय निरंतरता डोमेन इसका स्पष्ट रूप से परीक्षण करता है — टैगिंग प्रत्येक क्रॉस-कटिंग ऑपरेशनल क्वेरी का आधार है।
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-soa-c03"
ManagedBy = "terraform"
}
}
}AWS पर हर ऑपरेशनल कहानी CloudWatch Logs में शुरू होती है। हम स्पष्ट 30-दिवसीय रिटेंशन के साथ एक लॉग ग्रुप बनाते हैं (डिफ़ॉल्ट कभी समाप्त न होने वाला SOA-C03 लागत-विरोधी पैटर्न है जो हर लागत-अनुकूलन प्रश्न में आता है) और एक मीट्रिक फ़िल्टर जो ERROR शब्द के लिए लॉग स्ट्रीम पर नज़र रखता है और CloudWatch Metrics पर एक गणना प्रकाशित करता है।
मीट्रिक फ़िल्टर असंरचित लॉग डेटा को कार्रवाई योग्य मेट्रिक्स में बदलते हैं। निगरानी के लिए यही SOA-C03 मानसिक मॉडल है: लॉग्स → फ़िल्टर → मीट्रिक → अलार्म → SNS → मानव (या ऑटोमेशन)। हम इस चरण से आगे इस श्रृंखला को टुकड़ों में बना रहे हैं।
resource "aws_cloudwatch_log_group" "app" {
name = "/certlabpro/soa-c03/app"
retention_in_days = 30
}
resource "aws_cloudwatch_log_metric_filter" "app_errors" {
name = "certlabpro-soa-c03-app-errors"
log_group_name = aws_cloudwatch_log_group.app.name
pattern = "ERROR"
metric_transformation {
name = "AppErrorCount"
namespace = "CertLabPro/SOA-C03"
value = "1"
default_value = "0"
}
}अब हम चरण 2 से मीट्रिक को एक मानव से जोड़ते हैं। हम एक SNS टॉपिक बनाते हैं, उस पर एक ईमेल पता सब्सक्राइब करते हैं, और एक CloudWatch अलार्म सेट करते हैं जो तब सक्रिय होता है जब त्रुटि गणना हमारी सीमा को पार करती है। SOA-C03 इस सटीक श्रृंखला का परीक्षण करता है — मीट्रिक → अलार्म → SNS → ईमेल — मॉनिटरिंग, लॉगिंग, और रेमेडिएशन डोमेन (~परीक्षा का 20%) के तहत।
terraform apply के बाद, AWS endpoint में पते पर एक पुष्टि ईमेल भेजता है — एक बार Confirm subscription पर क्लिक करें, और अलार्म सक्रिय होने पर वास्तव में आप तक पहुँचेगा।
treat_missing_data = "notBreaching" एक छोटा लेकिन परीक्षा-प्रासंगिक विवरण है: डिफ़ॉल्ट रूप से एक अनुपलब्ध डेटा बिंदु को उल्लंघन के रूप में गिना जाता है, जिसका अर्थ है कि बिना किसी डेटा वाला एक बिल्कुल नया अलार्म तुरंत सक्रिय हो जाता है। इसे notBreaching पर सेट करना कम-मात्रा वाले मेट्रिक्स के लिए SOA-C03 कन्वेंशन से मेल खाता है।
resource "aws_sns_topic" "ops_alerts" {
name = "certlabpro-soa-c03-ops-alerts"
}
resource "aws_sns_topic_subscription" "ops_email" {
topic_arn = aws_sns_topic.ops_alerts.arn
protocol = "email"
endpoint = "ops@example.com" # replace with your real email
}
resource "aws_cloudwatch_metric_alarm" "app_errors_spike" {
alarm_name = "certlabpro-soa-c03-app-errors-spike"
comparison_operator = "GreaterThanThreshold"
evaluation_periods = 1
metric_name = "AppErrorCount"
namespace = "CertLabPro/SOA-C03"
period = 300
statistic = "Sum"
threshold = 10
alarm_description = "More than 10 ERROR log lines in 5 minutes."
alarm_actions = [aws_sns_topic.ops_alerts.arn]
treat_missing_data = "notBreaching"
}नए इंसिडेंट के लिए किसी व्यक्ति को पेज करना ठीक है, लेकिन ज्ञात-पुनरावर्ती इंसिडेंट के लिए महंगा है। SOA-C03 AWS Systems Manager Automation पर बहुत अधिक निर्भर करता है, जिसका उत्तर है कि "मैं उन चीजों को स्वचालित रूप से कैसे ठीक करूँ जिन्हें मैं पहले से ठीक करना जानता हूँ?" — एक अस्वस्थ सेवा को पुनरारंभ करना, एक क्रेडेंशियल घुमाना, डिस्क स्थान को साफ करना।
हम एक न्यूनतम SSM दस्तावेज़ लिखते हैं जो एक aws:sleep चरण (AWS-प्रबंधित चरण प्रकारों में से एक) चलाता है — उत्पादन में यह ज्ञात-रिकवरी रनबुक के विरुद्ध aws:executeAutomation होगा, या इंस्टेंस के एक बेड़े के विरुद्ध aws:runCommand होगा। आकार समान है: चरणों का एक क्रम घोषित करें, दस्तावेज़ को एक निष्पादन भूमिका दें, इसे एक पुन: प्रयोज्य ऑटोमेशन के रूप में पंजीकृत करें।
हम जो IAM भूमिका संलग्न करते हैं, वह SSM Automation को स्वयं को मानने और दस्तावेज़ के अंदर की कार्रवाइयों को कॉल करने की अनुमति देती है। SOA-C03 का विश्वसनीयता और व्यवसाय निरंतरता डोमेन इस सटीक पैटर्न का परीक्षण करता है: एक नामित, संस्करण-नियंत्रित रनबुक ऑडिट करने योग्य है; एक स्लैक संदेश जिसमें कहा गया है कि "अरे क्या आप उस चीज़ को पुनरारंभ कर सकते हैं" नहीं है।
resource "aws_iam_role" "ssm_automation" {
name = "certlabpro-soa-c03-ssm-automation"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Principal = { Service = "ssm.amazonaws.com" }
Action = "sts:AssumeRole"
}]
})
}
resource "aws_iam_role_policy_attachment" "ssm_automation" {
role = aws_iam_role.ssm_automation.name
policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonSSMAutomationRole"
}
resource "aws_ssm_document" "remediate_app_errors" {
name = "certlabpro-soa-c03-remediate-app-errors"
document_type = "Automation"
document_format = "YAML"
content = <<-EOT
schemaVersion: "0.3"
description: "Lab-only runbook — auto-acknowledges app-error spikes."
assumeRole: "${aws_iam_role.ssm_automation.arn}"
mainSteps:
- name: pause
action: aws:sleep
inputs:
Duration: PT5S
EOT
}लूप का अंतिम भाग। CloudWatch अलार्म इवेंटब्रिज डिफ़ॉल्ट बस को इवेंट भेजते हैं जब वे स्थिति बदलते हैं — हम चरण 3 में बनाए गए अलार्म के ALARM में बदलने के लिए फ़िल्टर करते हैं, और चरण 4 से SSM दस्तावेज़ को प्रतिक्रिया के रूप में लक्षित करते हैं।
EventBridge नियम को हमारी ओर से SSM Automation को कॉल करने के लिए अपनी IAM भूमिका की आवश्यकता होती है — यह एक सूक्ष्म लेकिन आवर्ती SOA-C03 विवरण है। परीक्षा यह परीक्षण करती है कि क्या आपको याद है कि आपकी ओर से एक लक्ष्य को इनवोक करने वाला EventBridge एक सेवा-से-सेवा कार्रवाई है जिसके लिए एक समर्पित निष्पादन भूमिका की आवश्यकता होती है, जो SSM दस्तावेज़ की अपनी assume-role से भिन्न है।
पूरी श्रृंखला अब इस प्रकार है: ERROR वाली लॉग लाइन → मीट्रिक फ़िल्टर CloudWatch Metrics पर प्रकाशित करता है → अलार्म तब सक्रिय होता है जब 5 मिनट में गणना 10 से अधिक हो जाती है → अलार्म EventBridge पर स्थिति-परिवर्तन इवेंट प्रकाशित करता है और SNS के माध्यम से ऑप्स टीम को ईमेल करता है → EventBridge नियम स्थिति परिवर्तन से मेल खाता है → SSM Automation रेमेडिएशन रनबुक चलाता है। पेजर सक्रिय होता है और समाधान समानांतर में शुरू होता है। यही SOA-C03 का ऑपरेशनल आदर्श है।
resource "aws_iam_role" "eventbridge_invoke_ssm" {
name = "certlabpro-soa-c03-eventbridge-invoke-ssm"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Principal = { Service = "events.amazonaws.com" }
Action = "sts:AssumeRole"
}]
})
}
resource "aws_iam_role_policy" "eventbridge_invoke_ssm" {
name = "start-automation"
role = aws_iam_role.eventbridge_invoke_ssm.id
policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Action = "ssm:StartAutomationExecution"
Resource = "*"
}]
})
}
resource "aws_cloudwatch_event_rule" "app_errors_alarm" {
name = "certlabpro-soa-c03-app-errors-alarm-fired"
description = "Fires the auto-remediation runbook when the app-errors alarm trips."
event_pattern = jsonencode({
source = ["aws.cloudwatch"]
"detail-type" = ["CloudWatch Alarm State Change"]
detail = {
alarmName = [aws_cloudwatch_metric_alarm.app_errors_spike.alarm_name]
state = { value = ["ALARM"] }
}
})
}
resource "aws_cloudwatch_event_target" "run_ssm_doc" {
rule = aws_cloudwatch_event_rule.app_errors_alarm.name
arn = "arn:aws:ssm:us-east-1::automation-definition/${aws_ssm_document.remediate_app_errors.name}"
role_arn = aws_iam_role.eventbridge_invoke_ssm.arn
}terraform destroy इस लैब में सब कुछ हटा देता है। एक चेतावनी: SNS ईमेल सदस्यता हटाने के बाद भी आपके खाते के इतिहास में बनी रहती है (AWS अनुपालन के लिए सदस्यता रद्द करने का रिकॉर्ड रखता है)। कोई शुल्क नहीं, बस एक रिकॉर्ड। बाकी सब कुछ एक मिनट के भीतर साफ-सुथरा समाप्त हो जाता है।
SOA-C03 उन ऑपरेशनल क्षेत्रों को कवर करता है जिन्हें यह लैब शामिल नहीं कर सकती — कंप्लायंस ड्रिफ्ट के लिए AWS Config नियम और कंफ़ॉर्मेन्स पैक, API ऑडिट के लिए CloudTrail, Trusted Advisor चेक, मल्टी-अकाउंट ऑप्स के लिए CloudFormation ड्रिफ्ट डिटेक्शन और StackSets, AWS Backup, AWS Health इवेंट्स, Resource Explorer, License Manager, और Service Quotas।
हम अलार्म-से-स्वयं-सुधार लूप से चिपके रहते हैं क्योंकि यह परीक्षा में सबसे अधिक परीक्षण किया जाने वाला ऑपरेशनल पैटर्न है और वह जो चार सबसे अधिक उपयोग होने वाली सेवाओं (CloudWatch, SNS, SSM, EventBridge) को एक साथ जोड़ता है। अन्य ऑपरेशनल उपकरण वैचारिक कवरेज हैं — इस सर्ट पेज के ब्राउज़ और Editorial अनुभाग देखें।