अंतिम समीक्षा: मई 2026
साधारण Terraform के साथ AIF-C01 परीक्षा के AWS संसाधनों को बनाएं — एक समय में एक ब्लॉक, प्रत्येक परीक्षा डोमेन से जुड़ा हुआ। यही कोड OpenTofu पर भी काम करता है।
इस लैब के अंत तक, आपने साधारण Terraform के साथ एक काम करने वाला Amazon Bedrock सेटअप तैयार कर लिया होगा जो AIF-C01 परीक्षा के पांच में से चार डोमेन को प्रदर्शित करता है: AI इनपुट और आउटपुट के लिए एक S3 स्टोर, एक न्यूनतम-विशेषाधिकार (least-privilege) IAM भूमिका (role) जिसे Bedrock फाउंडेशन मॉडल को लागू (invoke) करने के लिए ग्रहण कर सकता है, एक गार्डरेल (guardrail) जो सुरक्षा और PII के लिए प्रॉम्प्ट और प्रतिक्रियाओं को फ़िल्टर करता है, और खाता-और-क्षेत्र-स्तर (account-and-region-level) का इनवोकेशन लॉगिंग।
प्रत्येक संसाधन साधारण Terraform है — यही कोड OpenTofu पर बिना किसी संशोधन के काम करता है। कोई वेरिएबल, कोई मॉड्यूल, कोई रिमोट स्टेट नहीं है। नीचे दिए गए स्निपेट्स को एक ही main.tf फ़ाइल में डालें, एक बार terraform init चलाएं, और फिर चरण-दर-चरण terraform apply करें।
>= 1.5 या OpenTofu >= 1.6।us-east-1 का उपयोग करते हैं क्योंकि Bedrock और इसके नवीनतम फाउंडेशन मॉडल सबसे पहले वहीं रोल आउट होते हैं।इस लैब के अधिकांश संसाधनों की लागत निष्क्रिय (idle) रहने पर कुछ नहीं होती है: IAM भूमिकाएं (roles), गार्डरेल कॉन्फ़िगरेशन, लॉगिंग कॉन्फ़िगरेशन, एक खाली S3 बकेट, और बिना किसी इवेंट वाला CloudWatch लॉग ग्रुप सभी मुफ़्त हैं।
यदि आप वास्तव में लैब का उपयोग करते हैं तो बिल पर दिखने वाली संभावित मदें (line items):
जो हमने जानबूझकर छोड़ दिया: यह लैब Bedrock नॉलेज बेस (Knowledge Base) नहीं बनाती है। नॉलेज बेस के लिए एक OpenSearch Serverless कलेक्शन की आवश्यकता होती, जिसका निष्क्रिय रहने पर भी न्यूनतम ~$350/माह का बिल आता है। वह जानबूझकर यहाँ दायरे से बाहर रखा गया है — यदि आप बिना किसी नॉलेज बेस को प्रोविज़न किए वैचारिक रूप से इसका अध्ययन करना चाहते हैं तो AIF-C01 सर्टिफिकेशन पेज देखें।
इससे पहले कि हम कोई संसाधन बनाएं, हमें Terraform को बताना होगा कि हम उसके किस संस्करण की उम्मीद कर रहे हैं और हम किस AWS प्रोवाइडर का उपयोग करेंगे। हम AWS प्रोवाइडर को ~> 5.60 पर पिन करते हैं क्योंकि इस लैब में हमारे द्वारा उपयोग किया जाने वाला प्रत्येक Bedrock-संबंधित संसाधन उसी लाइन में आया था, और हम सब कुछ us-east-1 में डिप्लॉय करते हैं — AWS वहां सबसे पहले फाउंडेशन मॉडल रोल आउट करता है, और अधिकांश AIF-C01 प्रश्न "नवीनतम" सेवा का संदर्भ देते समय us-east-1 की उपलब्धता मानकर चलते हैं।
शुरू करने के लिए इसे एक नई main.tf फ़ाइल में डालें। इस लैब में आगे आने वाली सभी चीजें इसी फ़ाइल में रहेंगी।
terraform {
required_version = ">= 1.5"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.60"
}
}
}
provider "aws" {
region = "us-east-1"
}प्रत्येक AWS AI सेवा जिसका हम इस लैब में उपयोग करेंगे — आज Bedrock, और ऑडिट लॉगिंग जिसे हम चरण 5 में जोड़ेंगे — Amazon S3 के माध्यम से इनपुट पढ़ती है और आउटपुट लिखती है, इसलिए वास्तविक इन्फ्रास्ट्रक्चर का पहला हिस्सा एक बकेट है। हम बाद के लगभग हर चरण में इस पर वापस आएंगे।
हम वर्ज़निंग (versioning) को सक्षम करते हैं ताकि किसी दूषित अपलोड को वापस लाया जा सके, सार्वजनिक एक्सेस को ब्लॉक करते हैं (ये ट्रेनिंग इनपुट और मॉडल इनवोकेशन लॉग हैं, न कि वेबसाइट एसेट), और निष्क्रिय अवस्था में AES256 एन्क्रिप्शन (encryption at rest) को सक्षम करते हैं। यह आखिरी बिंदु AIF-C01 के लिए महत्वपूर्ण है — Security, Compliance, and Governance for AI Solutions डोमेन स्पष्ट रूप से यह परीक्षण करता है कि आप किसी भी AI डेटा स्टोर पर डिफ़ॉल्ट रूप से निष्क्रिय अवस्था में एन्क्रिप्शन का उपयोग करते हैं या नहीं।
resource "aws_s3_bucket" "ai_data" {
bucket_prefix = "certlabpro-aif-c01-"
}
resource "aws_s3_bucket_public_access_block" "ai_data" {
bucket = aws_s3_bucket.ai_data.id
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
resource "aws_s3_bucket_versioning" "ai_data" {
bucket = aws_s3_bucket.ai_data.id
versioning_configuration {
status = "Enabled"
}
}
resource "aws_s3_bucket_server_side_encryption_configuration" "ai_data" {
bucket = aws_s3_bucket.ai_data.id
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}Bedrock अपने दम पर किसी मॉडल को कॉल (invoke) नहीं कर सकता — उसे एक IAM भूमिका (role) की आवश्यकता होती है जिसे वह ग्रहण कर सके। हम एक ट्रस्ट पॉलिसी के साथ एक भूमिका बनाते हैं जो bedrock.amazonaws.com को एकमात्र अनुमत प्रिंसिपल के रूप में नामित करती है, फिर एक न्यूनतम अनुमति नीति (permission policy) संलग्न करते हैं: किसी भी फाउंडेशन मॉडल को लागू करना, और केवल उसी बकेट को पढ़ना/लिखना जिसे हमने चरण 2 में बनाया था।
इस तरह के न्यूनतम-विशेषाधिकार (Least-privilege) पैटर्न AIF-C01 की एक आवर्ती थीम हैं। ध्यान दें कि हम s3:* प्रदान नहीं करते हैं — केवल दो ऑब्जेक्ट क्रियाएं (actions) जिनकी हमें वास्तव में आवश्यकता है, जो हमारे बकेट के अंदर के ऑब्जेक्ट्स तक सीमित हैं। परीक्षा बहु-विकल्पीय परिदृश्यों में उसी आकार को पहचानने के लिए पुरस्कृत करती है: जब दो उत्तर विकल्प दोनों "काम" करते हैं, तो संकीर्ण (narrower) विकल्प लगभग हमेशा सही होता है।
resource "aws_iam_role" "bedrock_caller" {
name = "certlabpro-aif-c01-bedrock-caller"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Principal = { Service = "bedrock.amazonaws.com" }
Action = "sts:AssumeRole"
}]
})
}
resource "aws_iam_role_policy" "bedrock_caller" {
name = "bedrock-invoke"
role = aws_iam_role.bedrock_caller.id
policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Effect = "Allow"
Action = [
"bedrock:InvokeModel",
"bedrock:InvokeModelWithResponseStream",
]
Resource = "arn:aws:bedrock:*::foundation-model/*"
},
{
Effect = "Allow"
Action = [
"s3:GetObject",
"s3:PutObject",
]
Resource = "${aws_s3_bucket.ai_data.arn}/*"
},
]
})
}एक Bedrock मॉडल अपने आप में खुशी-खुशी किसी भी चीज़ का उत्तर दे देगा जिसका उत्तर उसका ट्रेनिंग डेटा उसे देने की अनुमति देता है। गार्डरेल्स (Guardrails) प्रत्येक मॉडल कॉल के सामने बैठते हैं और आपके द्वारा उपयोग किए जाने वाले फाउंडेशन मॉडल से स्वतंत्र होकर सामग्री + PII नीतियां लागू करते हैं — जिसका अर्थ है कि एक एकल गार्डरेल Claude, Llama, Titan और भविष्य के किसी भी मॉडल को कवर करता है।
यहाँ हम दो परतें कॉन्फ़िगर करते हैं। एक कंटेंट फ़िल्टर प्रॉम्प्ट और प्रतिक्रियाओं दोनों में अत्यधिक गंभीर नफरत / हिंसा / यौन सामग्री को ब्लॉक करता है, और एक संवेदनशील-जानकारी नीति (sensitive-information policy) ईमेल, फ़ोन नंबर और यूएस सोशल सिक्योरिटी नंबरों को लीक होने से रोकती है। ये सीधे AIF-C01 के Guidelines for Responsible AI डोमेन से मेल खाते हैं — सामग्री फ़िल्टरिंग और PII हैंडलिंग वहां के दो नामित स्तंभ (pillars) हैं।
गार्डरेल लागू होने के बाद, चरण 3 में हमारे द्वारा बनाई गई भूमिका (role) एक मॉडल को लागू कर सकती है और परिणाम कॉलर तक पहुँचने से पहले फ़िल्टर हो जाता है।
resource "aws_bedrock_guardrail" "safety" {
name = "certlabpro-aif-c01-safety"
description = "Default safety rails for the lab."
blocked_input_messaging = "I can't help with that."
blocked_outputs_messaging = "I can't share that response."
content_policy_config {
filters_config {
input_strength = "HIGH"
output_strength = "HIGH"
type = "HATE"
}
filters_config {
input_strength = "HIGH"
output_strength = "HIGH"
type = "VIOLENCE"
}
filters_config {
input_strength = "HIGH"
output_strength = "HIGH"
type = "SEXUAL"
}
}
sensitive_information_policy_config {
pii_entities_config {
action = "BLOCK"
type = "EMAIL"
}
pii_entities_config {
action = "BLOCK"
type = "PHONE"
}
pii_entities_config {
action = "BLOCK"
type = "US_SOCIAL_SECURITY_NUMBER"
}
}
}Bedrock इनवोकेशन लॉगिंग खाते और क्षेत्र में प्रत्येक मॉडल कॉल के पूर्ण प्रॉम्प्ट, प्रतिक्रिया और एम्बेडिंग पेलोड को कैप्चर करता है। यह CloudWatch Logs (तदर्थ grep के लिए अच्छा है) और S3 (दीर्घकालिक अवधारण के लिए अच्छा है) में लिखता है — हम दोनों को जोड़ते हैं। जो भूमिका (role) हम संलग्न करते हैं, वह ठीक वही क्रियाएं प्रदान करती है जिनकी Bedrock सेवा को आवश्यकता होती है और कुछ नहीं।
एक AIF-C01-प्रासंगिक पकड़ (catch) जो जानने योग्य है: इनवोकेशन लॉगिंग एक सिंगलटन है — प्रति खाता प्रति क्षेत्र एक कॉन्फ़िगरेशन। यदि आप इस लैब को us-east-1 में दूसरी बार चलाते हैं तो Terraform किसी बदलाव की रिपोर्ट नहीं करेगा बल्कि मौजूदा कॉन्फ़िगरेशन फिर से बाध्य (re-bound) हो जाएगा। यदि आप कभी भी लॉग डेस्टिनेशन बदलते हैं तो फिर से चलाने से पहले नष्ट (destroy) कर दें।
लॉगिंग लागू होने के साथ, चरण 3 की भूमिका के विरुद्ध, चरण 4 के गार्डरेल के माध्यम से की जाने वाली प्रत्येक मॉडल कॉल चरण 2 के बकेट में संग्रहीत (archive) हो जाती है। यह पूर्ण ऑडिट श्रृंखला (audit chain) है — ठीक उसी तरह की "मुझे सबूत दिखाओ" वाली कहानी जिसकी परीक्षा आपसे वर्णन करने की उम्मीद करती है।
resource "aws_iam_role" "bedrock_logging" {
name = "certlabpro-aif-c01-bedrock-logging"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Principal = { Service = "bedrock.amazonaws.com" }
Action = "sts:AssumeRole"
}]
})
}
resource "aws_cloudwatch_log_group" "bedrock_invocations" {
name = "/aws/bedrock/invocations"
retention_in_days = 30
}
resource "aws_iam_role_policy" "bedrock_logging" {
name = "write-logs-and-s3"
role = aws_iam_role.bedrock_logging.id
policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Effect = "Allow"
Action = [
"logs:CreateLogStream",
"logs:PutLogEvents",
]
Resource = aws_cloudwatch_log_group.bedrock_invocations.arn
},
{
Effect = "Allow"
Action = "s3:PutObject"
Resource = "${aws_s3_bucket.ai_data.arn}/bedrock-invocations/*"
},
]
})
}
resource "aws_bedrock_model_invocation_logging_configuration" "this" {
logging_config {
embedding_data_delivery_enabled = true
image_data_delivery_enabled = true
text_data_delivery_enabled = true
cloudwatch_config {
log_group_name = aws_cloudwatch_log_group.bedrock_invocations.name
role_arn = aws_iam_role.bedrock_logging.arn
}
s3_config {
bucket_name = aws_s3_bucket.ai_data.bucket
key_prefix = "bedrock-invocations/"
}
}
}एक मानक terraform destroy इस लैब में सब कुछ नष्ट कर देता है। दो बातें:
aws_bedrock_model_invocation_logging_configuration खाता-और-क्षेत्र स्कोप (account-and-region scoped) का है — इसे नष्ट करने से वैश्विक रूप से us-east-1 में लॉगिंग अक्षम हो जाती है। यदि कोई अन्य वर्कलोड भी उस कॉन्फ़िगरेशन पर निर्भर करता है, तो आप इस चरण को छोड़ना चाहेंगे या समन्वय करना चाहेंगे।force_destroy = false का मतलब है कि यदि कोई ऑब्जेक्ट (डिलीट मार्कर सहित) शेष रह जाता है तो destroy विफल हो जाएगा। नष्ट करने से पहले कंसोल के माध्यम से बकेट खाली करें, या बकेट रिसोर्स पर force_destroy = true सेट करें और नष्ट करने से पहले फिर से लागू (re-apply) करें।AIF-C01 परीक्षा में एक विस्तृत AWS AI पोर्टफोलियो शामिल है — Rekognition, Comprehend, Textract, Polly, Translate, Transcribe, Lex, SageMaker, Kendra, Personalize, और Q। हम इस लैब में जानबूझकर इन्हें प्रोविज़न नहीं कर रहे हैं।
इसका कारण यह नहीं है कि वे महत्वपूर्ण नहीं हैं — बल्कि यह है कि इन सेवाओं के लिए व्यावहारिक अभ्यास के लिए या तो किसी बुनियादी ढांचे की आवश्यकता नहीं होती है (Textract, Comprehend, Rekognition केवल मौजूदा S3 डेटा के खिलाफ शुद्ध API कॉल हैं), या फिर वे ऐसे संसाधनों का उपयोग करते हैं जो Terraform AWS प्रदाता में मौजूद नहीं हैं (Polly lexicons, Translate terminologies, Amazon Q), या फिर वे निष्क्रिय रहने के दौरान खर्च बढ़ाते हैं (Bedrock Knowledge Bases, Kendra, SageMaker domains)।
उन सेवाओं के लिए, इस प्रमाणन पृष्ठ के ब्राउज़, मार्गदर्शिका, और Editorial अनुभागों में वैचारिक कवरेज है जिसकी आपको परीक्षा के लिए आवश्यकता होगी। व्यावहारिक मूल्य वहां है जहां परीक्षा को स्वयं बिना किए आत्मसात करना सबसे कठिन है: Bedrock IAM + guardrail + logging नियंत्रण विमान।