Amazon Web Services ããã°
ã³ã¹ãã¢ãã±ãŒã·ã§ã³ã¿ã°ãAmazon DynamoDBã«å¯Ÿå¿ããŸãã
Amazon DynamoDBã®ããŒãã«ã«ã¿ã°ãèšå®å¯èœã«ãªããŸãããã¿ã°ã¯å€ãã®AWSãµãŒãã¹ã§ãµããŒãããŠãããã·ã³ãã«ã§ãŠãŒã¶ãã«ã¹ã¿ãã€ãºå¯èœãªããŒã»ããªã¥ãŒã®ãã¢ã§ããDynamoDBã®ã¿ã°å¯Ÿå¿ã¯ DynamoDBã®å©çšæéã®å¯èŠåã«æå¹ã§ããããŒãã«æ¯ã«ã¿ã°ãèšå®ã§ããã¿ã°æ¯ã«æéãåç §åºæ¥ãŸãã
æ§ã ãªç°å¢(development/staging/production)ã§è€æ°ã®DynamoDBããŒãã«ãæã£ãŠããã·ããªãªãäŸã«äžããŠã説æããŸããDynamoDBããŒãã«ã«ã¿ã°ãèšå®åºæ¥ãŸããäŸãšããŠãkeyã«Environmentãvalueã«Development, Staging, Productionãšããããèšå®ããŸãã
DynamoDBã³ã³ãœãŒã«ã§ã©ã®ããã«èšå®ãããèŠãŠãããŸããããèšå®ãè¡ãåã«ListTagsOfResourceãšTagResourceã®APIæäœãè¡ãé©åãªæš©éãæã£ãŠããã確èªãããŠäžããã
- AWS Management Consoleã«ãµã€ã³ã€ã³ãããhttps://console.aws.amazon.com/dynamodb/ããDynamoDBã³ã³ãœãŒã«ãéããŸã
- Tablesãéžæããèšå®ãè¡ãªãããããŒãã«ãéžæããŸã
- Settingsã¿ãã§ãTagsãããã²ãŒã·ã§ã³ã¡ãã¥ãŒããéžæããŸã
- Add Tagsã»ã¯ã·ã§ã³ã§ãKeyã«EnvironmentãValueã«Developmentãå ¥åããApply Changesãã¯ãªãã¯ããŸã

æšæºã®åäœã§ã¯ãæ°ãã远å ãããããŒã¯billingã§ã¯ç¡å¹åãããŠããŸãã以äžã®æé ã§Billing Consoleããã¢ã¯ãã£ããŒããè¡ããŸã:
- AWS Management Consoleã«ãµã€ã³ã€ã³ãããhttps://console.aws.amazon.com/billing/ããBilling consoleãéããŸã
- ããã²ãŒã·ã§ã³ã¡ãã¥ãŒããCost Allocation TagsãéžæããŸã
- User-Defined Cost Allocation Tagsã»ã¯ã·ã§ã³ãããã¿ã°ããŒå ã® Environmentã¿ã°æšªã®ãã§ãã¯ããã¯ã¹ãéžæããActivateãã¯ãªãã¯ããŸã

ã¢ã¯ãã£ããŒãæžã¿ã®ã³ã¹ãã¢ãã±ãŒã·ã§ã³ã¿ã°ãããå ŽåãAWS Cost Explorerããã¿ã°ä»ããããAWSãªãœãŒã¹ã®ã³ã¹ããç°¡åã«ãã¬ãŒã¯ããŠã³ããŠé²èŠ§åºæ¥ãŸã:
- AWS Management Consoleã«ãµã€ã³ã€ã³ãããhttps://console.aws.amazon.com/billing/ããBilling consoleãéããŸã
- ããã²ãŒã·ã§ã³ã¡ãã¥ãŒããCost ExplorerãéžæããLaunch Cost ExplorerãéžæããŸã
- å·Šäžã®ã¡ãã¥ãŒããMonthly costs by serviceãéžæããå³ã®ã¡ãã¥ãŒå ã® Time rangeããé²èЧãããã¿ã€ã ã¬ã³ãžãæå®ããŸã
- Filteringã»ã¯ã·ã§ã³å ã®Filter byããTagãéžæããŸã
- ã¿ã°ããŒã®ãªãŒãã³ã³ããªãŒããã£ãŒã«ããã EnvironmentãéžæãDevelopmentãã¿ã°ããªã¥ãŒã®ãªãŒãã³ã³ããªãŒãã»ã¯ã·ã§ã³ããéžæããApplyãã¯ãªãã¯ããŸã

æå®ããã¿ã°(Environment=Development)ã§ã³ã¹ãããã£ã«ã¿ãªã³ã°ãããŸããã³ã¹ãã¯ã¿ã°ãAWSãªãœãŒã¹ã«æå®ããæç¹ãã衚瀺ãããŸã

DynamoDB Management Console, AWS CLIãAWS SDKããDynamoDBããŒãã«ã«50åãŸã§ã¿ã°ãèšå®åºæ¥ãŸããDynamoDBããŒãã«ã«èšå®ãããŠãããGlobal secondary indexes (GSIs) ãš local secondary indexes (LSIs)ã«ãDynamoDBããŒãã«ã§èšå®ããã¿ã°ãèªåçã«èšå®ãããŸããDynamoDBã®ã¿ã°ãµããŒãã¯å šãŠã®AWSãªãŒãžã§ã³ã§å©çšå¯èœã§ãã
æŽã«è©³çްãªãAWSãªãœãŒã¹ã§ã®ã¿ã°ã®æŽ»çšã¯ãã¡ããã芧äžããã
â Nitin Sagar(product manager for DynamoDB) (ç¿»èš³ã¯æéãæ åœããŸãããåæã¯ãã¡ã)
RDS MySQL DBã€ã³ã¹ã¿ã³ã¹ããAmazon Aurora Read Replicaãäœæå¯èœã«ãªããŸãã
24æé365æ¥çšŒåããŠããã¢ããªã±ãŒã·ã§ã³ãå©çšããŠããããŒã¿ããŒã¹ãšã³ãžã³ãä»ã®ããŒã¿ããŒã¹ãšã³ãžã³ã«ç§»è¡ããã«ã¯ããã€ãã®æ¹æ³ã䜿ãå¿ èŠããããšæããŸããããŒã¿ããŒã¹ããªãã©ã€ã³ã«ããã«ç§»è¡ããè¯ãæ¹æ³ãšããŠãã¬ããªã±ãŒã·ã§ã³ãå©çšããæ¹æ³ããããŸãã
æ¬æ¥ãAmazon RDS DB for MySQLã€ã³ã¹ã¿ã³ã¹ã Amazon Auroraã«Aurora Read ReplicaãäœæããŠç§»è¡ããæ©èœããªãªãŒã¹ããŸããããã€ã°ã¬ãŒã·ã§ã³ã¯ããŸãæ¢åã®DBã¹ãããã·ã§ãããäœæããããããAurora Read ReplicaãäœæããŸããã¬ããªã«ã®ã»ããã¢ãããå®äºåŸããœãŒã¹ããŒã¿ããŒã¹ãšã®ã¬ããªã±ãŒã·ã§ã³ã®èšå®ãè¡ãææ°ã®ããŒã¿ããã£ããã¢ããããŸããã¬ããªã±ãŒã·ã§ã³ã©ã°ã0ã«ãªãã°ã¬ããªã±ãŒã·ã§ã³ãå®äºããç¶æ ã§ãããã®ç¶æ ã«ãªã£ãåŸã«ã Aurora Read Replicaãç¬ç«ããAurora DB clusterãšããŠå©çšå¯èœã§ãã¢ããªã±ãŒã·ã§ã³ã®èšå®ã倿ŽãAurora DB clusterã«æ¥ç¶ããŸãã
ãã€ã°ã¬ãŒã·ã§ã³ã¯ãã©ãã€ããããæ°æéããããŸãããŸãã6TBãŸã§ã®MySQL DBã€ã³ã¹ã¿ã³ã¹ã«å¯Ÿå¿ããŠããŸããInnoDBããŒãã«ã®ã¬ããªã±ãŒã·ã§ã³ã¯MyISAMããŒãã«ã®ã¬ããªã±ãŒã·ã§ã³ãããããé«éã§ãå§çž®ãããŠããªãããŒãã«ã®å©ç¹ãåããããŸãã
RDS DBã€ã³ã¹ã¿ã³ã¹ããã€ã°ã¬ãŒã·ã§ã³ããããã«ã¯ã AWS Management ConsoleããRDSã®ã³ã³ãœãŒã«ãéžæããInstance ActionsãéžæããŸãããã®åŸãCreate Aurora Read Replicaãéžæããã ãã§ã:

ãããŠãããŒã¿ããŒã¹ã€ã³ã¹ã¿ã³ã¹ã®æ å ±ããªãã·ã§ã³ãå ¥åããCreate Read Replicaãã¯ãªãã¯ããŸã:

ã³ã³ãœãŒã«äžã§ãã€ã°ã¬ãŒã·ã§ã³ã®é²æç¶æ³ãé²èŠ§åºæ¥ãŸã:

ãã€ã°ã¬ãŒã·ã§ã³å®äºåŸãAurora Read Replicaã§ã¬ããªã«ã©ã°ã0ã«ãªãã®ãåŸ ã¡ãŸã(SHOW SLAVE STATUSã³ãã³ããã¬ããªã«ã§å®è¡ããâSeconds behind masterâãç£èŠããŸã)ããã®åŸããœãŒã¹ã®MySQL DBã€ã³ã¹ã¿ã³ã¹ãžã®æ°ãããã©ã³ã¶ã¯ã·ã§ã³ã忢ããAurora Read ReplicaãDBã¯ã©ã¹ã¿ã«ææ ŒãããŸã:

æ°ããã¯ã©ã¹ã¿ãå©çšå¯èœã«ãªããŸã§åŸ
æ©ããŸã(éåžžã¯1åçšåºŠ):

æåŸã«ãã¢ããªã±ãŒã·ã§ã³ã®èšå®ãã¯ã©ã¹ã¿ã®read/writeãšã³ããã€ã³ããå©çšããããã«èšå®ãå®äºã§ãïŒ
â Jeff; (ç¿»èš³ã¯æéãæ åœããŸãããåæã¯ãã¡ã)
ããã«äœ¿çšã§ãããœãªã¥ãŒã·ã§ã³: AWS Marketplace ã®ãªãŒãã³ãœãŒã¹ãœãããŠã§ã¢
AWS Marketplace ã§ã¯ããã°ãããããšãããããèµ·ããŠããŸãããã¡ãã§ãããŒã±ãããã¬ã€ã¹ã®ãªãŒãã³ãœãŒã¹ãœãããŠã§ã¢ã«ã€ããŠã®è©³çްããMatthew Freeman ããã³ Luis Daniel Soto ã説æããŸãã
â Ana
æ¥çã®èª¿æ»ã«ãããšãäŒæ¥ã䜿çšãããªãŒãã³ãœãŒã¹ãœãããŠã§ã¢ (OSS) ã¯å¢å ããŠããŸãããŸããŸãå€ãã®äŒæ¥ã®éçºè ã¯ãçŸåšé²è¡äžã®éçºäœæ¥ã®äžç°ãšããŠãå©çšå¯èœãª OSS ã©ã€ãã©ãªã䜿çšããããã«æ±ããŠããŸãããããã®éçºè ã¯ãèªåã®ãããžã§ã¯ã (å€éããã³é±æ«ãªã©) ã§ OSS ã䜿çšããŠããããšãããããã®å Žåèªç¶ã«å¥ã®å Žæã§ããã®ããŒã«ããã³ãã¯ããã¯ã䜿çšããããšèããŸãããã®ããããã¹ãŠã®éšéã®éçºçµç¹ã¯ã販売ãããœãããŠã§ã¢ã ãã§ãªããèªç€Ÿã® IT ã€ã³ãã©ã¹ãã©ã¯ãã£å ã®ã¢ããªã±ãŒã·ã§ã³ã«ãªãŒãã³ãœãŒã¹ãœãããŠã§ã¢ã䜿çšããã±ãŒã¹ãæ€èšããŠããŸãããã®æŠèŠã§ã¯ãAWS ãéãããªãŒãã³ãœãŒã¹ãœãããŠã§ã¢ã®å ¥æãéçºããã³è²¡åã®èгç¹ããçã«ããªã£ãŠããçç±ã«ã€ããŠèª¬æããŸãã
ãªãŒãã³ãœãŒã¹éçºããã»ã¹
ãªãŒãã³ãœãŒã¹ãœãããŠã§ã¢ã¯ãäžè¬çã«åå è
ã®ç¬ç«ããã³ãã¥ããã£ã§éçºãããããããœãããŠã§ã¢ã®ããŒãžã§ã³ã®ååŸããã³ç®¡çã¯ãéåžžãªã³ã©ã€ã³ã³ãŒããªããžããªãéããŠè¡ãããŸããç°ãªããœãŒã¹ããã®ã³ãŒãã䜿çšãããšãã³ãŒãã©ã€ãã©ãªããã³éçºããŒã«ãååŸããŠå
±ã«æ©èœãããããšãå°é£ãšãªãå ŽåããããŸããããããAWS Marketplace ã¯ããã®ããã»ã¹ãã¹ãããããŠãå¿
èŠãª OSS ã§ EC2 ã€ã³ã¹ã¿ã³ã¹ãçŽæ¥èµ·åã§ããŸããAWS Marketplace ã«ã¯ãOSS ãœãªã¥ãŒã·ã§ã³ã®åºç€ãšããŠäœ¿çšã§ãã Linux ã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ããããŸãã
æ§ææžã¿ã®ã¹ã¿ãã¯ãäžããã¡ãªãã
åžè²©ã®ãœãããŠã§ã¢ã§ãã® 1-Click èµ·åæ©èœã¯åœç¶ã®ããšãšèãããããããŸããããOSS ã«ãšã£ãŠæ§ææžã¿ã® AMI ãå®è£
ããŠããããšã«ã¯å€§ããªã¡ãªããããããŸããAWS Marketplace ã¯ãæãäžè¬çãªãªãŒãã³ãœãŒã¹ãœãããŠã§ã¢ã®çµã¿åããããŸãã¯ãã¹ã¿ãã¯ããäœæãããœãããŠã§ã¢äŒç€Ÿã«ããããã®ã¹ã¿ãã¯ã AWS ã¯ã©ãŠãã«èµ·åã§ããå ŽæãæäŸããŸããTurnKey ããã³ Bitnami ã®ãããªäŒæ¥ã¯ãOSS ã®ãšãã¹ããŒãã䜿ã£ãŠããœãããŠã§ã¢ãå
±ã«ããŸãæ©èœããããã«ãããã®ã³ãŒãã¹ã¿ãã¯ãèšå®ããã³æé©åããŸãããããã®äŒæ¥ã¯ãOSS ã®ãªãªãŒã¹ãææ°ã®ç¶æ
ã«ä¿ã¡ãæ°ããããŒãžã§ã³ãå©çšå¯èœã«ãªããšããã«ã¹ã¿ãã¯ãæŽæ°ããŸãããããã®äŒæ¥ã®äžã«ã¯ãã¯ã©ãŠãããŒã¹ã®ãµãŒããŒã®èµ·åããã³ç®¡çãããã«å®¹æã«ããããã«ãã¯ã©ãŠããã¹ãã£ã³ã°ã€ã³ãã©ã¹ãã©ã¯ãã£ãææãµãŒãã¹ãšããŠæäŸããŠãããã®ããããŸããããšãã°ããªãŒãã³ãœãŒã¹ãœãããŠã§ã¢ã®æãäžè¬çãªçµã¿åããã® 1 ã€ã¯ãLAMP ã¹ã¿ãã¯ã§ãLinux ãã£ã¹ããªãã¥ãŒã·ã§ã³ãApache ãŠã§ããµãŒããŒãMySQL ããŒã¿ããŒã¹ãããã³ PHP ããã°ã©ãã³ã°ã©ã€ãã©ãªã§æ§æãããŠããŸããåžæãã Linux ãã£ã¹ããªãã¥ãŒã·ã§ã³ã«åºã¥ããŠäžè¬ç㪠LAMP ã¹ã¿ãã¯ãéžæããã奜ã¿ã®éçºããŒã«ãšã©ã€ãã©ãªãã€ã³ã¹ããŒã«ããããšãã§ããŸãã

ãã®åŸãå¿
èŠã«å¿ããŠããŸãã¯æåŸ
ã©ããã«ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããããã«åºç€ãšãªããœãããŠã§ã¢ã«èª¿æŽãå ããŸããããšãã°ãã¢ããªã±ãŒã·ã§ã³ã®ã¡ã¢ãªå²ãåœãŠã倿ŽããããPHP èšå®ã§æå€§ãã¡ã€ã«ã¢ããããŒãã®ãµã€ãºã倿Žã§ããŸããLAMP èŠçŽ ã«å ããWordPressãMoodleããŸã㯠Joomla!® ãªã©ã®åäžã®ã¢ããªã±ãŒã·ã§ã³ãå«ã OSS ã®ã¢ããªã±ãŒã·ã§ã³ã¹ã¿ãã¯ãéžæã§ããŸãããããã®ã¹ã¿ãã¯ã¯ãã¢ããªã±ãŒã·ã§ã³èŠä»¶ã«åºã¥ãååãªã¡ã¢ãªããã³ãã£ã¹ã¯ã®å²ãåœãŠã§åæ»ã«åäœããããã«ãåã
ã®ã¢ããªã±ãŒã·ã§ã³ã®æé©ãªèšå®ã䜿çšããŠãã³ããŒã«ãã£ãŠèšå®ãããŸãããã®ç¹ã§ãã¹ã¿ãã¯ãã³ããŒã¯ãåºæ¬çãªãœãããŠã§ã¢ããããžã§ãã³ã°ã«ä»å 䟡å€ãæäŸã§ããã®ã§åªããŠãããšèšããŸãã
å
±éã®ã³ã³ããŒãã³ãã䜿çšããåäžãµãŒããŒäžã®è€æ°ã®ã¢ããªã±ãŒã·ã§ã³ãçµåããå¿
èŠãããå Žåã代ããã«æ±çšã® LAMP ã¹ã¿ãã¯ãéžæããããšãã§ããŸããããšãã°ãWordPress ã«ã¯ãçŽæ¥ Moodle ãšçžäºéçšããããã®ãã©ã°ã€ã³ããããŸããäž¡æ¹ã®ã¢ããªã±ãŒã·ã§ã³ã¯ãApache ãŠã§ããµãŒããŒãPHPãããã³ MySQL ã䜿çšããŸããLAMP ã¹ã¿ãã¯ãåºã«ããŠãWordPress ãš Moodle ãå
±ã«ããŸãæ©èœããããã«å¿
èŠã«å¿ããŠã³ã³ããŒãã³ããåå¥ã«èšå®ããããšã§ãæéãç¯çŽã§ããŸãã
ãããã¯ãAWS Marketplace ããæ§ææžã¿ã®ãœãªã¥ãŒã·ã§ã³ãã©ã®ããã«äœ¿çšããŠèªèº«ã®ããŒãºã«åãããããšããã2 ã€ã®å®éã®äŸã§ãã
AWS Marketplace ã® OSS
AWS Marketplace ã¯ãOSS ã®ããŒã«ãã¢ããªã±ãŒã·ã§ã³ãããã³ãµãŒããŒãå
¥æããŠãããã€ããããã®æå€§ã®ãµã€ãã® 1 ã€ã§ããOSS ãå©çšå¯èœãªä»ã®ã«ããŽãªã¯ä»¥äžã®éãã§ãã
- ã¢ããªã±ãŒã·ã§ã³ã®éçºããã³ãã¹ãããŒã«ãZendãColdFusionãRuby on RailsãNode.js ãªã©ã®ã¢ããªã±ãŒã·ã§ã³ãã¬ãŒã ã¯ãŒã¯ã§èšå®ããã EC2 ãµãŒããŒçšã® AWS Marketplace ãœãªã¥ãŒã·ã§ã³ããã³ CloudFormation ãã³ãã¬ãŒãã§èŠã€ããããšãã§ããŸãããŸãããã¹ãèªååã®ããã® Jenkinsãåé¡è¿œè·¡ã®ããã® BugzillaããœãŒã¹ã³ãŒã管çã®ããã® Subversionãèšå®ç®¡çããŒã«ãªã©ã®äž»èŠãªè£œåã䜿çšããŠã¢ãžã£ã€ã«ãœãããŠã§ã¢éçºããµããŒããããéçºããã³ãã¹ãããŒã«ã®ããã®äººæ°ã®ãã OSS ãéžæããããšãã§ããŸãã詳现 »
- ã€ã³ãã©ã¹ãã©ã¯ãã£ãœãããŠã§ã¢ãããžãã¹ã®æåã«ã¯ããããã¯ãŒã¯ã®æ£åžžãªã¡ã³ããã³ã¹ããã³ä¿è·ãéèŠã§ããOpenLDAP ããã³ OpenVPN ãªã©ã® OSS ã©ã€ãã©ãªã¯ãã¯ã©ãŠãã€ã³ãã©ã¹ãã©ã¯ãã£ãèµ·åããŠããªã³ãã¬ãã¹ãããã¯ãŒã¯ã«ä»éããããããŸãã¯å®å šã«çœ®ãæããããšãå¯èœã«ããŸãããããã¯ãŒãã³ã°ããã³ã»ãã¥ãªãã£ã®åŠçã«ç¹åãããµãŒãã¹ããã»ãã¥ãªãã£ã匷åãããåã ã®ãµãŒããŒãŸã§ãAWS Marketplace ã«ã¯ãæ§ã ãªã¯ãŒã¯ããŒãã®ã»ãã¥ãªãã£èŠä»¶ãæºããã®ã«åœ¹ç«ã€å€æ°ã®ã»ãã¥ãªãã£ãœãªã¥ãŒã·ã§ã³ããããŸãã詳现 »
- ããŒã¿ããŒã¹ããã³ããžãã¹ã€ã³ããªãžã§ã³ã¹ãOSS ããŒã¿ããŒã¹ãããŒã¿ç®¡çãããã³ãªãŒãã³ããŒã¿ã«ã¿ãã°ãœãªã¥ãŒã·ã§ã³ãå«ããããžãã¹ã€ã³ããªãžã§ã³ã¹ããã³é«åºŠãªåæãœãããŠã§ã¢ã¯ããã©ã³ã¶ã¯ã·ã§ã³ã·ã¹ãã ãã»ã³ãµãŒãæºåž¯é»è©±ãããã³ã€ã³ã¿ãŒãããã«æ¥ç¶ãããããããããã€ã¹ããã®ããŒã¿ãçè§£ããã®ã«åœ¹ç«ã¡ãŸãã詳现 »
- ããžãã¹ãœãããŠã§ã¢ãå¯çšæ§ãä¿ææ§ãæè»æ§ã¯ãã¯ã©ãŠãäžã§ããžãã¹ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããã®ã«éèŠã§ããããããèŠæš¡ã®äŒæ¥ã¯ãã€ã³ãã©ã¹ãã©ã¯ãã£ç®¡çã®ç°¡çŽ åãããè¿ éãªãããã€ãã³ã¹ãã®åæžãåçã®å¢å ãæãã§ããŸããLinux ã§åäœããããžãã¹ãœãããŠãšã¢ã¯ããããã®äž»èŠã¡ããªãã¯ã¹ãæäŸããŸãã詳现 »
- ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãAWS Marketplace ã«ã¯ãFreeBSDãæå°éããã³ã»ãã¥ãªãã£ã匷åããã Linux ã€ã³ã¹ããŒã«ããã»ãã¥ãªãã£ããã³ç§åŠçäœæ¥ã®ããã®ç¹å¥ãªãã£ã¹ããªãã¥ãŒã·ã§ã³ãŸã§ãæ§ã ãªãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ããããŸãã詳现 »
AWS Marketplace ã§ OSS ã®äœ¿çšãéå§ããæ¹æ³
ãŸããå¿
èŠãªãœãããŠã§ã¢ã®çµã¿åãããç¹å®ããAWS Marketplace ã®ããŒã ç»é¢ã®äžéšã«ããæ€çŽ¢ããã¯ã¹ã«ããŒã¯ãŒããå
¥åããŠãé©åãªãµãŒãã¹ãèŠã€ããŸãã

ãŸãã¯ãã«ããŽãªå¥ã«ãã©ãŠãºããå Žåã¯ã[Shop All Categories] ãã¯ãªãã¯ããŠãªã¹ãããéžæããŸãã

æåã«æ€çŽ¢ãŸãã¯éžæãè¡ããšãæé©ãªåè£ãæ®ããŸã§çµæããã£ã«ã¿ãªã³ã°ãã 10 ãè¶ ããæ¹æ³ããããŸããããšãã°ãåžæã® Linux ãã£ã¹ããªãã¥ãŒã·ã§ã³ãéžæããããã«ããã¹ãŠã® Linux ãã£ã«ã¿ãå±éããŠããã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ã§å®è¡ããããœãªã¥ãŒã·ã§ã³ãèŠã€ããããšãã§ããŸããç¡æè©ŠçšçããœãããŠã§ã¢ã®æéãã©ã³ãEC2 ã®ã€ã³ã¹ã¿ã³ã¹ã¿ã€ããAWS ãªãŒãžã§ã³ãè©äŸ¡ã®å¹³åãªã©ããã£ã«ã¿ãªã³ã°ããããšãã§ããŸãã

ãªã¹ãã®ã¿ã€ãã«ãã¯ãªãã¯ãããšãæé衚ããªãŒãžã§ã³ã補åãµããŒãã販売è ã® Web ãµã€ããžã®ãªã³ã¯ãå«ããã®ãµãŒãã¹ã®è©³çްã衚瀺ãããŸããéžæããã€ã³ã¹ã¿ã³ã¹ãèµ·åããæºåããããã[Continue] ãã¯ãªãã¯ããŠãã¢ã«ãŠã³ãã«ãã°ã€ã³ããŸãã

ãã°ã€ã³ãããšãAWS Marketplace ã¯ãæ¢åã®ã»ãã¥ãªãã£ã°ã«ãŒããããŒãã¢ãããã³ VPC èšå®ã®ååšãæ€åºã§ããŸãã[Launch on EC2] ããŒãžã§èª¿æŽãã[Accept Software Terms & Launch with 1-Click] ãã¯ãªãã¯ãããšãã€ã³ã¹ã¿ã³ã¹ãããã«èµ·åããŸãã

å¿ èŠã«å¿ããŠãéžæãã AWS ã³ã³ãœãŒã«ã䜿çšã㊠Manual Launch ãå®è¡ããããAPI ãŸã㯠ã³ãã³ãã©ã€ã³ã€ã³ã¿ãŒãã§ã€ã¹ (CLI) 䜿çšããŠã€ã³ã¹ã¿ã³ã¹ãéå§ã§ããŸããã©ã¡ãã®å Žåã§ããæ°åã§ EC2 ã€ã³ã¹ã¿ã³ã¹ãèµ·åããŠå®è¡ãããŸãã
åŸéæéå¶ã®æè»æ§
Amazon EC2 ã®äœ¿çšæã« 1 æé (ãŸãã¯æãŸãã¯å¹Ž) ãããã§ç®åºããé¡ãå ç®ããæéãããã³è©²åœããå ŽåãåçšãªãŒãã³ãœãŒã¹ãœãããŠã§ã¢äœ¿çšæã AWS ã¢ã«ãŠã³ããéããŠçŽæ¥æ¯æããŸãããã®ãããAWS Marketplace ã®äœ¿çšã¯ãOSS ãœãããŠã§ã¢ãèµ·åããŠå®è¡ããæãéãç°¡åãªæ¹æ³ã® 1 ã€ãšèšããŸãã
AWS Marketplace ã®ãªãŒãã³ãœãŒã¹ãœãããŠã§ã¢ã®è©³çްã«ã€ããŠã¯ããhttp://aws.amazon.com/mp/ossããåç §ããŠãã ããã
ïŒ Matthew Freemanãéçºéšé䞻任ãAWS Marketplace Luis Daniel Sotoãã·ã㢠GTM éšé䞻任ãAWS Marketplace
AWS Lambda â 2016 å¹Žãæ¯ãè¿ã£ãŠ
2016 幎㯠AWS LambdaãAmazon API GatewayããããŠããµãŒããŒã¬ã¹ã³ã³ãã¥ãŒãã£ã³ã°ãã¯ãããžãŒã«ãšã£ãŠãæ§ããã«èšã£ãŠããã°ããã幎ãšãªããŸãããããããããšãAWS Lambda ããã³ Amazon API Gateway ã§ã®ãµãŒããŒã¬ã¹ã³ã³ãã¥ãŒãã£ã³ã°ã«ã€ããŠè³ã«ããããšããªãæ¹ãããã£ããããããããŸããã®ã§ããããã®ãã°ããããµãŒãã¹ã«ã€ããŠã玹ä»ããããšæããŸããAWS Lambda ã䜿çšãããšããµãŒããŒãããããžã§ãã³ã°ãŸãã¯ç®¡çããªããŠãã³ãŒããå®è¡ã§ããŸãããã®ã€ãã³ãé§ååã®ãµãŒããŒã¬ã¹ã³ã³ãã¥ãŒãã£ã³ã°ãµãŒãã¹ã«ãããéçºè ã¯ãã»ãŒãã¹ãŠã®çš®é¡ã®ã¢ããªã±ãŒã·ã§ã³ãŸãã¯ããã¯ãšã³ãã§æ©èœãç°¡åã«ã¯ã©ãŠããžç§»è¡ã§ããŸããAmazon API Gateway ã¯éåžžã«ã¹ã±ãŒã©ãã«ã§ãä¿¡é Œæ§ãé«ããå ç¢ãª API ãå€§èŠæš¡ã«ãã°ããæ§ç¯ããã®ã«åœ¹ç«ã¡ãäœæãã API ã®ç¶æããã³ã¢ãã¿ãªã³ã°ã®æ©èœãæäŸããŸãã2016 幎ã®ãµãŒããŒã¬ã¹ã®å¢ãã®ç· ãããããšããŠãAWS ããŒã 㯠re:Invent ã§ãµãŒããŒã¬ã¹ãœãªã¥ãŒã·ã§ã³ã®æ§ç¯ãããã«ç°¡åã«ãã匷åãªãµãŒãã¹æ©èœãçºè¡šããŸããããã®æ©èœã«ã¯æ¬¡ã®ãã®ããããŸãã
- AWS Greengrass: Lambda ããã³ AWS IoT ã䜿çšããŠãæ¥ç¶ããã IoT ããã€ã¹ã®ããŒã«ã«ã§ã®ã³ã³ãã¥ãŒãã£ã³ã°ãã¡ãã»ãŒãžã³ã°ãããŒã¿ã®ãã£ãã·ã³ã°ãå®è¡ããŸããhttps://aws.amazon.com/blogs/aws/aws-greengrass-ubiquitous-real-world-computing/
- Lambda@Edge Preview: ã°ããŒãã« AWS ãšããžãã±ãŒã·ã§ã³ã§ã³ãŒããå®è¡ã§ããAmazon CloudFront ã®ãªã¯ãšã¹ãã«å¿ããŠããªã¬ãŒãããããšã§ããšã³ããŠãŒã¶ãŒã®ãããã¯ãŒã¯ã¬ã€ãã³ã·ãŒãåæžã§ãã Lambda ã®æ°ããæ©èœã§ããhttps://aws.amazon.com/blogs/aws/coming-soon-lambda-at-the-edge/
- AWS Batch Preview: ä»åŸäºå®ãããŠããããããžã§ããšããŠã® Lambda çµ±åãå«ã AWS ã³ã³ãã¥ãŒãã£ã³ã°ãµãŒãã¹ã«ãããã¯ãŒã¯ããŒãã®èšç»ãã¹ã±ãžã¥ãŒãªã³ã°ãå®è¡ã®ã³ã³ãã¥ãŒãã£ã³ã°çšãããã§ããhttps://aws.amazon.com/blogs/aws/aws-batch-run-batch-computing-jobs-on-aws/
- AWS X-Ray: ãã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ã䜿çšããŠãã«ãããããã®ãJavaãNode.jsã.NET ã§èšè¿°ããããã®ãEC2ãECSãAWS Elastic Beanstalk ã«ãããã€ããããã®ãªã©ã忣ã¢ããªã±ãŒã·ã§ã³ã®åæãšãããã°ãå®è¡ããŸããä»åŸäºå®ãããŠãã AWS Lambda ããµããŒãããŸããhttps://aws.amazon.com/blogs/aws/aws-x-ray-see-inside-of-your-distributed-application/
- Continuous Deployment for Serverless: ãµãŒããŒã¬ã¹ã¢ããªã±ãŒã·ã§ã³ã®ããã®ç¶ç¶çãããã€ãã€ãã©ã€ã³ãäœæãã AWS ã®ãµãŒãã¹ã§ããhttps://aws.amazon.com/blogs/compute/continuous-deployment-for-serverless-applications/
- Step Functions: èŠèŠçãªã¯ãŒã¯ãããŒã䜿çšããŠã忣ã¢ããªã±ãŒã·ã§ã³ãšãã€ã¯ããµãŒãã¹ã®ã³ã³ããŒãã³ãã調æŽããä¿¡é Œæ§ã®é«ãæ¹æ³ã§ããhttps://aws.amazon.com/blogs/aws/new-aws-step-functions-build-distributed-applications-using-visual-workflows/
- Dead Letter Queues: ãã¥ãŒãŸãã¯ä»ã®éç¥ã·ã¹ãã ãžã® Lambda 颿°ã®å€±æã®éç¥ããµããŒãããŸãã
- C# Support: C# ã³ãŒã 㯠AWS Lambda ã§ãµããŒããããèšèªã§ãã
- API Gateway Monetization: API Gateway ãš AWS Marketplace ã®çµ±å
- API Gateway Developer Portal: ç¬èªã®éçºè ããŒã¿ã«ã®äœæãå§ããããšãã§ãããªãŒãã³ãœãŒã¹ã®ãµãŒããŒã¬ã¹ãŠã§ãã¢ããªã±ãŒã·ã§ã³ã§ãã
Jeff ã Step Functions ãªã©ã®åæ£ã¢ããªã±ãŒã·ã§ã³ããã€ã¯ããµãŒãã¹ãæ§ç¯ããããã®åè¿°ã®æ°ãããµãŒãã¹æ©èœã«ã€ããŠã»ãšãã©ç޹ä»ããã®ã§ãäžè¬çãªãµãŒããŒã¬ã¹ãŠãŒã¹ã±ãŒã¹ã®äŸã§ãããªã¢ã«ã¿ã€ã ã®ã¹ããªãŒã åŠçã䜿ã£ãŠããŸã 説æãããŠããªãæåŸã® 4 ã€ã®æ°ããæ©èœã«ã€ããŠç޹ä»ããŸããããã¹ããªãŒã åŠçã®ãŠãŒã¹ã±ãŒã¹ã«ã€ããŠã®ãã®èª¬æã§ã¯ãããŒã¿ã®ã¹ããªãŒã ãåŠçãã Lambda 颿°ããéãããããšã®ãããšã©ãŒéç¥ã®ããã«ããããã¬ã¿ãŒãã¥ãŒãå®è£ ããŸããã¹ããªãŒã ã®åŠçã«ã¯ Node.js ã§èšè¿°ãããæ¢åã® Lambda 颿°ãçšããC# èšèªã䜿ã£ãŠæžãæããŸãããã®åŸãAPI Gateway ãš AWS Marketplace ã®çµ±åãå©çšã㊠Lambda ãæ¯æŽãã API ã®åçåã®äŸãæ§ç¯ããŸããããã¯æ¥œãã¿ã§ããããã§ã¯ãå§ããŸãããããµã³ãã©ã³ã·ã¹ã³ãšãªãŒã¹ãã£ã³ã§ã® AWS éçºè ããŒã®æéäžãç§ã¯ãªã¢ã«ã¿ã€ã ã®ã¹ããªãŒã åŠçã§ AWS Lambda ãæŽ»çšããäŸããTwitter ã¹ããªãŒãã³ã° API ã䜿ã£ãã¹ããªãŒãã³ã°ãœãªã¥ãŒã·ã§ã³ãèŠãããã¢ãäœæããŠç޹ä»ããŸããããã®äŸã®æ¹æ³ã«æ²¿ã£ãŠããããã¬ã¿ãŒãã¥ãŒ (DLQ)ãC# ãµããŒããAPI Gateway åçåã®ç¹åŸŽãAPI Gateway Developer Portal ã®ãªãŒãã³ãœãŒã¹ã®ãã³ãã¬ãŒãã玹ä»ããŠãããŸãããã¢ã§ã¯ããawscloudããŸãã¯ãserverlessã (ãŸãã¯ãã®äž¡æ¹) ã®ããŒã¯ãŒããå«ãã³ã³ãœãŒã«ãŸãã¯ãŠã§ãã¢ããªã±ãŒã·ã§ã³ã®ã¹ããªãŒã ã®ãã€ãŒãã Twitter ã¹ããªãŒãã³ã° API ããéããŸããããããã®ãã€ãŒãã¯ãªã¢ã«ã¿ã€ã ã§ Amazon Kinesis Streams ã«éä¿¡ãããLambda ãæ°ããã¬ã³ãŒããæ€åºããNoSQL ããŒã¿ããŒã¹ã§ãã Amazon DynamoDB ã«ãã€ãŒããæžã蟌ãããšã§ã¹ããªãŒãã³ã°ã®ããããåŠçããŸããããã§ããªã¢ã«ã¿ã€ã ã®ã¹ããªãŒãã³ã°åŠçã®ãã¢ã®ã¯ãŒã¯ãããŒãçè§£ã§ããã®ã§ãKinesis ããã®ãããã¬ã³ãŒããåŠçãã Lambda 颿°ã«ã€ããŠãã詳ããèŠãŠã¿ãŸãããããŸãã以äžã®ãšãããLambda 颿° DevDayStreamProcessor ã«ã¯ãããããµã€ãºã 100 ã§ DevDay2016Stream ãšããååã® Kinesis ã¹ããªãŒã ã§ããã€ãã³ããœãŒã¹ããŸãã¯ããªã¬ãŒããããŸããLambda 颿°ã¯æ°ããã¬ã³ãŒãã®ããã«å®æçã«ã¹ããªãŒã ãããŒãªã³ã°ããã¬ã³ãŒãã®ãããããã®ã±ãŒã¹ã§ã¯ã¹ããªãŒã ã§æ€åºããããã€ãŒããèªåçã«èªã¿åã£ãŠåŠçããŸãã

次ã«ãNode.js 4.3. ã§èšè¿°ããã Lambda 颿°ã®ã³ãŒãã調ã¹ãŸãã以äžã«ç€ºã Lambda 颿°ã®ã»ã¯ã·ã§ã³ã¯ãKinesis ã¹ããªãŒã ããã®ãã€ãŒãã¬ã³ãŒãã®ããããã«ãŒãããåã¬ã³ãŒããè§£æããäžé£ã® JSON ããŒã¿ã«å¿ èŠãªãã€ãŒãæ å ±ãæžã蟌ã¿ãŸããäžé£ã® JSON ã®ãã€ãŒãé ç®ã¯ Lambda ãã³ãã©ãŒã®å€éšã«ãã ddbItemsWrite 颿°ã«æž¡ãããŸãã
'use strict';
console.log('Loading function');
var timestamp;
var twitterID;
var tweetData;
var ddbParams;
var itemNum = 0;
var dataItemsBatch = [];
var dbBatch = [];
var AWS = require('aws-sdk');
var ddbTable = 'TwitterStream';
var dynamoDBClient = new AWS.DynamoDB.DocumentClient();
exports.handler = (event, context, callback) => {
var counter = 0;
event.Records.forEach((record) => {
// Kinesis data is base64 encoded so decode here
console.log("Base 64 record: " + JSON.stringify(record, null, 2));
const payload = new Buffer(record.kinesis.data, 'base64').toString('ascii');
console.log('Decoded payload:', payload);
var data = payload.replace(/[\u0000-\u0019]+/g," ");
try
{ tweetData = JSON.parse(data); }
catch(err)
{ callback(err, err.stack); }
timestamp = "" + new Date().getTime();
twitterID = tweetData.id.toString();
itemNum = itemNum+1;
var ddbItem = {
PutRequest: {
Item: {
TwitterID: twitterID,
TwitterUser: tweetData.username.toString(),
TwitterUserPic: tweetData.pic,
TwitterTime: new Date(tweetData.time.replace(/( \+)/, ' UTC$1')).toLocaleString(),
Tweet: tweetData.text,
TweetTopic: tweetData.topic,
Tags: (tweetData.hashtags) ? tweetData.hashtags : " ",
Location: (tweetData.loc) ? tweetData.loc : " ",
Country: (tweetData.country) ? tweetData.country : " ",
TimeStamp: timestamp,
RecordNum: itemNum
}
}
};
dataItemsBatch.push(ddbItem);
counter++;
});
var twitterItems = {};
twitterItems[ddbTable] = dataItemsBatch;
ddbItemsWrite(twitterItems, 0, context, callback);
};
以äžã«ç€ºã ddbItemsWrite 颿°ã¯ãKinesis ã¹ããªãŒã ããåŠçãããäžé£ã® JSON ã®ãã€ãŒãã¬ã³ãŒããåãåºããããããªãã¬ãŒã·ã§ã³ã䜿çšããŠã¬ã³ãŒãã®è€æ°ã®é ç®ãåæã« DynamoDB ããŒãã«ã«æžã蟌ã¿ãŸãããã®é¢æ°ã¯ãåã ã®ããŒãã«ã®ã¹ããããªã³ã°ã«ããæžã蟌ã¿ãªã¯ãšã¹ãã®å€±æãé¿ããããããšã¯ã¹ããã³ã·ã£ã«ããã¯ãªãã¢ã«ãŽãªãºã ãå®è£ ããããšã«ãããæªåŠçã®é ç®ãå詊è¡ãã DynamoDB ã®ãã¹ããã©ã¯ãã£ã¹ã掻çšããŸãã
function ddbItemsWrite(items, retries, ddbContext, ddbCallback)
{
dynamoDBClient.batchWrite({ RequestItems: items }, function(err, data)
{
if (err)
{
console.log('DDB call failed: ' + err, err.stack);
ddbCallback(err, err.stack);
}
else
{
if(Object.keys(data.UnprocessedItems).length)
{
console.log('Unprocessed items remain, retrying.');
var delay = Math.min(Math.pow(2, retries) * 100, ddbContext.getRemainingTimeInMillis() - 200);
setTimeout(function() {ddbItemsWrite(data.UnprocessedItems, retries + 1, ddbContext, ddbCallback)}, delay);
}
else
{
ddbCallback(null, "Success");
console.log("Completed Successfully");
}
}
}
);
}
çŸåšããã® Lambda 颿°ã¯æåŸ éãã«åäœããŠãããTwitter ã¹ããªãŒãã³ã° API ãã Kinesis ã«ååŸããããã€ãŒããåé¡ãªãåŠçããŸãããããããã®é¢æ°ã«ã¯ãDynamoDB ããŒãã«ãžã®ãããæžã蟌ã¿ãªã¯ãšã¹ããåŠçãããšãã«ãšã©ãŒãçºçãããšããæ¬ é¥ããããŸããLambda 颿°ã§ãçŸåšã®ã³ãŒãã§ã¯ãDynamoDB batchWrite 颿°ã åäžåŒã³åºãã«ã€ãæå€§ 25 ã®æžã蟌㿠(PUT) ãªã¯ãšã¹ãã§æå€§ 16 MB ã®ããŒã¿ã§æ§æãããŠããå¿ èŠãããããšãèæ ®ãããŠããŸããããã®ãããddbItemsWrite 颿°ãéä¿¡ããåã«ãã³ãŒããé©åã«å€æŽã㊠ddbItemsWrite 颿°ã 25 ã®ãããã«å¯Ÿå¿ããããããŸãã¯ããã³ãã©ãŒçµã¿èŸŒã¿é¢æ°ã§é ç®ã 25 ãªã¯ãšã¹ãã®äžé£ã®ã°ã«ãŒãã«ããŸãã25 以äžã®ãã€ãŒãé ç®ã®ããããéä¿¡ããããšæ€èšŒã®äŸå€ãçºçããŸããããã¯ãå°èŠæš¡ãªãã¹ãã·ããªãªã§ã¯æ€åºããã«ãããŠããæ¬çšŒåã¯ãŒã¯ããŒãã§ã¯å€±æãšãªããã°ã®ããäŸã§ãã ãããã¬ã¿ãŒãã¥ãŒ ããã§ãddbItemsWrite Lambda 颿°ã«äŸå€ãã¹ããŒãããã€ãã³ãããŸãã¯ãã¬ã³ãŒããåŠçããéã«å€±æãšãªãã€ãã³ããèªèã§ããã®ã§ããããã¬ã¿ãŒãã¥ãŒ (DLQ) ãæŽ»çšããã®ã«æé©ãªã·ããªãªãšãªããŸããAWS Lambda DLQ æ©èœã¯ Amazon S3ãAmazon SNSãAWS IoT ã®ãããªéåæã€ãã³ãããŸãã¯çŽæ¥ã®éåæåŒã³åºãã§ã®ã¿äœ¿çšå¯èœã§ãAmazon Kinesis ãŸã㯠Amazon DynamoDB ã¹ããªãŒã ã®ãããªã¹ããªãŒãã³ã°ã€ãã³ãã®ãœãŒã¹åãã§ã¯ãªãã®ã§ãæåã®ã¹ãããã¯ãã® Lambda 颿°ã 2 ã€ã®é¢æ°ã«åããããšã§ããæåã® Lambda 颿°ã¯ Kinesis ã¹ããªãŒã ã®åŠçã«å¯Ÿå¿ãã2 ã€ãã®é¢æ°ã¯æåã®é¢æ°ã§åŠçãããããŒã¿ãåãåºã DynamoDB ã«ãã€ãŒãæ å ±ãæžã蟌ã¿ãŸãããã®åŸãäžèšã®ãšãã DynamoDB ãžã®ãã€ãŒãã®ããããæžã蟌ãéã«çãããšã©ãŒã®ããã«ã2 ã€ãã® Lambda 颿°ã§ DLQ ãã»ããã¢ããããŸããã¿ãŒã²ããã DLQ ã«ã»ããã¢ãããããšãã« 2 ã€ã®ãªãã·ã§ã³ããããŸããAmazon SNS ãããã¯ããŸã㯠Amazon SQS ãã¥ãŒã§ãããã®èª¬æã®äžã§ã¯ãAmazon SQS ãã¥ãŒã®äœ¿çšãéžæããŸãããã®ãããDLQ ã䜿çšããéã®æåã®ã¹ãããã¯ãSQS æšæºãã¥ãŒã®äœæã§ããæšæºãã¥ãŒã¿ã€ãã¯é«ãã©ã³ã¶ã¯ã·ã§ã³ã¹ã«ãŒãããã®ãããã¥ãŒã§ããã¡ãã»ãŒãžãæäœ 1 åé ä¿¡ãããã¡ãã»ãŒãžã®å¥ã®ã³ããŒãé ä¿¡ãããŸããã¡ãã»ãŒãžããéä¿¡ãããé åºãšã¯ç°ãªãé åºã§é ä¿¡ãããããšããããŸããSQS ãã¥ãŒãšãã¥ãŒã¿ã€ãã®è©³çްã«ã€ããŠã¯ããAmazon SQS ããã¥ã¡ã³ãããã芧ãã ãããç§ã®ãã¥ãŒãStreamDemoDLQ ãäœæããããããã®éžæãããã¥ãŒã®è©³çްã¿ããã ARN ãã€ãã¿ãŸããã³ã³ãœãŒã«ã䜿çšããŠãã®é¢æ°ã« DLQ ãªãœãŒã¹ãæå®ããªãå Žåã¯ããã® SQS ãã¥ãŒããšã©ãŒãšã€ãã³ã倱æéç¥ã®ããã® DLQ ã¿ãŒã²ãããšããŠèå¥ãããããLambda 颿°ã®ããã«ãã¥ãŒã® ARN ãå¿ èŠã§ãããŸãããã® SQS ãã¥ãŒã«ã¢ã¯ã»ã¹ããç®çã§ Lambda å®è¡ããŒã«ããªã·ãŒã«ã¢ã¯ã»ã¹èš±å¯ã远å ããããã« ARN ã䜿çšããŸãã

Lambda 颿°ã«æ»ãã[Configuration] ã¿ããéžæã㊠[Advanced settings] ã»ã¯ã·ã§ã³ãéããŸãã[DLQ Resource] ãã£ãŒã«ãã§ SQS ãéžæãã[SQS Queue] ãã£ãŒã«ãã®ããããããŠã³ãã ç§ã® [StreamDemoDLQ] ãã¥ãŒãéžæããŸãã

SQS DLQ ãžæ£åžžã«ã¡ãã»ãŒãžãéä¿¡ããã«ã¯ãLambda 颿°ã®å®è¡ããŒã«ã¯æç€ºçã« sqs:SendMessage ã®ã¢ã¯ã»ã¹ãèš±å¯ããå¿ èŠããããŸãããã®ãããç§ã® Lambda ããŒã« lambda_kinesis_role ã«ä»¥äžã® SQS ã¢ã¯ã»ã¹æš©éã®ããã® IAM ããªã·ãŒãããããšã確èªããŸããã

ããã§ãAmazon SQS ã䜿çšã㊠Lambda 颿°ã®ããã®ãããã¬ã¿ãŒãã¥ãŒãæ£åžžã«èšå®ã§ããŸãããLambda ã®ãããã¬ã¿ãŒãã¥ãŒã®è©³çްã«ã€ããŠã¯ããAWS Lambda éçºè
ã¬ã€ããã®ããã©ãã«ã·ã¥ãŒãã£ã³ã°ãšã¢ãã¿ãªã³ã°ãã»ã¯ã·ã§ã³ããèªã¿ãã ããããŸãããããã¬ã¿ãŒãã¥ãŒã«é¢ãããAWS ã³ã³ãã¥ãŒãã£ã³ã°ããã°ã®æçš¿ããã確èªãã ããã
C# Support
åè¿°ã®ãšãããAWS re:Invent ã§ Lambda ã«è¿œå ãããå¥ã®ãã°ãããç¹åŸŽã¯ããªãŒãã³ãœãŒã¹ .NET Core 1.0 ãã©ãããã©ãŒã ã«ãã C# èšèªã®ãµããŒãã§ããLambda ã³ã³ãœãŒã«ã¯ãŸã ã³ã³ãã€ã«æžã¿èšèªã®ç·šéãæäŸããŠããªãã®ã§ãC# Lambda 颿°ãèšè¿°ããã«ã¯ãAWS ToolkitãYeomanããŸã㯠.NET CLI ã§ Visual Studio ã®ããŒã«ã䜿çšã§ããŸããC# ã§èšè¿°ããã Lambda 颿°ããããã€ããã«ã¯ãAWS ToolKit for Visual Studio ã® Lambda ãã©ã°ã€ã³ã䜿çšãããããŸã㯠.NET Core ã³ãã³ãã©ã€ã³ã§ãããã€ããã±ãŒãžãäœæããŸããC# Lambda 颿°ãã³ãã©ãŒãã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãŸãã¯éçã¡ãœãããšããŠå®çŸ©ããå¿
èŠããããŸãã2 ã€ã®é¢æ°ãã©ã¡ãŒã¿ãŒããããŸãã1 ã€ãã¯ãã€ãã³ãããŒã¿ã§ããå
¥ååã§ããã 1 ã€ã¯ãã¿ã€ã ILambdaContext ã® Lambda ã³ã³ããã¹ããªããžã§ã¯ãã§ããAWS ã®ãµãŒãã¹ã®ã€ãã³ãããŒã¿å
¥åãªããžã§ã¯ãã¿ã€ãã«ã¯ä»¥äžã®ãã®ããããŸãã
- Amazon.Lambda.APIGatewayEvents
- Amazon.Lambda.CognitoEvents
- Amazon.Lambda.ConfigEvents
- Amazon.Lambda.DynamoDBEvents
- Amazon.Lambda.KinesisEvents
- Amazon.Lambda.S3Events
- Amazon.Lambda.SNSEvents
Lambda ã® C# ãµããŒãã®è©³çްã«ã€ããŠèª¬æããã®ã§ãDevDayStreamProcessor Lambda 颿°ã C# èšèªã§æžãæããŸãããããã®äŸã§ã¯ãLambda 颿°ãèšè¿°ããã®ã« Visual Studio IDE ã䜿çšããŸãããŸãã颿°ããããã€ããã®ã«ãAWS Lambda Visual Studio ãã©ã°ã€ã³ã掻çšããŸããLambda ã§ AWS Toolkit for Visual Studio ã䜿çšããã«ã¯ãVisual Studio 2015 Update 3 ããŒãžã§ã³ãš NET Core ããŒã«ãå¿ èŠãªããšã«çæããŠãã ãããVisual Studio 2015 Update 3 ãš .NET Core ã®ã€ã³ã¹ããŒã«ã®è©³çްã«ã€ããŠã¯ããã¡ãããèªã¿ãã ãããVisual Studio ã䜿çšã㊠C# 颿°ãäœæããã«ã¯ãæ°ãããããžã§ã¯ããéå§ãã[AWS Lambda Project (.NET Core)] ãéžæã㊠ServerlessStreamProcessor ãšããååãä»ããŸãã

ãã®é¢æ°ãèšè¿°ããã®ã« AWS Toolkit for Visual Studio ãæŽ»çšããããšã®å€§ããªå©ç¹ã¯ãLambda ã³ã³ãœãŒã«ã䜿çšããã®ãšåæ§ã®æ¹æ³ã§ Visual Studio ã®äžã§ Lambda èšèšå³ã䜿çšã§ããããšã§ããããã§ãDevDayStreamProcessor ã C# ã§ã¬ããªã±ãŒãããããã«ãSimple Kinesis Function èšèšå³ãéžæããŸãã

Lambda 颿°ã C# ã§èšè¿°ããå Žåãã¯ã©ã¹ã®å®£èšãã¿ãŒã²ããã®ãã³ãã©ãŒé¢æ°ã Lambda 颿°ãšããŠããŒã¯ããå¿ èŠã¯ãããŸããããŸããCloudWatch ãã°ãèšè¿°ããå Žåã¯ãæšæº C# ã® Console ã¯ã©ã¹ã® WriteLine 颿°ã䜿çšããããILambdaContext ã€ã³ã¿ãŒãã§ã€ã¹ã®äžéšã§ãã ILambdaContext ã® LogLine 颿°ã䜿çšããããšãã§ããŸããæå®ã® Kinesis ã¹ããªãŒã ã«ã¢ã¯ã»ã¹ããããã®ãã³ãã¬ãŒãã§ã¯ãC# Lambda 颿°ã® ServerlessStreamProcessor ãèšè¿°ããããã« Node.js ã³ãŒãã® DevDayStreamProcessor ãšåã倿°åã䜿çšããŸãã以äžã® C# Lambda ãã³ãã©ãŒé¢æ°ãã芧ãã ããã
using System.Collections.Generic;
using Amazon.Lambda.Core;
using Amazon.Lambda.KinesisEvents;
using Amazon.DynamoDBv2;
using Amazon.DynamoDBv2.DataModel;
using Newtonsoft.Json.Linq;
// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializerAttribute(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]
namespace ServerlessStreamProcessor
{
public class LambdaTwitterStream
{
string twitterID, timeStamp;
int itemNum = 0;
private static AmazonDynamoDBClient dynamoDBClient = new AmazonDynamoDBClient();
List<TwitterItem> dataItemsBatch = new List<TwitterItem>();
public void FunctionHandler(KinesisEvent kinesisEvent, ILambdaContext context)
{
DynamoDBContext dbContext = new DynamoDBContext(dynamoDBClient);
context.Logger.LogLine($"Beginning to process {kinesisEvent.Records.Count} records...");
foreach (var record in kinesisEvent.Records)
{
context.Logger.LogLine($"Event ID: {record.EventId}");
context.Logger.LogLine($"Event Name: {record.EventName}");
// Kinesis data is base64 encoded so decode here
string tweetData = GetRecordContents(record.Kinesis);
context.Logger.LogLine($"Decoded Payload: {tweetData}");
tweetData = @"" + tweetData;
JObject twitterObj = JObject.Parse(tweetData);
twitterID = twitterObj["id"].ToString();
timeStamp = DateTime.Now.Millisecond.ToString();
itemNum++;
context.Logger.LogLine(timeStamp);
context.Logger.LogLine($"Twitter ID is: {twitterID}");
context.Logger.LogLine(itemNum.ToString());
TwitterItem ddbItem = new TwitterItem()
{
TwitterID = twitterID,
TwitterUser = twitterObj["username"].ToString(),
TwitterUserPic = twitterObj["pic"].ToString(),
TwitterTime = DateTime.Parse(twitterObj["time"].ToString()).ToUniversalTime().ToString(),
Tweet = twitterObj["text"].ToString(),
TweetTopic = twitterObj["topic"].ToString(),
Tags = twitterObj["hashtags"] != null ? twitterObj["hashtags"].ToString() : String.Empty,
Location = twitterObj["loc"] != null ? twitterObj["loc"].ToString() : String.Empty,
Country = twitterObj["country"] != null ? twitterObj["country"].ToString() : String.Empty,
TimeStamp = timeStamp,
RecordNum = itemNum
};
dataItemsBatch.Add(ddbItem);
}
context.Logger.LogLine(JObject.FromObject(dataItemsBatch).ToString());
ddbItemsWrite(dataItemsBatch, 0, dbContext, context);
context.Logger.LogLine("Success - Completed Successfully");
context.Logger.LogLine("Stream processing complete.");
}
C# ã§èšè¿°ããã Kinesis ã¹ããªãŒã ããã»ããµãšåœåã® Node.js ã³ãŒãéã®æ³šæãã¹ãå·®ç°ã¯ãããã§ããC# Lambda 颿°ã§ããã©ã«ãã§ãµããŒããããŠããå ¥åãã©ã¡ãŒã¿ãŒã¿ã€ã㯠System.IO.Stream ã¿ã€ãã§ãããããKinesis base64 æååã¯ãèšèšå³ã§æäŸãããŠãã GetRecordContents 颿°ã§ StreamReader (ãšã³ã³ãŒãã£ã³ã°ã¯ ASCII) ã䜿çšããŠãã³ãŒããããŸãã
private string GetRecordContents(KinesisEvent.Record streamRecord)
{
using (var reader = new StreamReader(streamRecord.Data, Encoding.ASCII))
{
return reader.ReadToEnd();
}
}
ãã€ãŒãã®ããŒã¿ã DynamoDB ããŒãã«ã«æžã蟌ãããã«ãVisual Studio å ã§ NuGet ããã±ãŒãžãããŒãžã£ãŒãçµç±ã㊠DynamoDB; AWSSDK.DynamoDBv2 ã® AWS .NET SDK NuGet ããã±ãŒãžã Lambda 颿°ãããžã§ã¯ãã«è¿œå ããŸããããŸããDynamoDB ããŒãã«ã«ä¿åãããããŒã¿ã«ãããã³ã°ããããã« .NET ããŒã¿ãªããžã§ã¯ããšã㊠TwitterItem ãäœæããŸãããDynamoDB çšã® AWS .NET SDK é«ã¬ãã«ããã°ã©ãã³ã°ã€ã³ã¿ãŒãã§ã€ã¹ããªããžã§ã¯ãæ°žç¶æ§ã¢ãã«ã䜿çšããŠãddbItemsWrite C# 颿°ã® BatchWrite ãªããžã§ã¯ãã¯ã©ã¹ãä»ããŠæžã蟌ã TwitterItem ãªããžã§ã¯ãã®ã³ã¬ã¯ã·ã§ã³ãäœæããŸããã
private async void ddbItemsWrite(List<TwitterItem> items, int retries, DynamoDBContext ddbContext, ILambdaContext context)
{
BatchWrite<TwitterItem> twitterStreamBatchWrite = ddbContext.CreateBatchWrite<TwitterItem>();
try
{
twitterStreamBatchWrite.AddPutItems(items);
await twitterStreamBatchWrite.ExecuteAsync();
}
catch (Exception ex)
{
context.Logger.LogLine($"DDB call failed: {ex.Source} ");
context.Logger.LogLine($"Exception: {ex.Message}");
context.Logger.LogLine($"Exception Stacktrace: {ex.StackTrace}");
}
}
AWS Toolkit for Visual Studio ã䜿çšããŠãC# Lambda 颿°ãäœæããå¥ã®ã¡ãªããã¯ã1 åã¯ãªãã¯ããã ãã§ Lambda 颿°ãçŽæ¥ AWS ã«ãããã€ã§ããããšã§ãããœãªã¥ãŒã·ã§ã³ãšã¯ã¹ãããŒã©ãŒã§ãããžã§ã¯ãåãéžæããå³ã¯ãªãã¯ãããšãã¡ãã¥ãŒãªãã·ã§ã³ã« Publish to AWS Lambda ãåºãŠãAWS ãžã®ãããã€çšã® Lambda 颿°ã«ã€ããŠå«ããã¹ãæ å ±ã®ã¡ãã¥ãŒã衚瀺ãããŸãã

ãã³ãã©ãŒé¢æ°ã®çœ²å㯠Assembly :: Namespace :: ClassName :: Method ã®åœåæ³ã«åŸããŸãããããã£ãŠãããã«ç€ºããã C# Lambda 颿°ã®çœ²å㯠ServerlessStreamProcessor :: ServerlessStreamProcessor.LambdaTwitterStream :: FunctionHandler ã§ããããšã«æ³šæããŠãã ããããã®æ å ±ã¯ [Upload to AWS Lambda] ãã€ã¢ãã°ããã¯ã¹ã«æäŸããã[Next] ãéžæããŠã颿°ã«ããŒã«ãå²ãåœãŠãŸãã


å®äºãããšãAWS toolkit ãæäŸãããã©ã°ã€ã³ (以äžã«ç€ºã) ã䜿çšã㊠Lambda ã³ã³ãœãŒã«ãŸã㯠Visual Studio ã§ãLambda 颿°éçºã®å埩ã¢ãããŒãã®ããã«ããªã¬ãŒããã€ãã³ããœãŒã¹ã®ãµã³ãã«ããŒã¿ã䜿çšããŠãã¹ãã§ããŸãã

C# èšèªã䜿çšãã AWS Lambda 颿°ã®äœæã«é¢ããŠã®è©³çްã«ã€ããŠã¯ããAWS Lambda éçºè ã¬ã€ããããŸãã¯ã³ã³ãã¥ãŒãã£ã³ã°ããã°ã® C# ã®ãµããŒããçºè¡šããæçš¿ãã芧ãã ããã
API Gateway åçåããã³éçºè
ããŒã¿ã«
ãã€ã¯ããµãŒãã¹ã¢ãŒã¡ã³ã¿ã ã«åŸã£ãŠããã®ãªãããã€ã¯ããµãŒãã¹ã®ãœãªã¥ãŒã·ã§ã³ãæ§æããåå¥ã®ãµãŒãã¹ãžã®ã¢ã¯ã»ã¹ãšå
¬éã管çããããã«ã¹ããŒããšã³ããã€ã³ãã®äœ¿çšãŸã㯠REST API çµç±ã§ã® API gateway ã®äœ¿çš (ãŸãã¯ãã®äž¡æ¹) ãå¿
èŠãªã¢ãŒããã¯ãã£ãŒãã¿ãŒã³ãèªèããŠããå ŽåããããŸããAmazon API Gateway ã«ãã RESTful API ã®äœæãšç®¡çãã㊠AWS Lambda 颿°ãå€éš HTTP ãšã³ããã€ã³ããä»ã® AWS ã®ãµãŒãã¹ãå
¬éã§ããããã«ãªããŸããå ããŠãAmazon API Gateway ã«ãããã¯ã©ã€ã¢ã³ãããã³å€éšéçºè
ããHTTP ãããã³ã«ããŸãã¯ããã©ãããã©ãŒã /èšèªå¯Ÿè±¡ã® SDK ãä»ããŠãããã€ããã API ã«ã¢ã¯ã»ã¹ã§ããããã«ãªããŸããAWS Marketplace ã® SaaS ãµãã¹ã¯ãªãã·ã§ã³ã®å°å
¥ãš API Gateway ãš AWS Marketplace ãšã®çµ±åã«ãããAWS Marketplace ã® API Gateway ã䜿çšããŠãäœæãã API ã顧客ãçŽæ¥å©çšã§ããããã«ããããšã§ãAPI ã®åçåãå¯èœã«ãªããŸãããAWS ã®ã客æ§ã¯ãæ¢åã® AWS ã¢ã«ãŠã³ãã䜿çšããŠãããŒã±ãããã¬ã€ã¹ã§å
¬éãããŠãã API ããµãã¹ã¯ã©ã€ãããŠæ¯æãããšãã§ããŸããAPI Gateway ãš AWS Marketplace ãšã®çµ±åã«ãããAWS Marketplace ã§éå§ããããã»ã¹ã¯ç°¡åã§ããéå§ããã«ã¯ãAmazon API Gateway ã§ã䜿çšãã©ã³æ©èœãæå¹ã«ããŠããããšã確èªããå¿
èŠããããŸãã

æå¹åããåŸã䜿çšãã©ã³ãäœæããŸããç®æšã®ã¬ãŒãããã³ããŒã¹ããªã¯ãšã¹ãã®ãããå€ã䜿çšããŠãã¹ããããªã³ã°ãæå¹ã«ã (å¿ èŠã«å¿ããŠ)ãæåŸã«ãäžå®ã®ã¿ã€ã ãã¬ãŒã ãããã®ç®æšãªã¯ãšã¹ãã®ã¯ã©ãŒã¿ãæå®ããŠãã¯ã©ãŒã¿ãæå¹ã«ããŸã (éžæããå Žå)ã

次ã«ã䜿çšãã©ã³ãšé¢é£ä»ãã API ãšé¢é£ããã¹ããŒãžãéžæããŸããç¹å®ã® API ã䜿çšãã©ã³ã«é¢é£ä»ããããšãéžæã§ããªããããããã¯ãªãã·ã§ã³ã®æé ã§ããããšã«æ³šæããŠãã ããã

ããšã¯ãAPI ããŒã䜿çšãã©ã³ã«è¿œå ãŸãã¯äœæããã ãã§ãã䜿çšãã©ã³ã®äœæã«ãããŠããã®æé ããŸããªãã·ã§ã³ã§ããããšã«ã泚æãã ããã

䜿çšãã©ã³ StreamingPlan ãã§ããã®ã§ãããŒã±ãããã¬ã€ã¹ã§ API ã販売ããæºåã®ããã®æ¬¡ã®ã¹ãããã«é²ãããšãã§ããŸããããŸããŸãª API ãšãã®å¶éã䜿çšããŠãè€æ°ã®äœ¿çšãã©ã³ãäœæãããããã®ãã©ã³ã AWS Marketplace ã§ãå·®å¥åããã API 補åãšããŠè²©å£²ãããªãã·ã§ã³ããããŸãã

ãã ããé¡§å®¢ãæ°ãã API 補åãè³Œå ¥ã§ããããã«ãããããAWS Marketplace ã§ã¯ãå API 補åã«ãµãã¹ã¯ãªãã·ã§ã³ãªã¯ãšã¹ããåŠçããå€éšéçºè ããŒã¿ã«ããããAPI ã®è©³çްæ å ±ããã³äœ¿çšç®¡çæ©èœãæäŸããå¿ èŠããããŸãããã®ãããªããŒã±ãããã¬ã€ã¹ã§ã®å€éšéçºè ããŒã¿ã«ã«å¯Ÿãã顧客ã®ããŒãºã«ãããæ°ãããªãŒãã³ãœãŒã¹ API Gateway éçºè ããŒã¿ã«ãµãŒããŒã¬ã¹ãŠã§ãã¢ããªã±ãŒã·ã§ã³ã®å®è£ ãèªçããŸãããAPI Gateway éçºè ããŒã¿ã«ãããžã§ã¯ãã®ç®æšã¯ãéçºè ã®ãµã€ã³ã¢ãããèš±å¯ãã€ã€ãé¡§å®¢ãæ°ã¹ãããã®ç°¡åãªæé ã«åŸã£ãŠãAPI Gateway ã§æ§ç¯ãã API ã®ã«ã¿ãã°ããªã¹ã衚瀺ãããµãŒããŒã¬ã¹ãŠã§ãã¢ããªã±ãŒã·ã§ã³ãäœæããããšã§ããAPI Gateway éçºè ããŒã¿ã«ã¯ AWS Serverless Express ã«æ§ç¯ãããŠãããAWS ã«ããçºè¡ããããªãŒãã³ãœãŒã¹ã©ã€ãã©ãªãŒã§ãNode.js Express ãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠããŠã§ãã¢ããªã±ãŒã·ã§ã³/ãµãŒãã¹ãæ§ç¯ããããã« AWS Lambda ããã³ Amazon API Gateway ãå©çšããéã«åœ¹ç«ã¡ãŸããå ããŠãAPI Gateway éçºè ããŒã¿ã«ã¢ããªã±ãŒã·ã§ã³ã¯ AWS SAM (ãµãŒããŒã¬ã¹ã¢ããªã±ãŒã·ã§ã³ã¢ãã«) ãã³ãã¬ãŒãã䜿çšããŠããã®ãµãŒããŒã¬ã¹ãªãœãŒã¹ããããã€ããŸããAWS SAM ã¯ç°¡ç¥åããã CloudFormation ãã³ãã¬ãŒãããã³ä»æ§ã§ãAWS ã§ã®ãµãŒããŒã¬ã¹ã¢ããªã±ãŒã·ã§ã³ã®ç®¡çãšãããã€ãç°¡åã«ããŸããAPI Gateway ããŒã¿ã«ã䜿çšããŠéçºè ããŒã¿ã«ãæ§ç¯ããã«ã¯ãGitHub ãã aws-api-gateway-developer-portal ãããžã§ã¯ããã¯ããŒã³äœæããããšããå§ããŸãã

AWS CLI ããã³ Node.js ã®ææ°çãã€ã³ã¹ããŒã«æžã¿ã§ããã°ãMac ããã³ Linux OS ãŠãŒã¶ãŒçšã®ã³ãã³ãã©ã€ã³ã§ãânpm run setupâ ãå®è¡ããŠãéçºè ããŒã¿ã«ãèšå®ããŸããWindows ãŠãŒã¶ãŒã¯ãã³ãã³ãã©ã€ã³ã§ ânpm run win-setupâ ãå®è¡ããŠãéçºè ããŒã¿ã«ãèšå®ããŸãã


çµæãšããŠãS3 ã§å®è¡ããæ©èœçãªãµã³ãã«éçºè ããŒã¿ã«ãŠã§ããµã€ããã§ãããããã«ã¹ã¿ãã€ãºããŠç¬èªã® API çšã®éçºè ããŒã¿ã«ãäœæã§ããŸãã

ãµã³ãã«ã®éçºè ããŒã¿ã«ãŠã§ããµã€ãã®ããã³ããšã³ãã¯ãReact JavaScript ã©ã€ãã©ãªã䜿çšããŠæ§ç¯ãããŠãããããã¯ãšã³ã㯠aws-serverless-express ã©ã€ãã©ãªã䜿çšããŠãAWS Lambda 颿°ãå®è¡ãããŠããŸããå ããŠãSNS ã€ãã³ããœãŒã¹ã䜿çšãã Lambda 颿°ã¯ã顧客ã AWS Marketplace ã³ã³ãœãŒã«ãä»ã㊠API ããµãã¹ã¯ã©ã€ããŸãã¯ãµãã¹ã¯ã©ã€ãè§£é€ããéã®éç¥ã®ããã®ãªã¹ããŒãšããŠäœæãããŠããŸãããã®ãªãã¡ã¬ã³ã¹ãããžã§ã¯ãã䜿çšãã API Gateway éçºè ããŒã¿ã«ãŠã§ãã¢ããªã±ãŒã·ã§ã³ã®æ§ç¯ãã«ã¹ã¿ãã€ãºããããã€ã®æé ã«ã€ããŠã®è©³çްã¯ãã¢ãŒããã¯ãã£ãšå®è£ ã«ã€ããŠè©³çްã«èª¬æããŠãããAWS ã³ã³ãã¥ãŒãã£ã³ã°ããã°ã®æçš¿ããåç §ããŠãã ããã API ãåçåããæ¬¡ã®äž»ãªã¹ãããã¯ãAWS Marketplace ã§ã¢ã«ãŠã³ããäœæããããšã§ããã¢ã«ãŠã³ãããŸã äœæããŠããªãå Žåãç»é²ã¯ãAWS Marketplace Seller Guideãã§èª¬æãããŠããå¿ èŠãªåææ¡ä»¶ãæºãããŠããããšã確èªããAWS Marketplace 管çããŒã¿ã«ã®ã»ã©ãŒç»é²ãã©ãŒã ã«å ¥åããã ãã§ãã以äžã§ãã»ã©ãŒç»é²ãã©ãŒã ã®åé ã®ã¹ãããã·ã§ããã確èªã§ããŸãã

API ãäžèŠ§è¡šç€ºããã«ã¯ãAPI ã説æãã補åããŒããã©ãŒã ã«å ¥åããAPI ã®äŸ¡æ Œãèšå®ããŠãAPI ãµãã¹ã¯ãªãã·ã§ã³ããã»ã¹ããã¹ããã AWS ã¢ã«ãŠã³ãã® ID ãæå®ããŸãããã®ãã©ãŒã ãå ¥åããå ŽåãAPI éçºè ããŒã¿ã«çšã® URL ãéä¿¡ããå¿ èŠããããŸãã販売è ç»é²ãå®äºããããAWS Marketplace 補åã³ãŒããæå®ãããŸããMarketplace 補åã³ãŒãã API 䜿çšãã©ã³ãšé¢é£ä»ããå¿ èŠããããŸãããã®æé ãå®äºããããã«ãAPI Gateway ã³ã³ãœãŒã«ã«ãã°ã€ã³ããAPI 䜿çšãã©ã³ã«ç§»åããŸãã[Marketplace] ã¿ãã«ç§»åãã補åã³ãŒããå ¥åããŸããããã«ãããAPI Gateway ã¯ãAPI ã䜿çšããããšæž¬å®ããŒã¿ã AWS Marketplace ã«éä¿¡ããŸãã

Amazon API Gateway ã管çãã API ã䜿çšãã©ã³ã«ããã±ãŒãžåãããä»éãã API éçºè ããŒã¿ã«ãäœæããã販売è ã¢ã«ãŠã³ãç»é²ãå®äºãã補åã³ãŒãã API ãã©ã³ãšé¢é£ä»ããããã®ã§ãAWS Marketplace ã§ API ãåçåããæºåãã§ããŸãããAPI Gateway ã§äœæããã API ã®åçåã«é¢ãã詳现ã«ã€ããŠã¯ãé¢é£ããããã°ã®æçš¿ãš API Gateway éçºè ã¬ã€ãããã¥ã¡ã³ãã確èªããŠãã ããã
èŠçŽ
ã芧ããã ãããšãããAWS ããŒã 㯠2016 幎äžããµãŒããŒã¬ã¹ã¢ãŒããã¯ãã£ã®äœæããã³ãããã€ã«ããã顧客ãšã¯ã¹ããªãšã³ã¹ãåäžãããããããŸããAPI Gateway ã管çãã API ãçæããåçããããããã®ã¡ã«ããºã ãæäŸããããåªåããŠããŸãããAWS Lambda ããã³ Amazon API Gateway ã®è£œåã®ããã¥ã¡ã³ããã芧ã«ãªãããããã®ãµãŒãã¹ãããã³ãã¹ãŠã®æ°ãããªãªãŒã¹ãããæ©èœã®è©³çްã確èªããŠãã ããã
â Tara
Amazon Aurora Clusterã«ç£æ»æ©èœã远å
re:Inventã§MySQLããŒã¿ããŒã¹ãšäºææ§ããããã³ããŒã·ã£ã«ããŒã¿ããŒã¹ã®æ§èœãšå¯çšæ§ããªãŒãã³ãœãŒã¹ããŒã¿ããŒã¹ã®ã³ã¹ãããŒãã©ãŒãã³ã¹ã®äž¡é¢ãããªãããAmazon Auroraã®æ°æ©èœãçºè¡šããŸããã
仿¥ãadvanced auditingæ©èœãå šãŠã®ã客æ§ã«ãå©çšé ããããã«ãªã£ãããšãçºè¡šèŽããŸãã
advanced auditingãšã¯
Auditingãšã¯ç¹å®ã®ã€ãã³ããåéããŠæåãããã¯ä»ã®ã¢ããªã±ãŒã·ã§ã³ã§åæåºæ¥ãããã«æäŸããæ©èœãæããŸãããããã®ãã°ã¯ã³ã³ãã©ã€ã¢ã³ã¹èŠå®ãã¬ããã³ã¹ã®ããŒã¹ã«ãªãæ å ±ãšããŠå©çšå¯èœã§ããadvanced auditingã®äŸã«ã¯ããã°åæããŠãŒã¶ãŒã¢ã¯ã·ã§ã³ã®ç£æ»(éå»ã®ã€ãã³ãããã³ããã¢ãªã¢ã«ã¿ã€ã ã®è åšæ€åºãªã©)ãã»ãã¥ãªãã£é¢é£ã®ã€ãã³ãã«èšå®ãããã¢ã©ãŒã ã®ãå«ãŸããŸãã Auroraã®advanced auditingæ©èœã¯ãããŒã¿ããŒã¹ã®ããã©ãŒãã³ã¹ã«äžãã圱é¿ãæå°éã«æããªããããããã®æ©èœãæäŸããããã«èšèšãããŠããŸãã
advanced auditingãå©çšããã«ã¯
ãŸãã¯ããã«ãadvanced auditingãæå¹ã«ããaudit logãåç §ããŸãã
advanced auditingã®æå¹å
DBã¯ã©ã¹ã¿ãã©ã¡ãŒã¿ã°ã«ãŒãã«ãããã©ã¡ãŒã¿ãèšå®ããããšã§advanced auditingã®æå¹åãèšå®ãè¡ãããšãã§ããŸãããããã®ãã©ã¡ãŒã¿ã®å€æŽãDBã¯ã©ã¹ã¿ã®åèµ·åã¯å¿ èŠãããŸããããŸããåäœã¯ Aurora DB instance parametersãšåæ§ã§ãã
æ©èœãæå¹/ç¡å¹åããããã« server_audit_loggingãã©ã¡ãŒã¿ãå©çšããŸããserver_audit_eventsãã©ã¡ãŒã¿ã§ã©ã®ã€ãã³ãããã°ã«èšé²ãããèšå®ããŸãã
server_audit_excl_usersãšserver_audit_incl_usersãã©ã¡ãŒã¿ã§ã©ã®ãŠãŒã¶ãç£æ»å¯Ÿè±¡ã«ãããèšå®å¯èœã§ã:
- server_audit_excl_usersãšserver_audit_incl_usersãæªæå®ã®å Žå(ããã©ã«ãå€)ã¯å šãŠã®ãŠãŒã¶ãèšé²ãããŸã
- server_audit_incl_usersã«ãŠãŒã¶ãèšå®ããserver_audit_excl_usersãæå®ããªãå Žåãserver_audit_incl_usersã«æå®ãããŠãŒã¶ã®ã¿èšé²ãããŸã
- server_audit_excl_usersã«ãŠãŒã¶ãèšå®ããserver_audit_incl_usersãæå®ããªãå Žåãserver_audit_excl_usersã«æå®ãããŠãŒã¶ä»¥å€ãèšé²ã®å¯Ÿè±¡ã«ãªããŸã
- server_audit_excl_usersãšserver_audit_incl_usersã«åäžã®ãŠãŒã¶ãèšå®ããå Žåã¯ãserver_audit_incl_usersã®åªå 床ãé«ãããèšé²ã®å¯Ÿè±¡ã«ãªããŸã
advanced auditingã®ãã©ã¡ãŒã¿ã®è©³çްã以äžã§ã説æããŸã
server_audit_loggingãç£æ»ãã°ã®æå¹/ç¡å¹åãæå®ããŸããæšæºã§ã¯OFFã«ãªã£ãŠããã®ã§ãONã«æå®ããããšã§æå¹ã«ãªããŸã
- Scope: Global
- Dynamic: Yes
- Data type: Boolean
- Default value: OFF (disabled)
server_audit_eventsãã€ãã³ãã®ãªã¹ããã«ã³ãã§åºåã£ãŠæå®ããŸãããªã¹ãäžã®ãšã¬ã¡ã³ãéã«ã¹ããŒã¹ã¯å ¥ããªããã«æ°ãã€ããŠäžãã
- Scope: Global
- Dynamic: Yes
- Data type: String
- Default value: Empty string
- æå¹ãªå€: 以äžã®ã€ãã³ãã®å¥œããªçµã¿åãããæå®å¯èœ
- CONNECT â ãŠãŒã¶æ å ±ãå«ããæ¥ç¶ã®æåã»å€±æã»åæãèšé²
- QUERY â ã·ã³ã¿ãã¯ã¹ãæš©éäžè¶³ã§å€±æããã¯ãšãªãå«ããå šãŠã®ã¯ãšãªæååãšã¯ãšãªã®çµæãplane textã§èšé²
- QUERY_DCL â DCLã¯ãšãªã®ã¿ãèšé² (GRANT, REVOKEãªã©)
- QUERY_DDL â DDLã¯ãšãªã®ã¿ãèšé² (CREATE, ALTERãªã©)
- QUERY_DML â DMLã¯ãšãªã®ã¿ãèšé² (NSERT, UPDATEãªã©)
- TABLE â ã¯ãšãªã®å®è¡ã§å©çšãããããŒãã«ãèšé²
server_audit_excl_usersããã°ã«èšé²ããªããŠãŒã¶ãã«ã³ãåºåãã§æå®ããŸãããšã¬ã¡ã³ãéã«ã¹ããŒã¹ã¯å ¥ããªãããæ°ãã€ããŠäžãããæ¥ç¶ã»åæã®ã€ãã³ãã¯ãã®èšå®ã«åœ±é¿ãåããªãããèšé²ãããŸããserver_audit_excl_usersã«æå®ãããŠãããšããŠãserver_audit_incl_usersã«ãæå®ãããŠããå Žåã¯ãserver_audit_incl_usersã®åªå 床ãé«ãããèšé²ã®å¯Ÿè±¡ã«ãªããŸã
- Scope: Global
- Dynamic: Yes
- Data type: String
- Default value: Empty string
server_audit_incl_usersããã°ã«èšé²ãããŠãŒã¶ãã«ã³ãåºåãã§æå®ããŸãããšã¬ã¡ã³ãéã«ã¹ããŒã¹ã¯å ¥ããªãããæ°ãã€ããŠäžãããæ¥ç¶ã»åæã®ã€ãã³ãã¯ãã®èšå®ã«åœ±é¿ãåããŸããããŠãŒã¶ãserver_audit_excl_usersã«æå®ãããŠãããšããŠããserver_audit_incl_usersã®åªå 床ãé«ãããèšé²ã®å¯Ÿè±¡ã«ãªããŸã
- Scope: Global
- Dynamic: Yes
- Data type: String
- Default value: Empty string
audit logãåç §ãã
AWS Management Consoleããaudit logãåç §å¯èœã§ããInstancesããŒãžãããDBã¯ã©ã¹ã¿ãéžæããLogãéžæããŸãã

MariaDB Audit Pluginã®äºããåç¥ã§ããã°ãauditingã«ã€ããŠAuroraãåã£ãŠããã¢ãããŒããšã®å¹Ÿã€ãã®éãã«æ°ã¥ãããšæããŸãã
- Aurora advanced auditingã®ã¿ã€ã ã¹ã¿ã³ãã¯Unix timeãã©ãŒãããã§èšé²ãããŸã
- ã€ãã³ãã¯è€æ°ã®ãã°ãã¡ã€ã«ã«èšé²ããããã°ã¯ã·ãŒã±ã³ã·ã£ã«ã«ã¯äžŠãã§ããŸãããå¿ èŠã«å¿ããŠãã¡ã€ã«ã®çµåãã¿ã€ã ã¹ã¿ã³ããquery_idã䜿çšããŠãœãŒããè¡ããŸããUnixãã䜿ãã®å Žåã¯ä»¥äžã®ã³ãã³ãã§å®çŸåºæ¥ãŸãã cat audit.log.* | sort -tâ,â -k1,1 âk6,6
- ãã¡ã€ã«æ°ã¯DBã€ã³ã¹ã¿ã³ã¹ãµã€ãºã«å¿ããŠå€åããŸã
- ãã¡ã€ã«ã®ããŒããŒã·ã§ã³ã¯100MBæ¯ã«è¡ãããéŸå€ã®å€æŽã¯è¡ãªããŸãã
MySQLãããã€ã°ã¬ãŒã·ã§ã³ããåŸã®Aurora advanced auditingã®æå¹åã¯æ¹æ³ãç°ãªããŸãã Audit logã®èšå®ã¯DBã¯ã©ã¹ã¿åãã®ãã©ã¡ãŒã¿ã°ã«ãŒãã§è¡ãªããŸãã
Auroraãã©ã®ããã«advanced auditingãå®è£ ããã
ç£æ»æ©èœã¯ã³ããŒã·ã£ã«ããŒã¿ãã¹ã§ããªãŒãã³ãœãŒã¹ããŒã¿ããŒã¹äžè¬çã«å©çšåºæ¥ãæ©èœã§ãããã®æ©èœã¯äžè¬çã«ããã©ãŒãã³ã¹ãžå€§ããªåœ±é¿ãäžããŸããç¹ã«ããŒã¿ããŒã¹ã®å©çšçãé«ãå Žåã¯é¡èã§ããAuroraã§ã®å®è£ ã®1ã€ã®ãŽãŒã«ã¯æ§ã ãªæ å ±ãããã©ãŒãã³ã¹ã®ç ç²ãªããŠãŒã¶ã«æäŸããããšã§ãã
ããã©ãŒãã³ã¹ãç¶æããããã«
ããã©ãŒãã³ã¹ã®èª²é¡ãã©ã®æ§ã«è§£æ±ºãããçè§£ããããã«ãç§éã®advanced auditingã®å®è£ ãšMariaDB Audit Pluginã®å®è£ ãæ¯èŒããŠã¿ãŸããMySQL Community Editionã§ã¯native audit logãæäŸããŠããªããããç§ãã¡ã¯æ¯èŒã®ããã«ãã¡ããå©çšããŸãããããŠã MariaDB Audit Pluginã¯ãªãŒãã³ãœãŒã¹ã³ãã¥ããã£ã®äžã§ããããã®å¶çŽãåããäžè¬çãªãªãã·ã§ã³ãšããŠãããããŸãã
MariaDB Audit Pluginã¯ãã·ã³ã°ã«ã¹ã¬ããã§ã·ã³ã°ã«ãã¥ãŒããã¯ã¹ãåŠçãšåã€ãã³ãã®æžãåºãã«å©çšããŸãããã®ãã¶ã€ã³ã¯ããã°ã®æžãåºãã®ããã«ããã¯ã«èµ·å ããããã©ïŒãã³ã¹ã®äœäžãèµ·ãããŸãããã€ãã³ãã®é åºãå³å¯ã«ä¿åããããšãåºæ¥ãŸããããããã®ã¢ãããŒããAuroraã«å©çšãããšãããŒã¿ããŒã¹ãšã³ãžã³ã®æåŸ ããã¹ã«ãŒããããé«ãã¹ã±ãŒã©ããªãã£ã«ãããããã©ãŒãã³ã¹ãžã®ã€ã³ãã¯ããæŽã«å€§ãããªã£ãŠããŸããŸãã
é«ãããã©ãŒãã³ã¹ãç¶æããããã«ãã€ãã³ãåŠçãšã€ãã³ãã®æžãåºãããžãã¯ãåèšèšããŸãããå ¥åé¢ã§ã¯ãã©ããããªãŒãã¥ãŒãä»ã®ã¹ã¬ãããããã¯ããããšç¡ãaudit logãä¿åããããã«å©çšããŸãããåºåé¢ã§ã¯ãã©ããããªãŒãã¥ãŒããè€æ°ã®ãã¡ã€ã«ãžã€ãã³ããæžãåºãããã«ãã«ãã¹ã¬ããã¢ãã«ãå©çšããŠããŸãããã®ãã¡ã€ã«ãåŠçããããšã§ãã€ãã³ãé ã«äžŠãã 1ã€ã®ç£æ»ãã°ãšããŠçæåºæ¥ãŸãã

ãã°ãã©ãŒããã
audit logã¯åã€ã³ã¹ã¿ã³ã¹ã®ããŒã«ã«(ãšãã§ã¡ã©ã«)ãã£ã¹ã¯ã«ä¿åãããŸããåAuroraã€ã³ã¹ã¿ã³ã¹ã¯4ã€ã®ãã°ãã¡ã€ã«ã«æžã蟌ã¿ãŸãã
- Encoding: UTF-8
- ãã¡ã€ã«åãã¿ãŒã³: audit.log.0-3.%Y-%m-%d-%H-%M-rotation
- ä¿åå Žæ: /rdsdbdata/log/audit/ (åãã¹ãæ¯)
- ããŒããŒã·ã§ã³: åãã°ãã¡ã€ã«æ¯ã«100MBã§ãçŸåšã¯å€æŽäžå¯ã4ã€ã®ãã°ãã¡ã€ã«ã®å ããã£ãšã倧ããªãã¡ã€ã«ãµã€ãºã100MBã«ãªã£ãå Žåãã·ã¹ãã ã¯æ°ãããã°ãã¡ã€ã«ã®ã»ãããžããŒããŒã·ã§ã³ãè¡ãªããŸã
- ã¯ãªãŒã³ã¢ãã: ãã£ã¹ã¯ã¹ããŒã¹ãè§£æŸããããã«ããã£ã¹ã¯æ¶è²»éããã¡ã€ã«ã®äžä»£ã«å¿ããŠå€ããªã£ãaudit logãåé€ããŸã
- ãã°ãã©ãŒããã: timestamp,serverhost,username,host,connectionid,queryid,operation,database,object,retcode
| ãã©ã¡ãŒã¿ | 説æ |
| timestamp | ç§ç²ŸåºŠã®ãã°ãèšé²ãããæç¹ã®Unixã¿ã€ã ã¹ã¿ã³ã |
| serverhost | ãã°ãèšé²ããããã¹ãå |
| username | æ¥ç¶ãŠãŒã¶ |
| host | ãŠãŒã¶ã®æ¥ç¶å ãã¹ã |
| connectionid | ãã°ãèšé²ããããã®ã³ãã¯ã·ã§ã³ID |
| queryid | é¢é£ããããŒãã«ãã¯ãšãªãç¹å®ããããã«å©çšããã¯ãšãªIDãTABLEã€ãã³ãã§ã¯è€æ°è¡èšé²ããã |
| operation | èšé²ãããactionã¿ã€ã (CONNECT, QUERY, READ, WRITE, CREATE, ALTER, RENAME, DROP) |
| database | USEã³ãã³ãã§æå®ãããããŒã¿ããŒã¹å |
| object | QUERYã€ãã³ãã§ã¯ãå®è¡ãããã¯ãšãªãTABLEã€ãã³ãã§ã¯ããŒãã«å |
| retcode | ãã°ãèšé²ããããã®ãªã¿ãŒã³ã³ãŒã |
ä»ã®æ¹æ³ãšæ¯èŒãè¡ã£ãå Žå
åè¿°ã®ããã«ãå€ãã®ããŒã¿ããŒã¹ã§ã¯ç£æ»ãã°æ©èœãæäŸãããŠããŸãããç£æ»æ©èœãæå¹ã«ãªã£ãŠãããšããã©ãŒãã³ã¹ãäœäžããŸããåç §ã®ã¿ã®ã¯ãŒã¯ããŒããçšããŠã8xlargeã€ã³ã¹ã¿ã³ã¹äœ¿çšããMariaDB Audit Pluginãæå¹ã«ããMySQL 5.7ãšããã©ãŒãã³ã¹æ¯èŒãè¡ãªããŸããã以äžã®çµæã®ãšãããMySQLã§ã¯Audit logæ©èœãæå¹ã«ãªã£ãŠãããšæ§èœã®å€§å¹ ãªäœäžãèµ·ãã£ãŠããŸããAuroraã§ã®æ§èœäœäžã¯æããããŠããŸããAuroraã§ã¯ã15%ã®äœäžã§æããããŠããŸãããMySQL5.7ã§ã¯65%ã®äœäžãšãªã£ãŠããŸããçµæãšããŠãauditæ©èœãæå¹ã«ãªã£ãŠããå ŽåãAuroraã®ããã©ãŒãã³ã¹ã¯MySQL 5.7ãšæ¯èŒããŠå以äžã«åäžããŸããã

Advanced auditingã¯æ¬æ¥ãããå©çšé ããŸãïŒæ©èœã®è©³çްã¯ããã¥ã¡ã³ããã芧ãã ããã
泚: ãã¡ãã®æ©èœã¯Aurora version 1.10.1ãããå©çšé ããŸã (https://forums.aws.amazon.com/ann.jspa?annID=4349)
â Sirish Chandrasekaran (product manager at Amazon Web Services) (ç¿»èš³ã¯æéãæ åœããŸãããåæã¯ãã¡ã)
Amazon ECS Task Placement Policyã®ã玹ä»
æ¬æ¥ãAmazon ECSã¯ã¯ã©ã¹ã¿äžã«ã©ã®ããã«ããŠã¿ã¹ã¯ãé 眮ããããæ±çšçã«å¶åŸ¡ããããšã®ã§ããæ©èœãçºè¡šããŸããã以åã¯ãç¹å®ã®ãªãœãŒã¹ã®èŠæ±(äŸãã°ãç¹å®ã®ã€ã³ã¹ã¿ã³ã¹ã¿ã€ã)ãæºããã³ã³ããã€ã³ã¹ã¿ã³ã¹äžã«ã¿ã¹ã¯ãé 眮ããå¿ èŠãããæã¯ãã«ã¹ã¿ã ã¹ã±ãžã¥ãŒã©ãäœæããŠãªãœãŒã¹ããã£ã«ã¿ããçºèŠããã°ã«ãŒãåããå¿ èŠããããŸããã
次ã®å³ã¯ãæ°ããã¿ã¹ã¯é 眮åŠçã®æŠèŠã瀺ããŠããŸã:

ããã«ãã£ãŠãã³ãŒããäžåæžãããšãã¿ã¹ã¯ãã©ã®ããã«é 眮ãããããã«ã¹ã¿ãã€ãºããããšãã§ããŸããECSã¯ãã€ã³ã¹ã¿ã³ã¹ã¿ã€ããã¢ãã€ã©ããªãã£ãŸãŒã³ã®æ§ãªçµã¿èŸŒã¿æžã®å±æ§ãä»äžããŠããŸãããå ããŠã«ã¹ã¿ã ã®å±æ§ããµããŒãããŠããŸããäŸãã°ãenvironment=productionãšãã£ã屿§ã§ã³ã³ããã€ã³ã¹ã¿ã³ã¹ãã©ãã«ä»ããããšãã§ãããããã®ãªãœãŒã¹ãèŠã€ããããã«List APIã§æäœããããšããRunTaskãšCreateService APIæäœã§ãããã®ãªãœãŒã¹äžã«ã¿ã¹ã¯ãé 眮ããããšãã§ããŸãã
ãŸããbin packãspreadãšãã£ãplacement strategy (é 眮æŠç¥)ã䜿ã£ãŠãã¿ã¹ã¯ãããã«ã©ãã«é 眮ãããããå®çŸ©ããããšãã§ããŸããããªã·ãŒãé£éãããŠæŽç·Žãããé 眮ãéæããããšãã§ããŸããäŸãã°ãg2.*ã®ã€ã³ã¹ã¿ã³ã¹äžã«ã®ã¿ã¿ã¹ã¯ãé 眮ããã¢ãã€ã©ããªãã£ãŸãŒã³ã«æž¡ã£ãŠå¹ åºã(spread)é 眮ãããããŠåãŸãŒã³ã§ã¯ã¡ã¢ãªãåºæºã«ã¿ã¹ã¯ããªãã¹ãè©°ã蟌ã(bin pack)ãšããããªã·ãŒãäœæã§ããŸãã
ã¯ããã«ãattribute (屿§)ãèŠãŠãŸããããã€ã³ã¹ã¿ã³ã¹ã¿ã€ãçã®çµã¿èŸŒã¿æžã®å±æ§ã䜿ã£ãŠãã³ã³ããã€ã³ã¹ã¿ã³ã¹ãèŠã€ãããã®äžã«ã¿ã¹ã¯ãé 眮ããããšãã§ããŸãã以äžã®äŸã§ã¯ãã¯ã©ã¹ã¿äžã®å šãŠã®t2ã€ã³ã¹ã¿ã³ã¹ãèŠãããšãã§ããŸã:
aws ecs list-container-instances --filter "attribute:ecs.instance-type matches t2.*"
{
"containerInstanceArns": [
"arn:aws:ecs:us-east-1:123456789000:container-instance/40f0e62c-38cc-4cd2-a28e-770fa9796ca1",
"arn:aws:ecs:us-east-1:123456789000:container-instance/eb6680ac-407e-42a6-abd3-1bbf57d7401f",
"arn:aws:ecs:us-east-1:123456789000:container-instance/ecc03e17-6cbd-4291-bf24-870fa9796bf2",
"arn:aws:ecs:us-east-1:123456789000:container-instance/fbc03e17-acbd-2291-df24-4324ab342a24",
"arn:aws:ecs:us-east-1:123456789000:container-instance/f9a69f54-9ce7-4f1d-bc62-b8a9cfe8e8e5"
]
}
ç¶ããŠãus-east-1aã®ã¢ãã€ã©ããªãã£ãŸãŒã³ã«ããt2ã€ã³ã¹ã¿ã³ã¹ã®ã¿ããªã¹ãããŠããŸã:
aws ecs list-container-instances --filter "attribute:ecs.instance-type matches t2.* and attribute:ecs.availability-zone == us-east-1a"
{
"containerInstanceArns": [
"arn:aws:ecs:us-east-1:123456789000:container-instance/40f0e62c-38cc-4cd2-a28e-770fa9796ca1",
"arn:aws:ecs:us-east-1:123456789000:container-instance/eb6680ac-407e-42a6-abd3-1bbf57d7401f",
"arn:aws:ecs:us-east-1:123456789000:container-instance/ecc03e17-6cbd-4291-bf24-870fa9796bf2"
]
}
ã«ã¹ã¿ã 屿§ã¯ECSã®ããŒã¿ã¢ãã«ãèªèº«ã®ã«ã¹ã¿ã ã¡ã¿ããŒã¿çšã«ããŒããªã¥ãŒã®ãã¢ã䜿ã£ãŠæ¡åŒµããŸãã以äžã®äŸã§ã¯ãstack=prodãšãã屿§ãç¹å®ã®ã³ã³ããã€ã³ã¹ã¿ã³ã¹ã«è¿œå ããŠããŸã:
aws ecs put-attributes --attributes name=stack,value=prod,targetId=40f0e62c-38cc-4cd2-a28e-770fa9796ca1,targetType=container-instance
ããã§ãstack=prodãšãã屿§ãä»ããŠããªãã³ã³ããã€ã³ã¹ã¿ã³ã¹ãèŠãããšãã§ããŸã:
aws ecs list-container-instances --filter "attribute:stack != prod"
{
"containerInstanceArns": [
"arn:aws:ecs:us-east-1:123456789000:container-instance/eb6680ac-407e-42a6-abd3-1bbf57d7401f",
"arn:aws:ecs:us-east-1:123456789000:container-instance/ecc03e17-6cbd-4291-bf24-870fa9796bf2",
"arn:aws:ecs:us-east-1:123456789000:container-instance/fbc03e17-acbd-2291-df24-4324ab342a24",
"arn:aws:ecs:us-east-1:123456789000:container-instance/f9a69f54-9ce7-4f1d-bc62-b8a9cfe8e8e5"
]
}
ããã§ã¯ããããã®å±æ§ãã¿ã¹ã¯ã®ã¹ã±ãžã¥ãŒãªã³ã°ã§äœ¿ã£ãŠã¿ãŸããããconstraint (å¶çŽ)ã¯ãECSãã¹ã±ãžã¥ãŒãªã³ã°ã決ããæã«è©äŸ¡ããã屿§ãåºæºãšããã«ãŒã«ã®ããšã§ããconstraint (å¶çŽ)ã¯MemberOfãDistinctInstanceã䜿ã£ãŠã¿ã¹ã¯ãé 眮ããããã«ã¯ã©ã¹ã¿å ã§ã€ã³ã¹ã¿ã³ã¹ã®ãµãã»ãããäœæããŸãã以äžã®äŸã§ã¯ã5ã€ã®ã¿ã¹ã¯ããt2.smallãt2.mediumã§us-east-1dã®ã¢ãã€ã©ããªãã£ãŸãŒã³ã§ã¯ãªãã€ã³ã¹ã¿ã³ã¹ã«èµ·åããŠããŸã:
aws ecs run-task --task-definition myapp --count 5 --placement-constraints type="memberOf",expression="(attribute:ecs.instance-type == t2.small or attribute:ecs.instance-type == t2.medium) and attribute:ecs.availability-zone != us-east-1d"

constraint (å¶çŽ)ã«å ããŠãRunTask APIæäœããæãCreateService APIã䜿ã£ãŠæ°ãããµãŒãã¹ãäœæããæã«ã¯placement strategy (é 眮æŠç¥)ãå©çšå¯èœã§ããæŠç¥ã®ã¿ã€ãã¯å®çŸ©ãããŠããŸãããã«ã¹ã¿ãã€ãºãããçµã¿åãããããšãã§ããŸãããµããŒããããæŠç¥ã¿ã€ãã¯Random (ã©ã³ãã )ãBinpack (è©°ã蟌ã¿)ããããŠSpread (å¹ åºã)ã§ãã以äžã®äŸã§ã¯ãã¢ãã€ã©ããªãã£ãŸãŒã³ã«æž¡ã£ãŠå¹ åºãé 眮ããªãããåãŸãŒã³ã§ã¯ã¡ã¢ãªãåºæºã«è©°ã蟌ã¿ãããŠããŸãã
aws ecs run-task --task-definition myapp --count 9 --placement-strategy type="spread",field="attribute:ecs.availability-zone" type="binpack",field="memory"

åºãé 眮ããŠåãŸãŒã³ã§ã¯ã¡ã¢ãªãåºæºã«è©°ã蟌ãããg2.*ã®ã€ã³ã¹ã¿ã³ã¹ã¿ã€ãã®ã¿ã«ã¿ã¹ã¯ãé 眮ããããšæã£ããšããŸãã
placement policy (é 眮ããªã·ãŒ)ãECSã³ã³ãœãŒã«ã§å®çŸ©ããããã«ãCreate serviceãéžæããŸããTask placementã»ã¯ã·ã§ã³ã®äžã§ãAZ Balanced BinPackãšããplacement template (é 眮ãã³ãã¬ãŒã)ãéžã³ãEditãéžæããŸãã

ããã§ãã³ãã¬ãŒããããŒã¹ã«ããŠã«ã¹ã¿ã ããªã·ãŒãäœæã§ããŸãããã³ãã¬ãŒãã®Constraintã»ã¯ã·ã§ã³ã«ã以äžã远å ããŸã:
attribute:ecs.instance-type=~g2.*

ããã§ãG2ã€ã³ã¹ã¿ã³ã¹äžã®ã¿ã«ã¿ã¹ã¯ãé 眮ããã¿ã¹ã¯ã¯ã¢ãã€ã©ããªãã£ãŸãŒã³ã«æž¡ã£ãŠå¹ åºãããããŠåãŸãŒã³ã§ã¯ã¡ã¢ãªãæãæ®ãå°ãªãã€ã³ã¹ã¿ã³ã¹ã«é 眮ãããµãŒãã¹ãäœãããšãã§ããŸããã
ãŸãšã
æ¬æ¥ãããæ°ãã屿§ãECSãªããžã§ã¯ãã«è¿œå ãããã现ããECSãªãœãŒã¹ã«ã¯ãšãªãããããŠçŽæ¥ã¿ã¹ã¯ãé 眮ããããšãã§ããŸãã
ECSäžã®ã¿ã¹ã¯é 眮ã«ã€ããŠãã詳ããç¥ãããæ¹ã¯ãAmazon ECSéçºè ã¬ã€ãã®ãããã¯ããre:Inventã®ã»ãã·ã§ã³ãã芧äžããã
ã質åãã³ã¡ã³ãããããŸãããã以äžã®ã³ã¡ã³ãæ¬ããå©çšäžããã
åæ: Introducing Amazon ECS Task Placement Policies (翻蚳: SA岩氞)
Amazon Route 53 ããã³ AWS Shield ã䜿çšãã DDoS ãªã¹ã¯ã®è»œæž
2016 幎 10 æåŸåã«ãèå㪠DNS ãããã€ããŒããè€æ°ã®ãµãŒãã¹åŠšå®³æ»æã§æ§æãããå€§èŠæš¡ãªãµã€ããŒæ»æã®æšçãšãªããŸãããæ°åäžã® IP ã¢ãã¬ã¹ããã®å€§éã® DNS åç §ã§æ§æãããæ»æã«ãããå€ãã®ã€ã³ã¿ãŒããããµã€ãããµãŒãã¹ãåç±³ããã³æ¬§å·ã®ãŠãŒã¶ãŒã«å¯ŸããŠå©çšã§ããªããªããŸãããããªã³ã¿ãŒãã«ã¡ã©ãå®¶åºçšãããã¯ãŒã¯ã²ãŒããŠã§ã€ãããã«ã¯ãããŒã¢ãã¿ãŒãšãã£ãããŸããŸãªã€ã³ã¿ãŒãããæ¥ç¶ããã€ã¹ã§æ§æãããããããããã䜿çšããŠããã®åæ£ãµãŒãã¹åŠšå®³ (DDoS) æ»æãå®è¡ããããšèããããŸãããããã®ããã€ã¹ã¯ Mirai ãã«ãŠã§ã¢ã«ææãã1 ç§ãããæ°çŸã®ã¬ãã€ãã®ãã©ãã£ãã¯ãçæããŸãããå€ãã®äŒæ¥ãããã¯ãŒã¯ãæè²ãããã¯ãŒã¯ã¯ããã®ãããªèŠæš¡ã®ããªã¥ãŒã¡ããªãã¯æ»æãåžåããã ãã®ãã£ãã·ãã£ãŒãæã£ãŠããŸããããã®æ»æãããã以åã®ãã®ä»ã®æ»æãåããŠãããŸããŸãªã¿ã€ãã® DDoS æ»æã«å¯ŸããŠããåŒŸåæ§ã®é«ãã·ã¹ãã ãæ§ç¯ã§ããããã«ããããã®æšå¥šäºé ããã¹ããã©ã¯ãã£ã¹ã«ã€ããŠã客æ§ããåœç€Ÿã«åãåããããããŸãããç°¡åãªåçãšããŠã¯ãã¹ã±ãŒã«ãèé害æ§ãããã³ç·©åãçµã¿åãã (詳现ã«ã€ããŠã¯ãAWS Best Practices for DDoS Resiliencyããã¯ã€ãããŒããŒãåç §)ãAmazon Route 53 ããã³ AWS Shield ãå©çšããããšã§ã (詳现ã«ã€ããŠã¯ããAWS Shield â Protect Your Applications from DDoS Attacksããåç §)ã
ã¹ã±ãŒã« â Route 53 ã¯æ°å€ãã® AWS ãšããžãã±ãŒã·ã§ã³ã§ãã¹ãããã倧éã® DNS ãã©ãã£ãã¯ãåžåããããšãã§ããã°ããŒãã«ãªå¯Ÿè±¡é åãäœæããŸããAmazon CloudFront ãš AWS WAF ãå«ããã®ä»ã®ãšããžããŒã¹ã®ãµãŒãã¹ã«ãã°ããŒãã«ãªå¯Ÿè±¡é åãããã倧éã®ãã©ãã£ãã¯ãåŠçããããšãã§ããŸãã
èéå®³æ§ â åãšããžãã±ãŒã·ã§ã³ã«ã¯ãã€ã³ã¿ãŒããããžã®æ°å€ãã®æ¥ç¶ããããŸããããã«ããã倿§ãªãã¹ãå¯èœã«ãªããé害ã®åé¢ãšé»æ¢ã«åœ¹ç«ã¡ãŸãããŸããRoute 53 ã¯ã·ã£ããã«ã·ã£ãŒãã£ã³ã°ãšãšããŒãã£ã¹ãã¹ãã©ã€ãã³ã°ã䜿ã£ãŠå¯çšæ§ãé«ããŸããã·ã£ããã«ã·ã£ãŒãã£ã³ã°ã§ã¯ãå§èšã»ããã®åããŒã ãµãŒããŒããšããžãã±ãŒã·ã§ã³ã®äžæã®ã»ããã«å¯Ÿå¿ããŸãããã®é 眮ã«ãã£ãŠèé害æ§ãåäžããAWS ã®ã客æ§éã®éè€ãæå°åãããŸããå§èšã»ããã® 1 ã€ã®ããŒã ãµãŒããŒãå©çšã§ããªãå Žåãã¯ã©ã€ã¢ã³ãã·ã¹ãã ãŸãã¯ã¢ããªã±ãŒã·ã§ã³ã¯å¥ã®ãšããžãã±ãŒã·ã§ã³ã®ããŒã ãµãŒããŒãå詊è¡ããã¬ã¹ãã³ã¹ãåãåããŸãããšããŒãã£ã¹ãã¹ãã©ã€ãã³ã°ã¯ãæé©ãªå Žæã« DNS ãªã¯ãšã¹ãããã€ã¬ã¯ãããããã«äœ¿çšãããŸããããã¯ãè² è·ã忣ã㊠DNS ã¬ã€ãã³ã·ãŒãæžãã广ããããŸãã
ç·©å â AWS Shield Standard ã¯ãçŸåšã®æãäžè¬çãªæ»æã® 96% ããã客æ§ãä¿è·ããŸããããã«ã¯ãSYN/ACK ãã©ãããåå°æ»æãããã³ HTTP ã¹ããŒãªãŒããå«ãŸããŸããç§ã®æçš¿ã§åã«è¿°ã¹ãããã«ããã®ä¿è·ã¯èªåçãã€ééçã« Elastic Load BalancingãCloudFront ãã£ã¹ããªãã¥ãŒã·ã§ã³ãããã³ Route 53 ãªãœãŒã¹ã«ç¡æã§é©çšãããŸããä¿è· (決å®çãã±ãããã£ã«ã¿ãªã³ã°ãšåªå é äœãããŒã¹ãšãããã©ãã£ãã¯åœ¢æãå«ã) ã¯ãã¹ãŠã® AWS ãšããžãã±ãŒã·ã§ã³ã«ãããã€ããããããæ°ç§ã®ãªãŒããŒãããã§ãã¹ãŠã®ãã©ãã£ãã¯ãæ€æ»ããŸãããã¹ãŠã¯å®å šã«ééçãªæ¹æ³ã§å®è¡ãããŸãã
AWS Shield Advanced ã«ã¯ã远å ã® DDoS ç·©åæ©èœãDDoS Response Team ãžã®å¹Žäžç¡äŒã®ã¢ã¯ã»ã¹ããªã¢ã«ã¿ã€ã ã®ã¡ããªã¯ã¹ãšã¬ããŒããããã³ DDoS ã³ã¹ãä¿è·ãå«ãŸããŸãã詳现ã«ã€ããŠã¯ããDDoS Resiliencyããã¯ã€ãããŒããŒãåç §ããRoute 53 ãšããŒãã£ã¹ãã«ã€ããŠã芧ãã ããã
â Jeff;
æ°æ©èœ â AWS OpsWorks for Chef Automate
AWS OpsWorks ã¯ãChef ã䜿çšããã¢ããªã±ãŒã·ã§ã³ã®èšå®ãšå®è¡ã«åœ¹ç«ã¡ãŸãããã¡ã€ã³åºæèšèª (DSL) ã䜿ã£ãŠãã¢ããªã±ãŒã·ã§ã³ã®ã¢ãŒããã¯ãã£ãšåã³ã³ããŒãã³ãã®èšå®ãå®çŸ©ããã¯ãã¯ããã¯ãèšè¿°ããŸããChef ãµãŒããŒã¯ãèšå®ããã»ã¹ã§äžå¯æ¬ ãªèŠçŽ ã§ãããã®ãµãŒããŒã¯ãã¹ãŠã®ã¯ãã¯ããã¯ãä¿åããåã€ã³ã¹ã¿ã³ã¹ (Chef ã®çšèªã§ã¯ããŒã) ã®ç¶æ
æ
å ±ã远跡ããŸããChef ãµãŒããŒã¯æ°ããèµ·åãããã€ã³ã¹ã¿ã³ã¹ãèšå®ããããšãã¯éèŠãªãã¹ã«ãããããä¿¡é Œæ§ãé«ãå¿
èŠããããŸããå€ãã® OpsWorks ããã³ Chef ãŠãŒã¶ãŒã¯ããã®éèŠãªã¢ãŒããã¯ãã£ã³ã³ããŒãã³ããèªåã§ã€ã³ã¹ããŒã«ããŠç¶æããŠããŸããæ¬çšŒåã¹ã±ãŒã«ã®ç°å¢ã§ã¯ãããã«ããããã¯ã¢ããã埩å
ãããŒãžã§ã³ã®ã¢ããã°ã¬ãŒããªã©ããŠãŒã¶ãŒãåŠçããå¿
èŠããããŸãã
æ°ãã AWS OpsWorks for Chef Automate
仿åãã«ãAWS OpsWorks for Chef Automate ã AWS re:Invent ã¹ããŒãžããéå§ãããŸãããChef Automate ãµãŒããŒã¯ãããã 3 åã®ã¯ãªãã¯ã§èµ·åããæ°å以å
ã«äœ¿çšãéå§ããããšãã§ããŸããChef Supermarket ãã¯ãããTest Kitchen ã Knife ãªã©ã®ã³ãã¥ããã£ããŒã«ããã®ã³ãã¥ããã£ã¯ãã¯ããã¯ã䜿çšã§ããŸããChef Automate ã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ã®ã€ã³ãã©ã¹ãã©ã¯ãã£ã®ã©ã€ããµã€ã¯ã«ãéããŠã€ã³ãã©ã¹ãã©ã¯ãã£ã管çã§ããŸããããšãã°ãæ°ããèµ·åãã EC2 ã€ã³ã¹ã¿ã³ã¹ã¯èªåçã« Chef ãµãŒããŒã«æ¥ç¶ããèªåé¢é£ä»ãã¹ã¯ãªããã䜿çšããŠãæå®ãããã¬ã·ããå®è¡ã§ããŸã (詳现ã«ã€ããŠã¯ããAWS OpsWorks for Chef Automate ã§ã®ããŒãã®èªåçãªè¿œå ããåç
§)ãç»é²ã¹ã¯ãªããã䜿çšããŠãAuto Scaling ã°ã«ãŒããéããŠåçã«äœæããã EC2 ã€ã³ã¹ã¿ã³ã¹ãç»é²ãããªã³ãã¬ãã¹ãµãŒããŒãç»é²ã§ããŸãã
詳ããèŠã
OpsWorks ã³ã³ãœãŒã«ãã Chef Automate ãµãŒããŒãèµ·åããŠã¿ãŸããããéå§ããã«ã¯ã[Go to OpsWorks for Chef Automate] ãã¯ãªãã¯ããŸãã

[Create Chef Automate server] ãã¯ãªãã¯ãããµãŒããŒã«ååãä»ããŸããæ¬¡ã«ãªãŒãžã§ã³ãéžæããé©å㪠EC2 ã€ã³ã¹ã¿ã³ã¹ã¿ã€ããéžæããŸãã

SSH ããŒãã¢ã® 1 ã€ãéžæããããSSH ãããªããã¢ãŠãããŸãã

æåŸã«ããããã¯ãŒã¯ (VPC)ãIAMãã¡ã³ããã³ã¹ãŠã£ã³ããŠãããã³ããã¯ã¢ããã®èšå®ãæå®ããŸãã

[Next] ãã¯ãªãã¯ããèšå®ã確èªããŠã[Launch] ãã¯ãªãã¯ããŸããèµ·åããã»ã¹ã«ãããæé㯠20 åæªæºã§ãããã®æéäžã«ãã¹ã¿ãŒã¿ãŒããããšãšãã« Chef Automate ããã·ã¥ããŒãã®ãµã€ã³ã€ã³èªèšŒæ å ±ãããŠã³ããŒãã§ããŸãã

ãã¹ãŠã® Chef Automate ãµãŒããŒãäžç®ã§è¡šç€ºã§ããŸãã

ãµãŒããŒå (ããã§ã¯ BorkBorkBork) ãã¯ãªãã¯ãã[Open Chef Automate dashboard] ãã¯ãªãã¯ããŸããæ¬¡ã«ãèªèšŒæ å ±ãå ¥åããŠãã°ã€ã³ããŸãã

ããã·ã¥ããŒããæ¬¡ã«ç€ºããŸãã

ããŒãã衚瀺ããŠç®¡çã§ããŸãã

ã¯ãŒã¯ãããŒã管çãã

ã»ãã«ãããŸããŸãªæ©èœããããŸããããã¯ã°ã©ãŠã³ãã§ã¯ãèµ·åããã»ã¹ã«ãã£ãŠ AWS CloudFormation ãã³ãã¬ãŒããåŒã³åºãããŸãããã®ãã³ãã¬ãŒãã«ãããEC2 ã€ã³ã¹ã¿ã³ã¹ãElastic IP ã¢ãã¬ã¹ãããã³ã»ãã¥ãªãã£ã°ã«ãŒããäœæãããŸãã
ä»ãããå©çšå¯èœ
AWS OpsWorks for Chef Automate ã¯ãUS East (Northern Virginia)ãUS West (Oregon)ãããã³ Europe (Ireland) ãªãŒãžã§ã³ã§ä»ãããå©çšã§ããŸããæéã¯ãµãŒããŒã«æ¥ç¶ãããããŒãã®æ°ãšæéæ°ã«åºã¥ããŸãã詳现ã«ã€ããŠã¯ãChef Automate ã®æé衚ããŒãžãåç
§ããŠãã ãããAWS Free Tier ã®äžéšãšããŠã12 ãæåœããæå€§ 10 ããŒããŸã§ã¯ç¡æã§äœ¿çšã§ããŸãã
â Jeff;
æ¯æ¥éèšãããæé衚ã®éç¥ ~ AWSæé衚API
æšå¹ŽãAWS ã®ã客æ§ãšããŒãããŒãããAWS ã®ãµãŒãã¹ã®æéãååŸããããã®ã·ã¹ãã çãªæ¹æ³ãæ±ããèŠæãå¯ããããŸããããã®ããŒãºã«å¯ŸããŠãæšå¹Ž 12 æã« 13 ã® AWS ã®ãµãŒãã¹ã®æéã察象ãšãã AWS ã®æé衚 API ãçºè¡šããŸããããã® API ã¯ãããŠã³ããŒãçšã« JSON ããã³ CSV 圢åŒã§æé衚ããŒã¿ãæäŸããã客æ§ã¯ AWS ã®ãµãŒãã¹ã®æéãåãåãããããšãã§ããŸããæé衚 API ã§ã¯ãAmazon SNS éç¥ãéããŠæé倿Žã®æŽæ°æ å ±ãåãåãããšãã§ããŸãã
AWS æé衚㮠API ã®æ¡åŒµ
éå» 3 ãæã«ãåœç€Ÿã¯ AWS ã®æé衚 API ãµãŒãã¹ãæ¡åŒµãããã¹ãŠã® AWS ã®ãµãŒãã¹ã«ã€ããŠæé衚ããŒã¿ãæäŸããããã«ããŸãããã¯ã©ãŠãããŒã¹ã®ãœãªã¥ãŒã·ã§ã³ã®æ§ç¯ãŸãã¯ã¯ã©ãŠããžã®ãªã³ãã¬ãã¹ã¯ãŒã¯ããŒãã®ç§»è¡ã«é¢ããã³ã¹ãåæãè¡ã£ãŠããã客æ§ã¯ãAWS ã®ãµãŒãã¹ã®å
æ¬çãªæé衚ã«ãããŸã§ãããç°¡åã«ã¢ã¯ã»ã¹ã§ããŸããããã«ãããã客æ§ãšããŒãããŒã¯ãã¯ã©ãŠããœãªã¥ãŒã·ã§ã³ã®äºç®ãäºæž¬ãããã³èšç»ããã詳现ã«ç®¡çã§ããŸããAWS ã®æé衚 API ã®æ¡åŒµã«å ããŠãã客æ§ã¯ãµã€ã³ã¢ããããŠå²åŒæéãæ°ãããµãŒãã¹ãã€ã³ã¹ã¿ã³ã¹ã¿ã€ãã®éç¥ãåãåãããšãã§ããŸããéç¥ã®åä¿¡ã®ãµãã¹ã¯ã©ã€ãã®éã¯ãæŽæ°æ
å ±ãåãåãã¿ã€ãã³ã°ãã«ã¹ã¿ãã€ãºã§ãã1 æ¥ 1 åããŸãã¯æéã®æŽæ°ãçºçãããã³ã«èšå®ã§ããŸãã1 æ¥ 1 åã®éç¥ãéžæããå ŽåãSNS éç¥ã«ã¯ãã®æ¥ã«é©çšããããã¹ãŠã®æé倿Žãå«ãŸããŸããæé衚 API ã«ãµãã¹ã¯ã©ã€ãããå Žåã«åãåã E ã¡ãŒã«éç¥ã®ãµã³ãã«ã次ã«ç€ºããŸãã

æé衚 API ã®äœ¿ãæ¹ãç°¡åã«èŠãŠã¿ãŸããããæåã«ãæé衚 API ãä»ããŠæéæ å ±ã«ã¢ã¯ã»ã¹ãããªãã¡ãŒã€ã³ããã¯ã¹ãã¡ã€ã«ãšãªãã¡ãŒãã¡ã€ã«ãšãã 2 çš®é¡ã®ãã¡ã€ã«ãããŠã³ããŒãããŸãããªãã¡ãŒã€ã³ããã¯ã¹ãã¡ã€ã«ã¯ JSON ãã¡ã€ã«ãšããŠå©çšã§ãããµããŒããããŠãã AWS ã®ãµãŒãã¹ãšãé¢é£ãããµãŒãã¹ãªãã¡ãŒãã¡ã€ã«ã® URL ãèšèŒãããŠããŸãããã®ãªãã¡ãŒãã¡ã€ã«ã§ã¯ãåäžã® AWS ã®ãµãŒãã¹ã«é¢ãã補åãæéãäžèŠ§è¡šç€ºãããCSV ãŸã㯠JSON ãã¡ã€ã«åœ¢åŒãšããŠå©çšã§ããŸããäž¡æ¹ãšãåçŽãªããŠã³ããŒããªã³ã¯ãä»ããŠã¢ã¯ã»ã¹ã§ããç°¡åãªæ¹æ³ã§æé衚ããŒã¿ãã¡ã€ã«ãå ¥æã§ããŸãã
ä»ããæé衚 API ã®äœ¿çšãéå§ãããããã® AWS ã®ãµãŒãã¹ã«ã€ããŠããæé衚ããŒã¿ãå ¥æã§ããŸããAWS ã®æé衚 API ã®æ¡åŒµã«ãããã¹ãŠã® AWS ã®ãµãŒãã¹ã察象ã«ãªã£ãããšã§ãæé衚 API ãžã®ãµãã¹ã¯ã©ã€ãã«ãããææ°ã® AWS ã®å²åŒæéã®æ å ±ãåãåããšãšãã«ãæ°ãããµãŒãã¹ã®ç޹ä»ãåããããšãã§ããŸãã
AWS ã®æé衚 API ã®è©³çްãããã³ API éç¥ãžã®ãµãã¹ã¯ã©ã€ãæ¹æ³ã®è©³çްã«ã€ããŠã¯ããµãŒãã¹ã«ã€ããŠç޹ä»ããŠããåã® AWS ããã°æçš¿ãããã³ AWS ã®æé衚 API ã®äœ¿çšã«é¢ããããã¥ã¡ã³ããåç §ããŠãã ããã
â Tara
äºåã«ã確èªãã ãã â AWSã«ããã2016幎12æ31æ¥ïŒæ¥æ¬æé2017幎1æ1æ¥ïŒã®ãããç§
2016å¹Žæ«æåŸã®æ°ç§ãã«ãŠã³ãããŠã³ããå Žåã¯ãæåŸã«1ç§ã远å ããã®ãå¿ããªãããã«ããŠãã ããïŒ
次åã®ãããç§ïŒéç®27åç®ïŒããUTCïŒäžçæšæºæïŒã®2016幎12æ31æ¥ 23:59:60ãšããŠæ¿å ¥ãããŸãïŒè𳿳šïŒæ¥æ¬æšæºæã§ã¯2017幎1æ1æ¥ 8:59:60ã«ãªããŸãïŒãããã¯å°çäžã§ã®æå»ïŒåå®äžçæïŒãšå€ªéœæïŒå€©ææïŒãšã®ãããå°ããããããã«è¡ããããã®çµæãUTCã§ã¯ä»å¹ŽæåŸã®1åã¯61ç§ããããšã«ãªããŸãã
- åèïŒããããç§ãæ¿å ¥ã®ãç¥ããïŒç·åçïŒ
ååã®ãããç§ã®éã«åºããæ å ±ïŒäºåã«ã確èªãã ãã â AWSã§ã®ãããç§å¯Ÿå¿ïŒã¯åŒãç¶ãæå¹ã§ãä»åãåæ§ã«åŠçãããŸãããå°ãã®éããšé²å±ããããŸã:
AWSèª¿æŽæå»ïŒAWS Adjusted TimeïŒ âãããç§æ¿å ¥ååŸã®24æéã®æéã«ããã£ãŠããããç§ã®1ç§ãå°ããã€åæ£ããŸãïŒUTCã§12æ31æ¥ã®11:59:59ããã2017幎1æ1æ¥12:00:00ãŸã§ïŒãAWSèª¿æŽæå»ãšåå®äžçæã¯ãã®æéãçµäºåŸã«åæããŸããïŒè𳿳šïŒãã®æéã®ïŒç§ããããããã«é ãããããšã§ã远å ãããïŒç§ãé·ãæéã®ãªãã«åæ£ããæ¹æ³ã§ãããããã¯ååãããç§æ¿å ¥æãšåãæåã§ãã詳ããã¯ååã®æ å ±ãã確èªãã ãããïŒ
Microsoft Windows â Amazonã«ãã£ãŠæäŸãããMicrosoft Windowsã®AMIãå©çšããŠããã€ã³ã¹ã¿ã³ã¹ã¯ãAWSèª¿æŽæå»ã«åŸããŸãã
Amazon RDS â 倧倿°ã®Amazon RDS ã€ã³ã¹ã¿ã³ã¹ã¯ ïŒUTCã§èšå®ãããŠããå ŽåïŒâ23:59:59â ã2åèšé²ããŸããããããOracle 11.2.0.2ã11.2.0.3ã12.1.0.1 ã¯AWSèª¿æŽæå»ã«åŸããŸããOracle 11.2.0.4ãš12.1.0.2ã«ã€ããŠè©³çŽ°ãªæ å ±ãå¿ èŠãªå Žåã¯AWSãµããŒãã«ãåãåãããã ããã
ãµããŒããå¿
èŠã§ããïŒ
ãã®ãããç§æ¿å
¥ã«ã€ããŠã質åãããå Žåã¯ãAWSãµããŒãã«ã³ã³ã¿ã¯ãããã ãããEC2ãã©ãŒã©ã ã«ãã¹ãããŠãã ããã
â Jeff;
翻蚳ïŒäžäœç²ãæïŒ@simosakoïŒ
åæïŒhttps://aws.amazon.com/blogs/aws/look-before-you-leap-december-31-2016-leap-second-on-aws/

