察象èªè : AWSãããããè§Šã人ã AWSå匷ã·ãªãŒãºã®11æ¬ç®ã§ããå šäœã®å°å³ã¯çŽ¢åŒèšäºã«ãããŸãã
ãã®èšäºãèªããšã次ã®2ã€ã®çç¶ãèªåã§åãåããããããã«ãªããŸãã
- ãµã€ãã¯åããŠããã®ã«ãé ãã®å©çšè ããã ããé ãããšèšããã
- ãã¡ã€ã«ãæŽæ°ããã®ã«ããã©ãŠã¶ã«ã¯ãã€ãŸã§ãå€ãã®ã衚瀺ããã
CloudFrontãšã¯äœã
Amazon CloudFrontã¯ãããªãã®ãµã€ãã®ã³ããŒãäžçäžã®ãè¿æãã«çœ®ããŠãäžçªè¿ãå Žæããé ããµãŒãã¹ã§ããCDN(ã³ã³ãã³ãé ä¿¡ãããã¯ãŒã¯)ãšåŒã°ããçš®é¡ã®ãã®ã§ãäžã®çµµã®ãšããæ¬åº(S3ãEC2)ã¯1è»ã®ãŸãŸãåå°ã®ã³ã³ãã(ãšããžãã±ãŒã·ã§ã³)ã«ååã眮ããŠããã€ã¡ãŒãžã§ããå©çšè ã¯æ¬åºãŸã§è¡ãããè¿æã®åºããåãåããŸããè¿ãããéããããã ãã®è©±ã§ãã
ãããã ãããšæžããŸããããè·é¢ã®å¹æã¯æ³åãã倧ããã§ããæ±äº¬ã®æ¬åºãããã©ãžã«ã®å©çšè ã«ãã¡ã€ã«ãå±ãããšãè·é¢ã ãã§æ°çŸããªç§ããããŸããè¿æã®ãšããžããé ãã°æ°åããªç§ã10åã®å·®ã«ãªããŸãã
äœã«äœ¿ãã
- éçãµã€ãã®äžçé ä¿¡: S3ã«çœ®ããHTMLã»ç»åã»åç»ãé«éã«é ããS3+CloudFrontã¯éçãµã€ãã®å®çªãã¢
- 転éæã®ç¯çŽ: S3ã®åã§æžãããšãããS3ããçŽæ¥ã€ã³ã¿ãŒãããã«é ããšè»¢éæãéããCloudFrontçµç±ã¯ç¡ææ ãæ¡éãã«å€§ãããS3ããCloudFrontãžã®åãå¯ãã¯ç¡æ
- HTTPSã®çªå£: S3ã®éçãµã€ãæ©èœã¯çŽ ã®ãŸãŸã ãšHTTPSã«ã§ããªããCloudFrontãåã«çœ®ããšHTTPSã«ãªã
ä»AWSã®å°å³ã®ã©ãã«ããã
ååã®Route 53ã§ãååããæãŠãã®ã§ãä»åã¯ãéããã§ããå®ã¯åœ¹å²ãæ··ããããã2ã€ã§ãRoute 53ã¯äœæãæããé»è©±åž³ãCloudFrontã¯ååã眮ãåºãé»è©±åž³ã¯åºã®å Žæãæããã ãã§ãååã¯æã£ãŠããŸããã
ä»ã¯ããã ãåããã°OK
å¿ é ã®3èªã ãèŠããŸãã
| èª | æå³ |
|---|---|
| ãã£ã¹ããªãã¥ãŒã·ã§ã³ | é ä¿¡ã®èšå®1åŒããã©ã®æ¬åºã®ãäœããã©ãé ãããã®æ |
| ãªãªãžã³ | æ¬åºã®ããšãS3ãã±ãããEC2ãªã©ãå ããŒã¿ã®çœ®ãå Žæ |
| ãã£ãã·ã¥ | è¿æã®åºã«çœ®ããŠããåšåº«ããããéãã®æºã§ãäºæ ã®æº |
ãšããžãã±ãŒã·ã§ã³ãããã€ãã¢ãOAC(ãªãªãžã³ã¢ã¯ã»ã¹ã³ã³ãããŒã«)ãšãã£ãçšèªã¯åŸåãã§å€§äžå€«ã§ãã
äœ¿ãæ¹
ããããšã¯4ã€ãäžã®å³ããã®ãŸãŸã³ãŒãã®é çªã«ãªããŸãã
import boto3
cf = boto3.client("cloudfront", region_name="us-east-1")
# â é
ä¿¡ãäœããæž¡ãã®ã¯ãæ¬åºã®äœæããšé
ãæ¹ã®æäœé
config = {
"CallerReference": "ref-001", # äºéäœæé²æ¢ã®åèšè(èªåã§æ±ºãã)
"Comment": "my-first-cdn",
"Enabled": True,
"Origins": {"Quantity": 1, "Items": [{
"Id": "origin1",
"DomainName": "my-site.example.com", # æ¬åº(ãªãªãžã³)ã®äœæ
"CustomOriginConfig": {"HTTPPort": 80, "HTTPSPort": 443,
"OriginProtocolPolicy": "https-only"}}]},
"DefaultCacheBehavior": {
"TargetOriginId": "origin1",
"ViewerProtocolPolicy": "redirect-to-https",
"CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e58f6", # AWS管çã®æ¢å®ãã£ãã·ã¥èšå®
},
}
d = cf.create_distribution(DistributionConfig=config)["Distribution"]
print("domain:", d["DomainName"])
print("status:", d["Status"])
motoã§å®è¡ããåºåã§ã(motoã®äœ¿ãæ¹ã¯ã·ãªãŒãºSQSååç §)ã
domain: mwhcgmejunu46.cloudfront.net / status: InProgress
ãã® xxxx.cloudfront.net ãæ°ããé
åžçšã®äœæã§ããâ¡ã¯ãã® InProgress ã Deployed ã«ãªãã®ãåŸ
ã€å·¥çšã§ãæ¬ç©ã®AWSã§ã¯æ°åãæ°ååããããŸããäžçäžã®åºã«åšåº«ã䞊ã¹ãŠåã£ãŠãããšãããªã®ã§ãããã¯åŸ
ã€ãããããŸãããâ¢ã¯åŸ
ã¡çµãã£ãããã©ãŠã¶ã§cloudfront.netã®äœæãéãã ããâ£ã®æ¶ãæ¹ã«ã¯çœ ãããã®ã§ãåŸã®å®æž¬ã®ç¯ã§æžããŸãã
èšå®ã®äžã§èŠæ
£ããªãã®ã¯ CallerReference ã ãšæããŸããããã¯ãåãäŸé Œãäºéã«åãä»ããªãããã®åèšèãã§ãèªåã§é©åœãªæååãæ±ºããŸããåãåèšèã§2åäœãããšãããšãšã©ãŒã«ãªããŸã(ãããåŸã§å®éã«å©ããŸã)ã
ä»ããªããäœã£ããã®
â ã§ã§ããã®ã¯ãæ¬åºã®äœæãç¥ã£ãŠããŠãäžçäžã«åšåº«çœ®ãå Žãæã€é éç¶²ãã§ãããŸã åšåº«ã¯ãããŸãããæåã®å©çšè ãã¢ã¯ã»ã¹ããç¬éã«ããšããžãæ¬åºããåãå¯ããŠåšåº«ã«ããŸããã ããåãå°åã®1人ç®ã ãã¯é ããŠã2人ç®ããéããå¥ã®å°åã®äººã«ã¯ããã®åå°ã®ã1人ç®ãããŸãçºçããŸãããã®æåãç¥ããªããšãCloudFrontå ¥ããã®ã«éããªããªãããšäžç¬çŠããŸããæž¬ããªãåãå Žæãã2åã¢ã¯ã»ã¹ããŠãã ããã
1ãæã ãå€ããŠã¿ã
"Enabled": True ã False ã«ããŠäœã£ãŠã¿ãŠãã ãããé
ä¿¡ã¯äœããŸãããäœæã«ã¢ã¯ã»ã¹ããŠãé
ãããŸããããäœãããšããšãé
ãããšãã¯å¥ã®ã¹ã€ããããã®æ§é ã1è¡ã§èŠããŸãããã®2段æ§ãããåŸè¿°ããå逿é ã®äŒç·ã«ãªããŸãã
å®éã«å©ããšæ¢ãŸããšãã
äœãæ¹ãééãããšãã«äœãè¿ããã4ãã¿ãŒã³motoã§å®éã«å©ããŸãã(ãšã©ãŒã®çš®é¡åã¯æ¬ç©ã®AWSãšåãã§ã)ã
get_distribution(Id="E2QWRUHAPOMQZL") # ç¡ãID
â NoSuchDistribution - The specified distribution does not exist.
delete_distribution(Id=...) # ETagç¡ãã§åé€
â InvalidIfMatchVersion - The If-Match version is missing or not valid
create_distribution(ãªãªãžã³0å)
â ParamValidationError - Invalid length for parameter Origins.Items
create_distribution(åãCallerReferenceã§ããäžåºŠ)
â DistributionAlreadyExists - The caller reference that you are using...
2ã€ç®ãä»åã®äž»åœ¹çŽã®çœ ã§ããCloudFrontã®åé€ã¯ delete_distribution(Id=...) ã ãã§ã¯éããŸãããETagãšãããä»ã®èšå®ã®ããŒãžã§ã³æãã IfMatch ã§æž¡ãã®ãå¿
é ã§ãããããã®åã«é
ä¿¡ãç¡å¹å(Enabled: False ã«æŽæ°)ããŠãããªããšãããªããã€ãŸãæ£èŠã®æ¶ãæ¹ã¯ãâ ETagãåã£ãŠç¡å¹åã«æŽæ°ââ¡StatusãDeployedã«æ»ããŸã§åŸ
ã€(æ°åãåæ°å)ââ¢ETagãåãçŽãââ£IfMatchä»ãã§åé€ããç¡å¹åã¯ãªã¯ãšã¹ããåçãããã ãã§ã¯è¶³ãããäžçäžã®åºããŸããçµãããŸã§åé€ã¯åŒŸãããŸããETagãç¡å¹åã§å€ããã®ã§ãå€ãæã§â£ãå©ããŠãã ãã§ããèªåãæåã®ã¹ã¯ãªããã¯åé€ãŸããã®æ³å®ãçããé çªã厩ããŠäžåºŠãããŸãããäžã®4æã¯ãã®æžãçŽãåŸã®åœ¢ã§ãã
çœç¶ããŠãããšããã®ãæå¹ãªãŸãŸåé€ãããšDistributionNotDisabledã§æããããæåã¯ãmotoã§ã¯åçŸã§ããŸããã§ãããmotoã¯æå¹ãªãŸãŸã§ãåé€ãéããŠããŸããŸãããšã©ãŒã®åãæå ã§å šéšç¢ºèªãããã£ãã®ã§ãããããã ãã¯æ¬ç©ã®AWSã®ããã¥ã¡ã³ããšæåãé Œãã§ãã
䌌ããµãŒãã¹ãšã®äœ¿ãåã
| è¿·ããšãã | çã |
|---|---|
| S3ã®éçãµã€ãæ©èœã ãã§ããã | åœå ã®å°äººæ°åãã§ãHTTPSãäžèŠãªãS3ã ãã§ãåããäžçåãã»HTTPSã»è»¢ééãå€ããªãCloudFrontãåã«çœ®ã |
| Route 53ãšã©ã£ã¡ãéãã«å¹ãã | Route 53ã¯åå解決(åºã®å Žæãæãã)ã ãã§é ä¿¡ã¯ããªããéãã«å¹ãã®ã¯CloudFront |
| ElastiCacheãšäœãéãã | ã©ã¡ãããã£ãã·ã¥ã ãå ŽæãéããCloudFrontã¯å©çšè ã®è¿ã(å€åŽ)ãElastiCacheã¯DBã®æå(å åŽ) |
æéã®èãæ¹
課éã¯äž»ã«2ã€ã§ãã
- 転éæ: ãšããžããå©çšè ãžã®éä¿¡ãæ¥æ¬åãã§1GBããã0.114 USDååŸãæ¯æ1TBãŸã§ã®ç¡ææ ãã(2025幎7æä»¥éã«äœã£ãæ°èŠã¢ã«ãŠã³ãã¯ç¡ææ ã®ä»çµã¿ãã¯ã¬ãžããå¶ã«å€ãã£ãŠããã®ã§ãå ¬åŒã®æéããŒãžã§èªåã®ãã©ã³ã確èªããŠãã ãã)
- ãªã¯ãšã¹ãæ: 100äžãªã¯ãšã¹ãã§1 USDååŸ
èŠã©ããã¯ç¡ææ ã®å€§ããã§ããS3ããçŽæ¥é ããšç¡ææ ã¯100GBãCloudFrontçµç±ãªã1TBãå人ã®ãµã€ããåŠç¿çšéãªããCloudFrontãæãã æ¹ãéããªã£ãäžã§ã¿ãã«ãªããŸãããã®éè»¢ã¯æ®éã«èµ·ããŸãããCDNã¯å€§èŠæš¡ãµãŒãã¹çšã®é«ãéå ·ãããã®å å ¥èŠ³ã¯ãå°ãªããšãæéã«ã€ããŠã¯åœãŠã¯ãŸããŸããã
ããããæ³šæç¹
-
æŽæ°ãåæ ãããªãã®ã¯æ
éã§ã¯ãªã仿§ã è¿æã®åºã¯åšåº«(ãã£ãã·ã¥)ãåãããŸã§å€ãååãé
ãç¶ããŸããæ¥ãã§åæ ããããšãã¯ãã€ã³ããªããŒã·ã§ã³(åšåº«ãæšãŠãããæç€º)ãåºããŸãã
create_invalidationã§/*ãæå®ããã®ãå®çªããã ãæ1,000ãã¹è¶ ã¯ææ -
æ¶ãã®ã¯2段é+åŸ
ã¡ã äžã§æžãããšãããç¡å¹åâDeployedåŸ
ã¡âETagåãçŽãâåé€ãæå¹ãªãŸãŸæ¶ãããšããŠã
DistributionNotDisabledã§åŒŸãããŸã - é ä¿¡ã®åæ ã¯é ãã äœæãèšå®å€æŽãæ°åãæ°åååŸ ã¡ãŸããEC2ãS3ã®æèŠã§ãå³åæ ããæåŸ ãããšäžå®ã«ãªããŸãããäžçäžã®åºã«é ã£ãŠåã£ãŠããããã§ã
- S3ããªãªãžã³ã«ãããªãå ¥ãå£ãçµãã CloudFrontçµç±ã§é ãã®ã«ãS3ãã±ããèªäœãå ¬éã®ãŸãŸã ãšè£å£ãéããŠããŸããOACãšããä»çµã¿ã§ãCloudFrontããããèªããªããããã«ããã®ãå®ç³ã§ãããããã¯å ¥éã®æ¬¡ã®äžæ©ã§ã
ãŸãšã
åé ã®2ã€ã®çç¶ã«çããŸããé ãã®å©çšè ããã ãé ãã®ã¯ãæ¬åº1è»ããäžçã«é ã£ãŠãããããCloudFrontã§è¿æã«åšåº«ã眮ãã°è§£æ±ºããŸããæŽæ°ããã®ã«å€ããŸãŸãªã®ã¯ããã®åšåº«ãæ®ã£ãŠãããããæ¥ããªãã€ã³ããªããŒã·ã§ã³ã§æšãŠãããŸããéãã®æºãšäºæ ã®æºã¯ãåãããã£ãã·ã¥ãããããä»åã®äžçªã®æã¡åž°ãã§ãã
æ¬¡ã«æãåãããªããmotoã§â ãäœã£ãŠ DomainName ãçãããšãããŸã§ãããããåé€ã®4æ(ETagåãçŽã蟌ã¿)ããã£ãŠã¿ãŠãã ãããETagãåãçŽããã«åé€ããŠåŒŸããããããããä»åã®åŠã³ã身ã«ã€ããç¬éã§ãã
次åã¯ELB(ããŒããã©ã³ãµãŒ)ãäºå®ããŠããŸããã1è»ã®æ¬åºããè€æ°ã®åšæ¿ã§åãã話ã§ãã
åè
- Amazon CloudFront å ¬åŒããã¥ã¡ã³ã
- Amazon CloudFront ã®æé
- ã·ãªãŒãºçŽ¢åŒ: AWSãšã¯äœã
- åå: Route 53ãšã¯



