Use Cases

Claude Code × AWS CloudFormation/CDK पूर्ण गाइड | Infrastructure as Code को स्वचालित रूप से जनरेट करें

Claude Code के साथ AWS Infrastructure as Code को तेज़ बनाएं। CloudFormation टेम्पलेट, CDK TypeScript स्टैक और multi-stack डिज़ाइन के लिए काम करने वाला कोड — Masa के वास्तविक प्रोडक्शन अनुभव पर आधारित।

“मुझे हर बार infrastructure सेट करने के लिए AWS Console में क्लिक करते रहना बिल्कुल पसंद नहीं” — अगर आपने कभी ऐसा महसूस किया है, तो आप अकेले नहीं हैं। CloudFormation और CDK infrastructure को code के ज़रिए reproducible बनाते हैं, लेकिन वो templates लिखने में समय लगता है।

मैं इस साइट का infrastructure (Cloudflare Pages + Workers + D1) Claude Code से मैनेज करता हूं, और AWS business infrastructure के लिए भी Claude Code से CloudFormation/CDK templates जनरेट करवाता हूं। जो templates पहले घंटों में तैयार होते थे, वो अब 1/5 समय में पूरे हो जाते हैं।


CloudFormation vs CDK: कौन सा चुनें?

CloudFormation: AWS-native सर्विस जो JSON/YAML में infrastructure describe करती है
CDK (Cloud Development Kit): TypeScript/Python में infrastructure describe करने का framework
                              जो CloudFormation में synthesize होता है
तुलनाCloudFormationCDK
भाषाJSON / YAMLTypeScript, Python, Java आदि
Type Safetyकोई नहींउत्कृष्ट (TypeScript के साथ पूरी तरह type-safe)
Reusabilityकम (copy-paste)अधिक (classes और functions से abstract)
Learning Curveकममध्यम
Claude Code Compatibilityउत्कृष्टअति उत्कृष्ट

नए projects के लिए CDK TypeScript की दृढ़ता से सिफारिश की जाती है। Claude Code के साथ इसकी compatibility बेहतरीन है और type completion के साथ मिलकर यह उच्च गुणवत्ता का code produce करता है।


Step 1: मौजूदा AWS Resources को CloudFormation में बदलें

यह pattern तब उपयोगी है जब आप किसी मौजूदा AWS environment को बाद में codify करना चाहते हैं।

claude -p "
निम्नलिखित AWS setup को CloudFormation template (YAML) में बदलो।

[वर्तमान setup]
- VPC: 10.0.0.0/16, 2 public subnets, 2 private subnets
- EC2: t3.medium, Amazon Linux 2023, public subnet में
- RDS: MySQL 8.0, db.t3.micro, private subnet में
- ALB: HTTPS (ACM certificate), EC2 पर forwarding
- Security Groups: ALB से 443 allow, EC2 से RDS पर 3306 allow

[Requirements]
- Environment (dev/staging/prod) parameter से switchable
- Resource names में environment name prefix लगाएं
- CloudFormation Outputs में ALB DNS name output करें
"

जनरेट हुआ CloudFormation template (excerpt):

AWSTemplateFormatVersion: "2010-09-09"
Description: "Web Application Infrastructure"

Parameters:
  Environment:
    Type: String
    AllowedValues: [dev, staging, prod]
    Default: dev
  DBPassword:
    Type: String
    NoEcho: true  # Password को mask करें

Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsHostnames: true
      Tags:
        - Key: Name
          Value: !Sub "${Environment}-vpc"

  PublicSubnet1:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.1.0/24
      AvailabilityZone: !Select [0, !GetAZs ""]
      MapPublicIpOnLaunch: true
      Tags:
        - Key: Name
          Value: !Sub "${Environment}-public-1"

  # ALB Security Group
  ALBSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: ALB Security Group
      VpcId: !Ref VPC
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 443
          ToPort: 443
          CidrIp: 0.0.0.0/0

Outputs:
  ALBDnsName:
    Value: !GetAtt ApplicationLoadBalancer.DNSName
    Export:
      Name: !Sub "${Environment}-alb-dns"

Step 2: CDK से Serverless Stack बनाएं

CDK के साथ TypeScript में लिखते हैं, जिससे logic की reuse आसान होती है।

# CDK project initialize करें
mkdir my-infra && cd my-infra
npx cdk init app --language typescript

claude -p "
lib/my-infra-stack.ts में निम्नलिखित serverless setup को CDK TypeScript में implement करो।

[Setup]
- API Gateway (REST API) + Lambda (Node.js 20)
- DynamoDB table (PAY_PER_REQUEST)
- S3 bucket (private, versioning enabled)
- CloudFront (S3 origin, custom domain support)
- DynamoDB table name और S3 bucket name को Lambda environment variables में pass करें
- Lambda को automatically least-privilege IAM role attach करें

सभी resources को appropriately tag करें,
और production में (NODE_ENV=production) deletion protection enable करें।
"

जनरेट हुआ CDK code:

// lib/my-infra-stack.ts
import * as cdk from "aws-cdk-lib";
import * as lambda from "aws-cdk-lib/aws-lambda";
import * as apigateway from "aws-cdk-lib/aws-apigateway";
import * as dynamodb from "aws-cdk-lib/aws-dynamodb";
import * as s3 from "aws-cdk-lib/aws-s3";
import * as cloudfront from "aws-cdk-lib/aws-cloudfront";
import * as origins from "aws-cdk-lib/aws-cloudfront-origins";

export class MyInfraStack extends cdk.Stack {
  constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const isProd = process.env.NODE_ENV === "production";

    // DynamoDB table
    const table = new dynamodb.Table(this, "AppTable", {
      partitionKey: { name: "PK", type: dynamodb.AttributeType.STRING },
      sortKey: { name: "SK", type: dynamodb.AttributeType.STRING },
      billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
      pointInTimeRecovery: true,
      deletionProtection: isProd,
      removalPolicy: isProd ? cdk.RemovalPolicy.RETAIN : cdk.RemovalPolicy.DESTROY,
    });

    // S3 bucket
    const bucket = new s3.Bucket(this, "AssetsBucket", {
      versioned: true,
      blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL,
      encryption: s3.BucketEncryption.S3_MANAGED,
      deletionProtection: isProd,
      removalPolicy: isProd ? cdk.RemovalPolicy.RETAIN : cdk.RemovalPolicy.DESTROY,
    });

    // Lambda function
    const apiLambda = new lambda.Function(this, "ApiLambda", {
      runtime: lambda.Runtime.NODEJS_20_X,
      handler: "index.handler",
      code: lambda.Code.fromAsset("src/lambda"),
      environment: {
        TABLE_NAME: table.tableName,
        BUCKET_NAME: bucket.bucketName,
        NODE_ENV: process.env.NODE_ENV ?? "development",
      },
      timeout: cdk.Duration.seconds(30),
      memorySize: 512,
    });

    // Lambda को least-privilege permissions दें
    table.grantReadWriteData(apiLambda);
    bucket.grantReadWrite(apiLambda);

    // API Gateway
    const api = new apigateway.RestApi(this, "AppApi", {
      restApiName: "MyApp API",
      defaultCorsPreflightOptions: {
        allowOrigins: apigateway.Cors.ALL_ORIGINS,
        allowMethods: apigateway.Cors.ALL_METHODS,
      },
    });

    api.root.addProxy({
      defaultIntegration: new apigateway.LambdaIntegration(apiLambda),
    });

    // CloudFront
    const distribution = new cloudfront.Distribution(this, "Distribution", {
      defaultBehavior: {
        origin: new origins.S3Origin(bucket),
        viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
      },
    });

    // Output
    new cdk.CfnOutput(this, "ApiUrl", { value: api.url });
    new cdk.CfnOutput(this, "CloudFrontUrl", { value: distribution.distributionDomainName });
  }
}

Step 3: मौजूदा Stacks अपडेट करें और Diff देखें

# Deploy से पहले diff देखें
npx cdk diff

# Claude Code से diff explain करवाएं
claude -p "
यह cdk diff output पढ़कर बताओ कि क्या बदला है।
Security group और IAM policy changes पर विशेष ध्यान दो।

$(npx cdk diff 2>&1)
"

Step 4: Multi-Stack Architecture डिज़ाइन करें

Production-scale infrastructure को multiple stacks में बांटकर manage करते हैं।

claude -p "
निम्नलिखित multi-stack setup को CDK TypeScript में design करो।

[Stack division strategy]
- NetworkStack: VPC, subnets, security groups
- DatabaseStack: RDS, ElastiCache (NetworkStack पर depend)
- ApplicationStack: ECS, ALB, AutoScaling (NetworkStack, DatabaseStack पर depend)
- MonitoringStack: CloudWatch dashboards, alarms, SNS notifications

Stack dependencies और CfnOutput / Fn.importValue का use भी शामिल करो।
"
// bin/app.ts
import * as cdk from "aws-cdk-lib";
import { NetworkStack } from "../lib/network-stack";
import { DatabaseStack } from "../lib/database-stack";
import { ApplicationStack } from "../lib/application-stack";
import { MonitoringStack } from "../lib/monitoring-stack";

const app = new cdk.App();
const env = { account: process.env.CDK_ACCOUNT, region: "ap-south-1" };

const network = new NetworkStack(app, "NetworkStack", { env });
const database = new DatabaseStack(app, "DatabaseStack", { env, vpc: network.vpc });
const application = new ApplicationStack(app, "ApplicationStack", {
  env,
  vpc: network.vpc,
  database: database.cluster,
});
new MonitoringStack(app, "MonitoringStack", {
  env,
  alb: application.alb,
  database: database.cluster,
});

Step 5: CloudFormation/CDK Debugging Claude Code पर छोड़ें

Deployment failure पर Claude Code समाधान भी निकाल सकता है।

claude -p "
CDK deploy निम्नलिखित error से fail हो रहा है।
कारण और fix बताओ:

$(npx cdk deploy 2>&1 | tail -30)
"

आम failure patterns:

  • ROLLBACK_COMPLETE: पिछला deployment fail हुआ, stack खराब हो गया → cdk destroy करके फिर से deploy करें
  • UPDATE_ROLLBACK_FAILED: Manual changes से conflict → AWS Console में manually resolve करें
  • Resource already exists: मौजूदा resource से नाम collision → resource का नाम बदलें या import करें

4 आम गलतियां जिनसे बचें

1. cdk destroy से deletion protection bypass करना

Development environment में removalPolicy: DESTROY नहीं लगाने पर cdk destroy के बाद resources रह जाते हैं। Production में गलती से delete होने से बचाने के लिए RETAIN use करें।

2. CloudFormation drift detection को ignore करना

AWS Console से manually resources change करने पर CloudFormation और reality में अंतर आ जाता है (drift)। महीने में एक बार CloudFormation Console में drift detection चलाएं।

3. Template में secrets सीधे लिखना

# गलत: password template में रह जाता है
DBPassword: "mysecretpassword"

# सही: Secrets Manager या Parameter Store से लें
DBPassword: !Sub "{{resolve:secretsmanager:prod/db-password}}"

4. CDK version pinning में लापरवाही

package.json में team के CDK versions match नहीं होने पर diffs आते हैं। सबके same version use करने के लिए package-lock.json commit करें।


सारांश

TaskClaude Code का योगदान
CloudFormation generationRequirements बताते ही complete YAML
CDK implementationTypeScript में type-safe infrastructure code
Stack designMulti-stack dependency architecture
Diff explanationcdk diff output सरल भाषा में समझाया
DebuggingError logs से कारण और fix

Infrastructure as Code कुछ ऐसा है जो सब जानते हैं करना चाहिए लेकिन टालते रहते हैं। Claude Code के साथ बस “मुझे यह AWS setup चाहिए” कहने से template तैयार हो जाता है — IaC अपनाने की बाधा नाटकीय रूप से कम हो जाती है।

संबंधित लेख

संदर्भ

#claude-code #aws #cloudformation #cdk #iac #typescript

अपने Claude Code वर्कफ़्लो को अगले स्तर पर ले जाएँ

Claude Code में तुरंत कॉपी-पेस्ट करने योग्य 50 आज़माए हुए प्रॉम्प्ट टेम्पलेट।

मुफ़्त

मुफ़्त PDF: 5 मिनट में Claude Code चीटशीट

बस अपना ईमेल दर्ज करें और हम तुरंत A4 एक-पृष्ठ चीटशीट PDF भेज देंगे।

हम आपकी व्यक्तिगत जानकारी की सुरक्षा करते हैं और स्पैम नहीं भेजते।

Masa

लेखक के बारे में

Masa

Claude Code का गहराई से उपयोग करने वाले इंजीनियर। claudecode-lab.com चलाते हैं, जो 10 भाषाओं में 2,000 से अधिक पेजों वाला टेक मीडिया है।

संबंधित लेख

Claude Code × Amazon Bedrock संपूर्ण गाइड | AWS पर Claude को प्रोडक्शन में चलाएं
Use Cases

Claude Code × Amazon Bedrock संपूर्ण गाइड | AWS पर Claude को प्रोडक्शन में चलाएं

Claude Code के साथ Amazon Bedrock उपयोग करने की संपूर्ण गाइड। IAM प्रमाणीकरण, स्ट्रीमिंग, Lambda इंटीग्रेशन, RAG कार्यान्वयन से लेकर लागत अनुकूलन तक — Masa के वास्तविक प्रोडक्शन अनुभव पर आधारित।

Claude Code × AWS CodePipeline/CodeBuild पूर्ण गाइड | CI/CD पाइपलाइन स्वचालित रूप से बनाएं
Use Cases

Claude Code × AWS CodePipeline/CodeBuild पूर्ण गाइड | CI/CD पाइपलाइन स्वचालित रूप से बनाएं

Claude Code का उपयोग करके AWS CodePipeline और CodeBuild के साथ CI/CD स्वचालित रूप से बनाएं। पाइपलाइन डिज़ाइन, buildspec.yml जेनरेशन, टेस्ट ऑटोमेशन और CDK इन्फ्रास्ट्रक्चर के व्यावहारिक कोड उदाहरण।

Claude Code × AWS CloudWatch सम्पूर्ण गाइड | लॉग विश्लेषण, अलार्म सेटअप और डैशबोर्ड ऑटोमेशन
Use Cases

Claude Code × AWS CloudWatch सम्पूर्ण गाइड | लॉग विश्लेषण, अलार्म सेटअप और डैशबोर्ड ऑटोमेशन

Claude Code से AWS CloudWatch को और प्रभावी बनाएं। लॉग पैटर्न विश्लेषण, स्वचालित अलार्म कॉन्फ़िगरेशन, मेट्रिक्स डैशबोर्ड और इंसिडेंट जांच के लिए व्यावहारिक कोड।