åç ïŒ Unsplashã® ãžã§ã·ãŒã» ããŒã©ã³ã
ãã®èšäºã§ã¯ãã€ã¡ãŒãžã®ååŠçããã»ã¹ãã¢ããªã±ãŒã·ã§ã³ãµãŒããŒããå®å šã«ãµãŒããŒã¬ã¹ã®AWSãã©ãããã©ãŒã ã®ã¢ãŒããã¯ãã£ã«ç§»è¡ããæ¹æ³ã«ã€ããŠèª¬æããŸãã
åé¡ã®æ¬è³ª
Webã¢ããªã±ãŒã·ã§ã³ã§ç»åã®ããŠã³ããŒããèš±å¯ãããŠããå ŽåããŠãŒã¶ãŒã«è¡šç€ºããåã«ç»åãåŠçããå¿ èŠããããŸãã
ãã®èšäºã§ã¯ãAWSãã©ãããã©ãŒã ã«åºã¥ãããµãŒããŒã¬ã¹ã¢ãŒããã¯ãã£ã«ã€ããŠèª¬æããŸããAWSãã©ãããã©ãŒã ã¯ãåºç¯ãªã¹ã±ãŒã©ããªãã£ãæäŸããŸãã
ç§ã®æè¿ã®ãããžã§ã¯ãã®1ã€ïŒãŠãŒã¶ãŒã補åã®ç»åãã¢ããããŒãããå¿ èŠãããååŒçšã®Webã¢ããªã±ãŒã·ã§ã³ïŒã§ã¯ãæåã«å ã®ç»åãã¢ã¹ãã¯ãæ¯4ïŒ3ã«ããªãã³ã°ãããŸãã 次ã«ãããŸããŸãªãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ã§äœ¿çšããã3ã€ã®ç°ãªã圢åŒã800x600ã400x300ãããã³200x150ã«å€æãããŸãã
Ruby on Railsãã¬ãŒã ã¯ãŒã¯ã®éçºè ãšããŠãç§ã¯æåã«ç»ååŠçã«ImageMagickã¹ã€ãŒãã䜿çšããRubyGemããã±ãŒãžãã€ãŸãPaperclipãŸãã¯Dragonflyãè©Šãããšã«ããŸããã
ããã¯ããªãåçŽãªã¢ãããŒãã§ãããæ¬ ç¹ããããŸãã
- ç»åã¯ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã§åŠçãããŸãã ããã«ãããããã»ããµã®è² è·ãå¢å ãããããå šäœçãªå¿çæéãé·ããªãå¯èœæ§ããããŸãã
- ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã®ããã©ãŒãã³ã¹ã¯å¶éãããŠãããæç¶çãªèŠæ±åŠçã«ã¯é©ããŠããŸããã è€æ°ã®ç»åãåæã«åŠçããå¿ èŠãããå Žåã¯ãé·æéå®å šã«èªã¿èŸŒãŸããå¯èœæ§ããããŸãã ãµãŒããŒã®ããã©ãŒãã³ã¹ãåäžããããšãã³ã¹ããå¢å ããŸãã
- ç»åã¯é çªã«åŠçãããŸãã ç¹°ãè¿ããŸãããå€ãã®ç»åãããã«åŠçãããå Žåã¯æéãããããŸãã
- äžèšã®ããã±ãŒãžãæ£ããæ§æãããŠããªãå ŽåãåŠçãããã€ã¡ãŒãžã¯ãã£ã¹ã¯ã«ä¿åãããããã«ãµãŒããŒã®ç©ºã容éãäžè¶³ããå¯èœæ§ããããŸãã
äžè¬ã«ãã¢ããªã±ãŒã·ã§ã³ãååãªæ°ã®ç»åãåŠçããå Žåããã®ãœãªã¥ãŒã·ã§ã³ã¯ã¹ã±ãŒãªã³ã°ããŸããã
解決ç
ç»åã®ååŠçããã»ã¹ãããèŠããšãã»ãšãã©ã®å Žåãã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã§çŽæ¥å®è¡ããå¿ èŠããªãããšãããããŸãã ããã¯ãç»å以å€ã®ããŒã¿ãå¿ èŠãšããªãåãå€æãåžžã«å®è¡ãããå Žåã«ç¹ã«åœãŠã¯ãŸããŸãã ç§ã®å Žåã¯ããã§ãããç§ã¯ãã€ãããµã€ãºã®ç°ãªãè€æ°ã®ç»åãäœæããå質ã¬ãã«ãæé©åããŸããã
ãã®ã¿ã¹ã¯ãã¢ããªã±ãŒã·ã§ã³ããžãã¯ã®æ®ãã®éšåããç°¡åã«åé¢ã§ããããšãæããã«ãªã£ãçŽåŸãå ã®ã€ã¡ãŒãžãå ¥åãšããŠåçŽã«å¿ èŠãªå€æããã¹ãŠå®è¡ãããµãŒããŒã¬ã¹ãœãªã¥ãŒã·ã§ã³ã®ã¢ã€ãã¢ãããã«æãæµ®ãã³ãŸããã
AWS Lambdaã¯ãã®ç®çã«æé©ã§ããããšãããããŸããã 1ç§éã«æ°åã®ãªã¯ãšã¹ããåŠçããããšãã§ããå®éã®èšç®æéã«å¯ŸããŠã®ã¿æ¯æãå¿ èŠããããŸãã ã³ãŒããå®è¡ãããªãå Žåã圌ãã¯ããªããããéãèŠæ±ããŸããã
AWS S3ã¯äœã³ã¹ãã§ç¡å¶éã®ã¹ãã¬ãŒãžãæäŸããAWS SNSã¯ãã€ã¯ããµãŒãã¹ãåæ£ã·ã¹ãã ãããã³ãµãŒããŒã¬ã¹ã¢ããªã±ãŒã·ã§ã³åãã®ç°¡åãªãããªãã·ã£ãŒ/ãµãã¹ã¯ã©ã€ããŒã¡ãã»ãŒãžã³ã°ãæäŸããŸãã æåŸã«ãAWS Cloudfrontã¯ãS3ã«ä¿åãããç»åã®ã³ã³ãã³ãé ä¿¡ãããã¯ãŒã¯ãšããŠäœ¿çšãããŸãã
ããã4ã€ã®AWSãµãŒãã¹ãçµã¿åãããããšã§ãäœã³ã¹ãã§åŒ·åãªç»ååŠçãœãªã¥ãŒã·ã§ã³ãæäŸãããŸãã
é«ã¬ãã«ã®ã¢ãŒããã¯ãã£
1ã€ã®ãœãŒã¹ããç°ãªãããŒãžã§ã³ã®ã€ã¡ãŒãžãäœæããã«ã¯ãAWS S3ã«å ã®ã€ã¡ãŒãžãããŒãããŸãã 次ã«ãAWS SNSã䜿çšããŠãAWS Lambdaé¢æ°ãèµ·åããŸããããã¯ãæ°ããããŒãžã§ã³ãäœæããAWS S3ã«åããŒããã圹å²ãæãããŸãã ãã詳现ã«ã¯ãããã»ã¹ã¯æ¬¡ã®ããã«ãªããŸãã
- ç»åã¯AWS S3ãã±ããå ã®ç¹å®ã®ãã©ã«ããŒã«ã¢ããããŒããããŸãã
- ãã®ãã©ã«ããŒã«æ°ããã€ã¡ãŒãžãã¢ããããŒãããããã³ã«ããµãŒãã¹ã¯AWS SNSãããã¯ã§äœæããããªããžã§ã¯ãã®S3ããŒãå«ãã¡ãã»ãŒãžãéä¿¡ããŸãã
- åãSNSãããã¯ã§ãŠãŒã¶ãŒãšããŠèšå®ãããAWS Lambdaã¯ãã¡ãã»ãŒãžãèªã¿åãããã®ããŒã䜿çšããŠæ°ããã€ã¡ãŒãžãååŸããŸãã
- AWS Lambdaã¯ã€ã¡ãŒãžãåŠçããå¿ èŠãªå€æãå®è¡ããŠãããS3ã«ã¢ããããŒãããŸãã
- åŠçãããç»åã¯ãŠãŒã¶ãŒã«è¡šç€ºãããŸãã ããŠã³ããŒãé床ãæé©åããããã«ãAWS Cloudfrontã³ã³ãã³ãé ä¿¡ãããã¯ãŒã¯ãããã«äœ¿çšãããŸãã
ãã®ã¢ãŒããã¯ãã£ã¯ãã¢ããããŒããããåã€ã¡ãŒãžãç¹å®ã®ãªã¯ãšã¹ããåŠçããããã«Lambdaã³ãŒãã®æ°ããå®è¡ãéå§ãããããç°¡åã«æ¡åŒµã§ããŸãã ãããã£ãŠãè€æ°ã®ã³ãŒããå®è¡ãããšãäžåºŠã«æ°åã®ç»åãåŠçã§ããŸãã
ãã¹ãŠã®ããŒã¿ã¯S3ã«æ ŒçŽãããLambdaãµãŒãã¹ã«ãã£ãŠåŠçããããããã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã®ãã£ã¹ã¯å®¹éãšã³ã³ãã¥ãŒãã£ã³ã°ãªãœãŒã¹ã¯äœ¿çšãããŸããã
æåŸã«ãS3çšã®ã³ã³ãã³ãé ä¿¡ãããã¯ãŒã¯ã®èšå®ã¯éåžžã«ç°¡åã§ãäžçäžã®ã©ãã§ãé«ãããŠã³ããŒãé床ãç¶æã§ããŸãã
é ãè¿œã£ã説æ
ãã®ãœãªã¥ãŒã·ã§ã³ã®å®è£ ã¯ããã»ã©è€éã§ã¯ãããŸãããåºæ¬çã«ïŒã€ã¡ãŒãžã®ååŠçãå®è¡ããLambdaã³ãŒããé€ãïŒãæ§æã®ã¿ãå¿ èŠãšããããã§ãã ãã®èšäºã®æ®ãã®éšåã§ã¯ãAWSã¢ãŒããã¯ãã£ãæ§æããæ¹æ³ã«ã€ããŠè©³ãã説æããŸãã ãŸãããã®äœæ¥ãååã«è©äŸ¡ã§ããããã«ãããŠã³ããŒããããã€ã¡ãŒãžã®ãµã€ãºãå€æŽããããã®AWS Lambdaã³ãŒããæäŸãããŠããŸãã
èªåã§è©ŠããŠã¿ãã«ã¯ãAWSã¢ã«ãŠã³ããå¿ èŠã§ãã ããã§äœæããŠãAWSã®ç¡æã¹ã¿ãŒã¿ãŒããã¯ã䜿çšã§ããŸãã
ã¹ããã1ïŒAWS SNSã§ãããã¯ãäœæãã
ãŸããæ°ããSNSïŒSimple Notification ServiceïŒãããã¯ãèšå®ããå¿ èŠããããŸããããã§ãAWSã¯æ°ããã€ã¡ãŒãžãS3ã«ã¢ããããŒãããããã³ã«ã¡ãã»ãŒãžãçºè¡ããŸãã ãã®ã¡ãã»ãŒãžã«ã¯ããªããžã§ã¯ãã®S3ããŒãå«ãŸããŠããŸãããã®ããŒã¯ããã®åŸãã€ã¡ãŒãžãååŸããã³åŠçããããã«Lambdaé¢æ°ã«ãã£ãŠäœ¿çšãããŸãã
AWSã³ã³ãœãŒã«ãããSNSããŒãžã«ç§»åãã[ãããã¯ã®äœæ]ãã¯ãªãã¯ããŠããããã¯åïŒããšãã°ãimage-preprocessingïŒãå ¥åããŸãã
次ã«ããããã¯ããªã·ãŒãå€æŽããŠãS3ãã±ãããã¡ãã»ãŒãžãçºè¡ã§ããããã«ããå¿ èŠããããŸãã
ãããã¯ããŒãžã§ã[ã¢ã¯ã·ã§ã³]-> [ãããã¯ããªã·ãŒã®ç·šé]ãã¯ãªãã¯ãã[詳现衚瀺]ãéžæããŠã次ã®JSONãããã¯ïŒResourceããã³SourceArnè¡ã§ç¬èªã®AmazonãªãœãŒã¹åïŒarnïŒãæå®ïŒãStatementé åã«è¿œå ããããªã·ãŒãæŽæ°ããŸãã
{ "Sid": "ALLOW_S3_BUCKET_AS_PUBLISHER", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "SNS:Publish", ], "Resource": "arn:aws:sns:us-east-1:AWS-OWNER-ID:image-preprocessing", "Condition": { "StringLike": { "aws:SourceArn": "arn:aws:s3:*:*:YOUR-BUCKET-NAME" } } }
å®å šãªããªã·ãŒJSONããã¹ãã®äŸã¯ãã¡ã ã
ã¹ããã2ïŒAWS S3ãã©ã«ããŒæ§é ãäœæãã
次ã«ãS3ã§ãã©ã«ããŒæ§é ãæºåããå¿ èŠããããŸãããã©ã«ããŒæ§é ã«ã¯ããœãŒã¹ããã³åŠçãããã€ã¡ãŒãžãä¿åãããŸãã ãã®äŸã§ã¯ã800x600ãš400x300ã®2ã€ã®ãµã€ãºã®ç»åã®ããŒãžã§ã³ãäœæããŸãã
AWSã³ã³ãœãŒã«ããã S3ããŒãžãéããæ°ãããã±ãããäœæããŸãã ãããimage-preprocessing-exampleãšåŒã³ãŸãã 次ã«ããã±ããã«ãªãªãžãã«ã800x600ããã³400x300ãšããååã®ãã©ã«ããŒãäœæããå¿ èŠããããŸãã
ã¹ããã3ïŒAWS S3ã€ãã³ããèšå®ãã
æ°ããç»åãå ã®ãã©ã«ãã«ã¢ããããŒãããããã³ã«ãS3ã¯ç»åååŠçãããã¯ã§ã¡ãã»ãŒãžãå ¬éããŠããã®ç»åãåŠçã§ããããã«ããå¿ èŠããããŸãã
ãã®ãããªã¡ãã»ãŒãžã®çºè¡ãèšå®ããã«ã¯ãAWSã³ã³ãœãŒã«ã§S3ãã±ãããéãã[ããããã£]-> [ã€ãã³ã]-> [éç¥ã®è¿œå ]ãã¯ãªãã¯ããŠã次ã®ãã£ãŒã«ãã«å ¥åããŸãã
ããã§ã¯ããªãªãžãã«ãã©ã«ããŒïŒãã¬ãã£ãã¯ã¹ãã£ãŒã«ãïŒå ã«æ°ãããªããžã§ã¯ããäœæããããã³ã«ã€ãã³ããçæããã«ãŒã«ãèšå®ãïŒObjectCreateãã§ãã¯ããã¯ã¹ïŒããã®ã€ãã³ããç»åååŠçSNSãããã¯ã§å ¬éããŸãã
ã¹ããã4ïŒI3ããŒã«ãèšå®ããŠLambdaã«S3ãã©ã«ããŒãžã®ã¢ã¯ã»ã¹ãæäŸãã
S3ãã©ã«ããŒããã€ã¡ãŒãžãããŠã³ããŒãããŠåŠçããåŠçãããããŒãžã§ã³ãS3ã«ããŒãããLambdaé¢æ°ãäœæããå¿ èŠããããŸãã ãã ããæåã«ãLambdaé¢æ°ãå¿ èŠãªS3ãã©ã«ããŒã«ã¢ã¯ã»ã¹ã§ããããã«ãIAMããŒã«ãèšå®ããå¿ èŠããããŸãã
AWSã³ã³ãœãŒã«ãããIAMããŒãžã«ç§»åããŸãã
- [ ããªã·ãŒã®äœæ]ãã¯ãªãã¯ããŸã ã
- JSONãæŒããŠããã±ããã®ååãå ¥åããŸãã
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1495470082000", "Effect": "Allow", "Action": [ "s3:*" ], "Resource": [ "arn:aws:s3:::YOUR-BUCKET-NAME/*" ] } ] }
ãªãœãŒã¹è¡ã¯ãS3ã®ãã±ãããæããŸãã [確èª]ãã¯ãªãã¯ããAllowAccessOnYourBucketNameãªã©ã®ããªã·ãŒåãå ¥åããŠãããªã·ãŒãäœæããŸãã
- [圹å²]-> [圹å²ã®äœæ]ãã¯ãªãã¯ããŸãã
- AWSãµãŒãã¹-> LambdaïŒããªã·ãŒã䜿çšãããµãŒãã¹ïŒãéžæããŸãã
- 以åã«äœæããããªã·ãŒïŒAllowAccessOnYourBucketNameïŒãéžæããŸãã
- ã¬ãã¥ãŒãã¯ãªãã¯ããååïŒLambdaS3YourBucketNameïŒãå ¥åããŠã[ããŒã«ã®äœæ]ãã¯ãªãã¯ããŸãã
Lambda
ããŒã«ãäœæãã
Lambda
ããŒã«ãžã®ããªã·ãŒã®æ·»ä»
圹å²ä¿å
ã¹ããã5ïŒAWS Lambdaæ©èœãäœæãã
次ã«ãã€ã¡ãŒãžååŠçãããã¯ããã¡ãã»ãŒãžãèªã¿åããã€ã¡ãŒãžã®ä¿®æ£ããŒãžã§ã³ãçæããããã«Lambdaé¢æ°ãæ§æããå¿ èŠããããŸãã
æ°ããLambdaæ©èœãäœæããããšããå§ããŸãããã
AWSã³ã³ãœãŒã«ããLambdaããŒãžã«ç§»åãã[é¢æ°ã®äœæ]ãã¯ãªãã¯ããŠãæ°ããé¢æ°ã®ååïŒImageResizeãªã©ïŒãå ¥åããŸãã ã©ã³ã¿ã€ã ïŒãã®å Žåã¯Node.js 6.10ïŒãšä»¥åã«äœæããIAMããŒã«ãéžæããŸãã
次ã«ãç»åã®ååŠçãããã¯ã§æ°ããã¡ãã»ãŒãžãçºè¡ããããã³ã«Lambdaé¢æ°ãåŒã³åºãããããã«ãããªã¬ãŒã®æ°ã«SNSãè¿œå ããå¿ èŠããããŸãã
ãããè¡ãã«ã¯ãããªã¬ãŒã®ãªã¹ãã§[SNS]ãã¯ãªãã¯ããSNSãããã¯ã®ãªã¹ãã§[ã€ã¡ãŒãžååŠç]ãéžæããŠã[è¿œå ]ãã¯ãªãã¯ããŸãã
ããã§ãS3 ObjectCreatedã€ãã³ããåŠçããã³ãŒããããŠã³ããŒãããå¿ èŠããããŸããããã«ã¯ãå ã®ãã©ã«ããŒããããŠã³ããŒãããç»åãåä¿¡ããåŠçããå€æŽããç»åã«é©ãããã©ã«ããŒã«åèªã¿èŸŒã¿ããŸãã
ã³ãŒãã¯ããããããŠã³ããŒãã§ããŸã ã
Lambdaé¢æ°ã«ããŒãããå¿ èŠãããå¯äžã®èŠçŽ ã¯ãindex.jsãã¡ã€ã«ãšnode_modulesãã©ã«ããŒãå«ãversion1.1.zipã¢ãŒã«ã€ãã§ãã
Lambdaé¢æ°ã«ç»ååŠçã«ååãªãªãœãŒã¹ãæäŸããã«ã¯ãã¡ã¢ãªå®¹éãæ倧256 MBã«ãæ倧ã©ã³ã¿ã€ã ïŒã¿ã€ã ã¢ãŠãïŒãæ倧10ç§ã«å¢ããããšãã§ããŸãã ãªãœãŒã¹ã®å¿ èŠæ§ã¯ãç»åã®ãµã€ãºãšå€æã®è€éãã«äŸåããŸãã
ã³ãŒãèªäœã¯éåžžã«ã·ã³ãã«ã§ãAWSçµ±åã瀺ãããã«èšèšãããŠããŸãã
æåã«ããã³ãã©ãŒé¢æ°ïŒexport.handlerïŒãå®çŸ©ãããŸãã å€éšããªã¬ãŒã«ãã£ãŠåŒã³åºãããŸãã ãã®å ŽåãããŠã³ããŒããããç»åãªããžã§ã¯ãã®S3ããŒãå«ãSNSã§å ¬éãããã¡ãã»ãŒãžã
ãŸããã€ãã³ãã¡ãã»ãŒãžã®JSONããã¹ããåæããŠãS3ãã±ããã®ååãããŠã³ããŒãããã€ã¡ãŒãžãªããžã§ã¯ãã®S3ããŒãããã³ãã¡ã€ã«åïŒããŒã®æåŸã®éšåïŒãæœåºããŸãã
ãã±ããã®ååãšãªããžã§ã¯ãã®ããŒãåãåã£ãåŸãããŠã³ããŒããããã€ã¡ãŒãžã¯s3.getObjectæäœã䜿çšããŠæœåºããããµã€ãºå€æŽã®ããã«é¢æ°ã«æž¡ãããŸãã SIZEå€æ°ã«ã¯ãååŸããç»åã®ãµã€ãºãå«ãŸããŸãã ãããã¯ãå€æãããã€ã¡ãŒãžãããŒããããS3ãã©ã«ããŒã®ååã«å¯Ÿå¿ããŸãã
var async = require('async'); var AWS = require('aws-sdk'); var gm = require('gm').subClass({ imageMagick: true }); var s3 = new AWS.S3(); var SIZES = ["800x600", "400x300"]; exports.handler = function(event, context) { var message, srcKey, dstKey, srcBucket, dstBucket, filename; message = JSON.parse(event.Records[0].Sns.Message).Records[0]; srcBucket = message.s3.bucket.name; dstBucket = srcBucket; srcKey = message.s3.object.key.replace(/\+/g, " "); filename = srcKey.split("/")[1]; dstKey = ""; ... ... // Download the image from S3 s3.getObject({ Bucket: srcBucket, Key: srcKey }, function(err, response){ if (err){ var err_message = 'Cannot download image: ' + srcKey; return console.error(err_message); } var contentType = response.ContentType; // Pass in our image to ImageMagick var original = gm(response.Body); // Obtain the size of the image original.size(function(err, size){ if(err){ return console.error(err); } // For each SIZES, call the resize function async.each(SIZES, function (width_height, callback) { var filename = srcKey.split("/")[1]; var thumbDstKey = width_height +"/" + filename; resize(size, width_height, imageType, original, srcKey, dstBucket, thumbDstKey, contentType, callback); }, function (err) { if (err) { var err_message = 'Cannot resize ' + srcKey; console.error(err_message); } context.done(); }); }); }); }
ãµã€ãºå€æŽæ©èœã¯ãgmã©ã€ãã©ãªã䜿çšããŠå ã®ç»åãå€æããŸããç¹ã«ãç»åã®ãµã€ãºãå€æŽããå¿ èŠã«å¿ããŠåãåããå質ã80ïŒ ã«äžããŸãã 次ã«ãs3.putObjectæäœã䜿çšããŠå€æŽããã€ã¡ãŒãžãS3ã«ã¢ããããŒãããACLïŒpublic-readãæå®ããŠæ°ããã€ã¡ãŒãžããããªãã¯ã«ããŸãã
var resize = function(size, width_height, imageType, original, srcKey, dstBucket, dstKey, contentType, done) { async.waterfall([ function transform(next) { var width_height_values = width_height.split("x"); var width = width_height_values[0]; var height = width_height_values[1]; // Transform the image buffer in memory original.interlace("Plane") .quality(80) .resize(width, height, '^') .gravity('Center') .crop(width, height) .toBuffer(imageType, function(err, buffer) { if (err) { next(err); } else { next(null, buffer); } }); }, function upload(data, next) { console.log("Uploading data to " + dstKey); s3.putObject({ Bucket: dstBucket, Key: dstKey, Body: data, ContentType: contentType, ACL: 'public-read' }, next); } ], function (err) { if (err) { console.error(err); } done(err); } ); };
ã¹ããã6ïŒãã¹ã
ãªãªãžãã«ã®ãã©ã«ãã«ç»åãããŒãããããšã«ããããã¹ãŠãæ£åžžã«æ©èœãããã©ããã確èªã§ããããã«ãªããŸããã ãã¹ãŠãæ£ããè¡ãããŠããã°ãããŠã³ããŒããããç»åã®å¯Ÿå¿ããå€æãããããŒãžã§ã³ã800x600ããã³400x300ã®ãã©ã«ããŒã«ååŸããŸãã
以äžã®ãããªã§ã¯ã3ã€ã®ãŠã£ã³ããŠãèŠãããšãã§ããŸããå·ŠåŽã®ãªãªãžãã«ãã©ã«ããŒãäžå€®ã®800x600ãã©ã«ããŒãå³åŽã®400x300ãã©ã«ããŒã§ãã ãã¡ã€ã«ãå ã®ãã©ã«ããŒã«ã¢ããããŒããããåŸãä»ã®2ã€ã®ãŠã£ã³ããŠãæŽæ°ãããã€ã¡ãŒãžãäœæããããã©ããã確èªãããŸãã
ãããŠåºæ¥äžãããããã«ãããŸã;ïŒ
ïŒãªãã·ã§ã³ïŒã¹ããã7ïŒCloudfrontã³ã³ãã³ãé ä¿¡ãããã¯ãŒã¯ãè¿œå ãã
ç»åãäœæãããS3ã«ã¢ããããŒããããã®ã§ããšã³ããŠãŒã¶ãŒã«é ä¿¡ããå¿ èŠããããŸãã Cloudfront Content Delivery Networkã䜿çšããŠãããŠã³ããŒãé床ãæ¹åã§ããŸãã ãããè¡ãã«ã¯ïŒ
- CloudFrontããŒãžãéããŸã ã
- [é åžã®äœæ]ãã¯ãªãã¯ããŸãã
- é ä¿¡æ¹æ³ã®å ¥åãæ±ãããããã[Webé åž]ãéžæããŸãã
- [Origin Domain Name]ãã£ãŒã«ãã§ãå¿ èŠãªS3ãã±ãããéžæãã[Create Distribution]ãã¯ãªãã¯ããŸãã
ãããã¯ãŒã¯äœæããã»ã¹ã«ã¯æéãããããããCDNã¹ããŒã¿ã¹ãIn ProgressããDeployedã«å€ãããŸã§åŸ ã¡ãŸãã
ãããã¯ãŒã¯ãå±éãããåŸãS3ãã±ãããžã®ãªã³ã¯ã®ä»£ããã«ãã¡ã€ã³åã䜿çšã§ããŸãã ããšãã°ã Cloudfrontãã¡ã€ã³åã1234-cloudfront-id.cloudfront.netã®å Žåã 1234-cloudfront-id.cloudfront.net / 400x300 / FILENAMEããã³1234-cloudfront-id.cloudfrontã«ããåŠçæžã¿ç»åãã©ã«ããŒã«ã¢ã¯ã»ã¹ã§ããŸãã .net / 800x600 /ãã¡ã€ã«å
Cloudfrontã«ã¯ä»ã«ãå€ãã®éèŠãªãã©ã¡ãŒã¿ãŒããããŸããããã®èšäºã§ã¯ãããã«ã€ããŠã¯èª¬æããŸããã ã³ã³ãã³ãé ä¿¡ãããã¯ãŒã¯ã®ã»ããã¢ããã®è©³çŽ°ãªæé ã«ã€ããŠã¯ã Amazonã¬ã€ããåç §ããŠãã ããã