Ravindra BagaleCourses & study guides English

AWS CLI CloudFront Commands: Distribution बनवा आणि Cache Invalidate करा

जगभर files जलद: private S3 bucket पुढे CloudFront distribution, ETag सह config update, cache invalidation, मग disable आणि delete.

या chapter मध्ये तुम्ही काय शिकाल

  • Origin access control
  • Distribution बनवा
  • CloudFront साठी bucket policy
  • Cache invalidate
  • Update, disable, delete

1. मोठं चित्र: गल्लीतले दूध booths

हे का लागतं?

Dairy लांब, म्हणून दूध प्रत्येक भागातल्या booths मध्ये. CloudFront तुमच्या files च्या copies users जवळच्या edge locations मध्ये ठेवतो; copy नसेल किंवा जुनी असेल तरच origin (S3) कडे जातो.

हे काय आहे?

Commands aws cloudfront मध्ये. Global; updates, deletes ला current ETag --if-match म्हणून लागतो.

कसं करायचं (step by step)

CDN workflowPrivate S3 bucketcreate-origin-access-controlcreate-distributionBucket policy CloudFront ला allowDeploy नंतर create-invalidation
Distribution सगळीकडे deploy व्हायला काही मिनिटं.

2. Origin access control

हे का लागतं?

Bucket private राहावा; फक्त CloudFront वाचू शकेल.

हे काय आहे?

OAC CloudFront च्या S3 requests sign करतो. मग bucket policy फक्त तुमच्या distribution साठी cloudfront.amazonaws.com allow.

कसं करायचं (step by step)

  1. OAC बनवा.
OAC=$(aws cloudfront create-origin-access-control --origin-access-control-config Name=cli-oac,SigningProtocol=sigv4,SigningBehavior=always,OriginAccessControlOriginType=s3 --query OriginAccessControl.Id --output text)
echo $OAC

अपेक्षित output:

E2QWRUHAPOMQZL

3. Distribution बनवा

हे का लागतं?

Delhi आणि London दोघांनाही HTTPS वर site जलद.

हे काय आहे?

Distribution config मध्ये origins, default cache behavior, viewer protocol policy, default root object. CallerReference unique.

कसं करायचं (step by step)

  1. Config लिहा.
cat > dist.json <<J
{"CallerReference":"cli-$(date +%s)","Comment":"cli site","Enabled":true,"DefaultRootObject":"index.html",
 "Origins":{"Quantity":1,"Items":[{"Id":"s3","DomainName":"cli-site-bucket.s3.ap-south-1.amazonaws.com","OriginAccessControlId":"$OAC","S3OriginConfig":{"OriginAccessIdentity":""}}]},
 "DefaultCacheBehavior":{"TargetOriginId":"s3","ViewerProtocolPolicy":"redirect-to-https","CachePolicyId":"658327ea-f89d-4fab-a63d-7e88639e58f6"}}
J

अपेक्षित output:

(no output means success)
  1. बनवा आणि wait.
D=$(aws cloudfront create-distribution --distribution-config file://dist.json --query Distribution.[Id,DomainName] --output text)
echo $D
aws cloudfront wait distribution-deployed --id ${D%%[[:space:]]*}

अपेक्षित output:

E1ABCDEF234567  d111111abcdef8.cloudfront.net

4. Bucket policy आणि test

हे का लागतं?

Policy नसेल तर CloudFront ला S3 कडून 403.

हे काय आहे?

cloudfront service principal ला s3:GetObject, AWS:SourceArn = तुमचा distribution ARN.

कसं करायचं (step by step)

  1. Policy लावा.
ID=E1ABCDEF234567
cat > bp.json <<J
{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"cloudfront.amazonaws.com"},"Action":"s3:GetObject","Resource":"arn:aws:s3:::cli-site-bucket/*","Condition":{"StringEquals":{"AWS:SourceArn":"arn:aws:cloudfront::111122223333:distribution/$ID"}}}]}
J
aws s3api put-bucket-policy --bucket cli-site-bucket --policy file://bp.json

अपेक्षित output:

(no output means success)
  1. Test.
curl -sI https://d111111abcdef8.cloudfront.net/ | grep -iE "^HTTP|x-cache"

अपेक्षित output:

HTTP/2 200
x-cache: Miss from cloudfront
  1. परत (cache मधून).
curl -sI https://d111111abcdef8.cloudfront.net/ | grep -i x-cache

अपेक्षित output:

x-cache: Hit from cloudfront

5. Invalidate, update, disable

हे का लागतं?

नवीन index.html upload केली तरी users ना जुनी दिसते; नंतर distribution बदलायचा किंवा काढायचा.

हे काय आहे?

create-invalidation cached paths काढतो. update-distribution ला पूर्ण config आणि get-distribution-config चा ETag लागतो.

कसं करायचं (step by step)

  1. Invalidate.
aws cloudfront create-invalidation --distribution-id $ID --paths "/index.html" "/css/*" --query Invalidation.Status --output text

अपेक्षित output:

InProgress
  1. Config, ETag घेऊन disable.
aws cloudfront get-distribution-config --id $ID > cfg.json
E=$(jq -r .ETag cfg.json)
jq .DistributionConfig cfg.json | jq ".Enabled=false" > new.json
aws cloudfront update-distribution --id $ID --if-match $E --distribution-config file://new.json --query Distribution.Status --output text

अपेक्षित output:

InProgress

6. हीच action Python, Node.js, Java, Go, .NET आणि PHP मध्ये

हे का लागतं?

Scripts CLI मध्ये सुरू होतात. Apps तोच API SDK मधून call करतात. दोन्ही माहीत असले की test केलेली command थेट code मध्ये नेता येते.

हे काय आहे?

प्रत्येक CLI command म्हणजे एक API call. उदा. aws cloudfront create-invalidation --distribution-id $ID --paths "/*" म्हणजे Invalidate API.

कसं करायचं (step by step)

हीच action (Invalidate) code मधून. प्रत्येक SDK CLI सारखेच profile, region आणि credentials वाचतो.

StackCode
Python (boto3)boto3.client("cloudfront").create_invalidation(DistributionId=id,InvalidationBatch={"Paths":{"Quantity":1,"Items":["/*"]},"CallerReference":str(time.time())})
Node.js (v3)await cf.send(new CreateInvalidationCommand({DistributionId:id,InvalidationBatch:{Paths:{Quantity:1,Items:["/*"]},CallerReference:Date.now().toString()}}));
Java (v2)cf.createInvalidation(r -> r.distributionId(id).invalidationBatch(b -> b.callerReference(""+System.currentTimeMillis()).paths(p -> p.quantity(1).items("/*"))));
Go (v2)c.CreateInvalidation(ctx, &cloudfront.CreateInvalidationInput{DistributionId: aws.String(id), InvalidationBatch: batch})
.NETawait cf.CreateInvalidationAsync(new CreateInvalidationRequest{DistributionId=id,InvalidationBatch=batch});
PHP$cf->createInvalidation(["DistributionId"=>$id,"InvalidationBatch"=>$batch]);

7. काहीही खर्च चालू राहू नये म्हणून cleanup

हे का लागतं?

चालू ठेवलेले lab resources पैसे खातात आणि security risk बनतात.

हे काय आहे?

उलट्या क्रमाने delete करा: आधी children, मग parents.

कसं करायचं (step by step)

  1. Disabled deploy होईपर्यंत wait.
aws cloudfront wait distribution-deployed --id $ID

अपेक्षित output:

(no output means success)
  1. नवीन ETag ने delete.
E=$(aws cloudfront get-distribution --id $ID --query ETag --output text)
aws cloudfront delete-distribution --id $ID --if-match $E

अपेक्षित output:

(no output means success)
  1. OAC delete.
E=$(aws cloudfront get-origin-access-control --id $OAC --query ETag --output text)
aws cloudfront delete-origin-access-control --id $OAC --if-match $E

अपेक्षित output:

(no output means success)
  1. Verify.
aws cloudfront list-distributions --query "DistributionList.Items[?Id=='$ID']"

अपेक्षित output:

[]

Ravindra Bagale's Tip

"PreconditionFailed" म्हणजे ETag जुना. प्रत्येक update नवीन ETag देतो, म्हणून प्रत्येक update/delete आधी परत घ्या.

8. मुलाखत प्रश्न आणि उत्तरं

प्र. Edge location?

Users जवळची cache site.

प्र. OAC vs public bucket?

Bucket private, फक्त distribution.

प्र. --if-match का?

ETag ने overwrite टाळणं.

प्र. नवीन files लगेच कशा?

Invalidation किंवा versioned names.

प्र. Delete आधी disable का?

फक्त disabled delete होतात.

घरी करून बघा

  1. Private bucket मधली index.html CloudFront ने HTTPS वर serve करा.
  2. File बदलून invalidate करा, नवीन version confirm करा.

थोडक्यात सांगायचं तर

  1. OAC S3 private ठेवतो.
  2. create-distribution.
  3. SourceArn सह bucket policy.
  4. create-invalidation.
  5. ETag + --if-match.

सराव Tasks

या scenario बद्दल

Nairobi Ride हा नैरोबी मधला वाहतूक व्यवसाय आहे. Wanjiru Kamau त्यांचं IT व cloud काम पाहतात. त्यांचे पैसे KES मध्ये मोजले जातात आणि AWS resources af-south-1 Region मध्ये चालतात. खालच्या tasks मध्ये तुम्ही या lesson मध्ये शिकलेलं वापरून त्यांची खरी कामं करता. सगळी नावं, account IDs, IP addresses व numbers सरावासाठी काल्पनिक आहेत.

0 / 10

सोपं Distributions दाखवा

का: Distribution ID व domain नाव शोधा.

काय करायचं: सगळे CloudFront distributions दाखवा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

सोपं /16 मध्ये किती addresses?

का: VPC size ठरवायला ही संख्या लागते.

काय करायचं: Nairobi Ride चा VPC 10.205.0.0/16. एकूण किती IP addresses?

कसं करायचं:
  1. Task मधले numbers लिहून घ्या.
  2. कागदावर step by step काढा.
  3. Box मध्ये फक्त final उत्तर लिहा.
  4. Check answer दाबा.

सोपं SSH चा port

का: Security group rules ला योग्य port हवा.

काय करायचं: SSH साठी security group ने कोणता TCP port उघडावा?

कसं करायचं:
  1. Task मधले numbers लिहून घ्या.
  2. कागदावर step by step काढा.
  3. Box मध्ये फक्त final उत्तर लिहा.
  4. Check answer दाबा.

मध्यम CloudFront cache साफ करा

का: Deploy नंतर invalidate करा म्हणजे visitors ना नव्या files लगेच मिळतात.

काय करायचं: Distribution E2QWRUHAPOMQZL वर सगळे paths (/*) invalidate करा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

अवघड Config file पासून distribution बनवा

का: पूर्ण config JSON मध्ये ठेवणं सोपं.

काय करायचं: dist.json पासून CloudFront distribution बनवा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

अवघड दोन paths invalidate करा

का: फक्त बदललेलं invalidate करणं स्वस्त व जलद.

काय करायचं: E2QWRUHAPOMQZL वर /index.html व /css/site.css invalidate करा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

अवघड CloudFront OAC साठी bucket policy

का: OAC मुळे फक्त तुमचा CloudFront distribution private bucket वाचतो.

काय करायचं: cloudfront.amazonaws.com ला nairobiride-site/* वर s3:GetObject allow, फक्त aws:SourceArn = arn:aws:cloudfront::104591109902:distribution/E2QWRUHAPOMQZL असेल तेव्हा.

कसं करायचं:
  1. { "Version": "2012-10-17", "Statement": [ ... ] } ने सुरू करा.
  2. प्रत्येक statement मध्ये Effect, Action व Resource लिहा.
  3. Task ला लागेल तेवढंच द्या (least privilege).
  4. Double quotes व commas नीट वापरा. Check answer दाबा.

अवघड Origin Access Control बनवा

का: OAC मुळे फक्त CloudFront तुमचा private S3 bucket वाचू शकतो.

काय करायचं: oac.json पासून origin access control बनवा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

अवघड CloudFront साठी free certificate मागा

का: CloudFront फक्त us-east-1 मधले ACM certificates वापरतो.

काय करायचं: nairobiride.co.ke व www.nairobiride.co.ke साठी DNS validation ने us-east-1 मध्ये certificate मागा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

अवघड CloudFront signed URL बनवा

का: Signed URLs मुळे फक्त पैसे भरलेले users ठराविक वेळ video पाहू शकतात.

काय करायचं: https://d111.cloudfront.net/course/intro.mp4 ला key pair ID K2JCJMDEHXQW5F, private key private_key.pem ने sign करा, 2026-12-31 ला expire.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

उजळणी, तुलना आणि मुलाखत cards

हा lesson काही मिनिटांत revise करा. Cards phone वर save करा किंवा PNG download करा. प्रत्येक card वरचा QR हा lesson उघडतो.

CloudFront distribution. प्रत्येक घराजवळ दूध booths. OAC bucket private ठेवतो. create-distribution, wait deployed. AWS:SourceArn सह bucket policy.
उजळणी card: CloudFront distribution · PNG download करा · Card page उघडा
CloudFront invalidate. Users ना जुनी file दिसते. Paths साठी create-invalidation. Updates ला ETag + --if-match. Disable, wait, मग delete.
उजळणी card: CloudFront invalidate · PNG download करा · Card page उघडा
Invalidation vs Versioned names. Cached paths काढा. / app.v2.css सारखं नवीन नाव.
तुलना: Invalidation vs Versioned names · PNG download करा · Card page उघडा
CloudFront PreconditionFailed?. ETag जुना. प्रत्येक update नवीन ETag. Update/delete आधी लगेच घ्या.
मुलाखत card: CloudFront PreconditionFailed? · PNG download करा · Card page उघडा

अजून cards: Ravi Sir's Cards.