æ¬æçš¿ã¯ Migrate an Amazon QLDB Ledger to Amazon Aurora PostgreSQL (èšäºå
¬éæ¥: 2024 幎 7 æ 18 æ¥) ã®ããã°ã翻蚳ãããã®ã§ãã ã ç£æ»ã®ãŠãŒã¹ã±ãŒã¹ã§ Amazon QLDB ãAmazon Aurora PostgreSQL ã«çœ®ãæãã ãã®ããã°ã§ã¯ãããŒã¿å€æŽã«å¯ŸããŠä¿¡é Œã§ããç£æ»ãç¶æããããšãéèŠãªèŠä»¶ã§ããå°åž³ããŒã¿ããŒã¹ã®äžè¬çãªãŠãŒã¹ã±ãŒã¹ã«ãããŠã Amazon Aurora PostgreSQL äºæãšãã£ã·ã§ã³ ã Amazon QLDB ã®åªããä»£æ¿ææ®µã§ããçç±ã説æããŸããã ãã®æçš¿ã§ã¯ãAmazon QLDB éçºè
ã¬ã€ãã® ãã¥ãŒããªã¢ã« ã«ããç±³åœèªåè»ç (DMV) ã®ãµã³ãã«å°åž³ãäŸãšããŠãAmazon QLDB å°åž³ã Amazon Aurora PostgreSQL ã«ç§»è¡ããããã»ã¹ã瀺ããŸãããã®ãœãªã¥ãŒã·ã§ã³ãããªãèªèº«ã®ç§»è¡ã«ãããããŒã¹ãšããŠäœ¿çšããã¹ããŒããšç§»è¡æŠç¥ã«åãããŠå¿
èŠã«å¿ããŠå€æŽããããšãã§ããŸãã ç§»è¡æ±ºå® ããŒã¿ããŒã¹ãç§»è¡ãããšãã¯ãã©ã®ããŒã¿ãç§»è¡ããããæ±ºå®ããå¿
èŠããããŸããäžéšã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ããã¹ãŠã®å±¥æŽããŒã¿ãå«ãããŒã¿ããŒã¹å
šäœãç§»è¡ããããšãæ±ããããŸãããŸããææ°ã®ããŒã¿ (ããšãã°ãéå» 12 ã¶æå) ã®ã¿ãç§»è¡ããå€ãããŒã¿ãã¢ãŒã«ã€ãããã®ãæé©ãªéžæã§ããå ŽåããããŸãããã ããã¢ããªã±ãŒã·ã§ã³ã®ã«ãããªãŒããŒãè¿
éã«è¡ãããã«ææ°ã®ããŒã¿ãç§»è¡ããåŸã§å€ãããŒã¿ãæ°ããããŒã¿ããŒã¹ã«ç§»è¡ããããšã決å®ããäŒæ¥ããããŸããçŸåšãäžæ¬ã§ç§»è¡ã§ããããšã¯ã»ãšãã©ãªããããã«ãããªãŒããŒãŸã§ã®æéãã¿ãŒã²ããããŒã¿ããŒã¹ããœãŒã¹ããŒã¿ããŒã¹ãšåãææ°ã®ç¶æ
ã«ä¿ã€å¿
èŠããããŸãã ãã®èšäºã§ç޹ä»ãããœãªã¥ãŒã·ã§ã³ã¯ãããŒã¹ãšããŠç§»è¡å
ã®å°åž³ããŒã¿å
šäœãã¿ãŒã²ããããŒã¿ããŒã¹ã«ç§»è¡ããç§»è¡å
ã§ç¶ç¶äžã®å€æŽãã«ãããªãŒããŒãŸã§ã¿ãŒã²ããã«ã³ããŒããããšã§ãããã®ãœãªã¥ãŒã·ã§ã³ã¯ã¢ãžã¥ãŒã«åŒãªã®ã§ãç¹å®ã®ç§»è¡æŠç¥ã«åãããŠã«ã¹ã¿ãã€ãºã§ããŸãã ãŸããç§»è¡äžã«ã¿ãŒã²ããããŒã¿ããŒã¹å
ã®ããŒã¿ãã¢ãã«åããå°åž³ããŒã¿ããã®ã¢ãã«ã«é©åããããã«å€æããæ¹æ³ã決å®ããå¿
èŠããããŸããAmazon QLDB ããã¥ã¡ã³ãããŒã¿ã¢ãã«ã¯ããã¹ããããèŠçŽ ãå«ãå¯èœæ§ã®ããè€éã§æ§é åãããããã¥ã¡ã³ãããµããŒãããŸããAmazon QLDB ã®ããŒãã«ã«ã¯ãããã¥ã¡ã³ãæ§é ã®ç°ãªããªããžã§ã¯ããå«ãŸããŠããå ŽåããããŸããå°åž³ã®æè»ãªææžã¢ãã«ããã峿 Œãªãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã¹ããŒãã«ãããã³ã°ããã®ã¯é£ããå ŽåããããŸããããã«ãææžã®æ§é ã¯æéã®çµéãšãšãã«å€åããå¯èœæ§ããããŸããç§»è¡ããã»ã¹ã§ã¯ãç¹å®ã®ææžã®ãã¹ãŠã®ãªããžã§ã³ãåãæ§é ã§ããããšãåæãšããããšã¯ã§ããŸããããã®ãããªèª²é¡ãèãããšãããŒã¿ã JSON ãšã㊠Amazon Aurora PostgreSQL ã«ç§»è¡ããããšãã§ããŸããããã«ããç§»è¡ã倧å¹
ã«ç°¡çŽ åãããŸããããªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã®ããŒã¿ã«ã¢ã¯ã»ã¹ããããã®æãå¹ççãªãªãã·ã§ã³ã§ã¯ãªãå¯èœæ§ããããŸããå¥ã®æ¹æ³ã¯ãç§»è¡äžã«å°åž³ããŒã¿ãæ£èŠåããææžã¢ãã«ããªã¬ãŒã·ã§ãã«ã¢ãã«ã«å€æããæéã®çµéãšãšãã«çºçããææžã¢ãã«ãžã®å€æŽãèæ
®ã«å
¥ããããšã§ãããã®ã¢ãããŒãã¯ããè€éã§ãããå€ãã®ã³ãŒãã£ã³ã°ãå¿
èŠã§ãããäºæããªã倿ãšã©ãŒãçºçããŠç§»è¡ããã»ã¹ãäžæãããåŸåããããŸãããRDBMS ã§ã®ããŒã¿ãžã®ã¢ã¯ã»ã¹æ¹æ³ããã³äœ¿ç𿹿³ã«ãã£ãŠã¯ãããé©åãªéžæãšãªãå ŽåããããŸãã ãã®ãœãªã¥ãŒã·ã§ã³ã§ã¯ãäž¡æ¹ã®ã¢ãããŒããæç€ºããŸããè»äž¡ç»é²ãµã³ãã«ã¢ããªã±ãŒã·ã§ã³ã®å°åž³ããŒã¿ã¯ãªã¬ãŒã·ã§ãã«ã¢ãã«ã«æ£èŠåãããŸãããå°åž³ããã®æ¹èšã¡ã¿ããŒã¿ã¯ Amazon Aurora PostgreSQL ã« JSONB ã¿ã€ããšããŠä¿åãããŸãã ãœãªã¥ãŒã·ã§ã³æŠèŠ ç§»è¡ã¯ããã«ããŒããšç¶ç¶çãªã¬ããªã±ãŒã·ã§ã³ã® 2 ã€ã®ãã§ãŒãºã§å®è¡ãããŸãããã«ããŒãã§ã¯ããœãŒã¹ããŒã¿ããŒã¹ããã¿ãŒã²ããããŒã¿ããŒã¹ãžã®ããŒã¿ã®å¹ççãªäžæ¬ããŒããå®è¡ãããŸãããœãŒã¹ããŒã¿ããŒã¹ã¯ãã¢ããªã±ãŒã·ã§ã³ãã¿ãŒã²ããããŒã¿ããŒã¹ãåãæ¿ããŠäœ¿çšãããŸã§ãã©ãã£ãã¯ãåŠçãç¶ããå¯èœæ§ãããããããã«ããŒãã§ã¯ç§»è¡ãããªãã£ãããŒã¿å€æŽãå«ãŸããŠããå¯èœæ§ããããŸããç¶ç¶çãªã¬ããªã±ãŒã·ã§ã³ãŸãã¯å€æŽããŒã¿ãã£ããã£ïŒCDCïŒãã§ãŒãºã§ã¯ãç¶ç¶çã«å€æŽãååŸããŠã¿ãŒã²ããããŒã¿ããŒã¹ã«ç§»è¡ããã¢ããªã±ãŒã·ã§ã³ãã¿ãŒã²ããããŒã¿ããŒã¹ãåç
§ãããŸã§ãœãŒã¹ãšåãææ°ã®ç¶æ
ã«ä¿ã¡ãŸãã ãã«ããŒããã§ãŒãºã§ã¯ãAmazon QLDB å°åž³ã¯ AWS Step Functions ã¹ããŒããã·ã³ã«ãã£ãŠ Amazon Simple Storage Service (Amazon S3) ã®ãã±ããã« ãšã¯ã¹ããŒã ãããŸãããšã¯ã¹ããŒãã«ã¯ããšã¯ã¹ããŒããéå§ãããæç¹ã®ãã¹ãŠã®ãã©ã³ã¶ã¯ã·ã§ã³ã®ããŒã¿ãå«ãŸããŸãã AWS Glue ãžã§ãã¯ããšã¯ã¹ããŒãããããã¡ã€ã«ããå°åž³ææžã®ãªããžã§ã³ãæœåºãã AWS Database Migration Service (AWS DMS) ã䜿çšã§ãã CSV 圢åŒã«å€æããŸããAWS Glue ãžã§ãã¯ã倿ããã CSV ãã¡ã€ã«ã Amazon S3 ã«æžã蟌ã¿ãŸããAWS DMS ã¿ã¹ã¯ã¯ Amazon S3 ãã CSV ãã¡ã€ã«ãèªã¿åãããã®ããŒã¿ã Aurora PostgreSQL ããŒã¿ããŒã¹ã«ããŒãããŸãããã®èšäºã§ã¯ Amazon Aurora PostgreSQL ãžã®ããŒã¿ç§»è¡ã«ã€ããŠèª¬æããŠããŸãããAWS DMS 㯠æ§ã
ãªã¿ãŒã²ãããšã³ããã€ã³ã ããµããŒãããŠãããããããã§èª¬æããããã»ã¹ãä»ã®ããŒã¿ããŒã¹ãžã®ç§»è¡ã«ãé©çšã§ããŸãã æ¬¡ã®å³ã¯ããœãªã¥ãŒã·ã§ã³ã®ã¢ãŒããã¯ãã£ã瀺ããŠããŸãã ç¶ç¶çãªã¬ããªã±ãŒã·ã§ã³ãã§ãŒãºã§ã¯ãå°åž³ãžã®æ°ããæŽæ°ããã£ããã£ãããã»ãŒãªã¢ã«ã¿ã€ã ã§ã¿ãŒã²ããã® Aurora PostgreSQL ããŒã¿ããŒã¹ã«ç§»è¡ãããŸãããã®ããã»ã¹ã¯ Amazon QLDB ã¹ããªãŒãã³ã° æ©èœã«äŸåããŠããŸãããã®ãœãªã¥ãŒã·ã§ã³ã§ã¯ããšã¯ã¹ããŒãã®æåŸã®å°åž³ãããã¯ãèå¥ããŠããšã¯ã¹ããŒãéå§åŸã«ã³ããããããæåã®ãããã¯ããã¹ããªãŒã ãéå§ã§ããããã«ããŸããæ°ãããã©ã³ã¶ã¯ã·ã§ã³ãå°åž³ã«ã³ãããããããšãAmazon QLDB ã¯ãããã®å€æŽã Amazon Kinesis Data Streams ã«éä¿¡ããŸãã AWS Lambda 颿°ã¯ã次ã®å³ã«ç€ºãããã«ã Amazon Kinesis Data Streams ããã®ã€ãã³ãã䜿çšãããã®ããŒã¿ãã¿ãŒã²ããããŒã¿ããŒã¹ã«æžã蟌ã¿ãŸãã åææ¡ä»¶ ç§»è¡ãœãªã¥ãŒã·ã§ã³ã¯ãã€ã³ãã©ã¹ãã©ã¯ãã£ãã»ããã¢ããããç§»è¡ã«äœ¿çšãããã³ãŒãããããã€ããè€æ°ã® AWS CloudFormation ãã³ãã¬ãŒãã䜿çšããŠãããã€ãããŸããCloudFormation ãã³ãã¬ãŒããšé¢é£ãã¡ã€ã«ã¯ GitHub repo ã§å
¥æã§ããPCã«ããŠã³ããŒãããå¿
èŠããããŸãã以äžã®ã³ãã³ãã§ãããžã§ã¯ãã³ãŒããããŠã³ããŒãããŸãã git clone git@github.com:aws-samples/example-qldb-ledger-migration.git ãããžã§ã¯ãã«ã¯æ¬¡ã®ãã¡ã€ã«ãå«ãŸããŠããŸãã setup.yml â è»äž¡ç»é²å°åž³ãã¿ãŒã²ããã® Aurora PostgreSQL ããŒã¿ããŒã¹ãããã³é¢é£ãã VPC ãããã¯ãŒãã³ã°ããããã€ããŠããŒã¿ãäœæããŸã ledger-export.yml â ã³ã³ããŒãã³ãããããã€ããŠå°åž³ããããŒã¿ããšã¯ã¹ããŒãããŸã ledger-full-migration.yml â AWS Glue ã³ã³ããŒãã³ããš AWS DMS ã³ã³ããŒãã³ãããããã€ããŠããšã¯ã¹ããŒããããå°åž³ããŒã¿ãã¿ãŒã²ããããŒã¿ããŒã¹ã«æœåºã倿ãããŒã (ETL) ããŸã ledger-cdc-migration.yml â Amazon QLDB ã¹ããªãŒãã³ã°çšã® Kinesis Data Stream ãšãã¿ãŒã²ããããŒã¿ããŒã¹ã«å°åž³ã®å€æŽãæžã蟌ãã¹ããªãŒã ã³ã³ã·ã¥ãŒããŒãèšå®ããŸã dmv-postload-ddl.sql â ç§»è¡ã®ãã«ããŒããã§ãŒãºãå®äºããåŸã«ã¿ãŒã²ããããŒã¿ããŒã¹ã«ã€ã³ããã¯ã¹ãäœæããããã® SQL ã¹ããŒãã¡ã³ããå«ãŸããŸã ãœãŒã¹ããŒã¿ããŒã¹ãšã¿ãŒã²ããããŒã¿ããŒã¹ã®äœæ ãã®ãã¢ã³ã¹ãã¬ãŒã·ã§ã³ã§ã¯ããœãŒã¹ãšããŠåäœãã Amazon QLDB å°åž³ãšã¿ãŒã²ãããšããŠæ©èœãã Aurora PostgreSQL ã¯ã©ã¹ã¿ãŒãäœæããVPC ãšé¢é£ãããã¯ãŒã¯ãããŒã¿ããŒã¹èªèšŒæ
å ±ãä¿æãã AWS Secrets Manager ã·ãŒã¯ã¬ãããS3 ãã±ããã AWS Identity and Access Management (IAM) ããŒã«ãããã³ Aurora ã¯ã©ã¹ã¿ãŒãèµ·åããããã«å¿
èŠãªãã®ä»ã®ã³ã³ããŒãã³ããäœæããŸããã»ããã¢ããã«ãããå°åž³ããŒã¿ããŒã¹ã«ããŒã¿ãå
¥åãããAurora PostgreSQL ã¯ã©ã¹ã¿ãŒã«ããŒã¿ããŒã¹ãšã¹ããŒããäœæãããç§»è¡çšã®ããŒã¿ããŒã¹ãŠãŒã¶ãŒãäœæãããŸãã ãã®ãœãªã¥ãŒã·ã§ã³ã¯ RDS Data API ã«äŸåããŠããŸããããã¹ãŠã®ãªãŒãžã§ã³ã§å©çšã§ããããã§ã¯ãããŸããã ãã®è¡š ãåç
§ããŠã䜿çšããŠãããªãŒãžã§ã³ã Data API ããµããŒãããŠããããšã確èªããŠãã ããã ãã®ãœãªã¥ãŒã·ã§ã³ãããªãèªèº«ã®ç§»è¡ã®åºç€ãšããŠäœ¿çšããŠããŠãAmazon QLDB å°åž³ãš Aurora PostgreSQL ã¯ã©ã¹ã¿ãŒããã§ã«ã»ããã¢ãããããŠããå Žåããã®ã»ã¯ã·ã§ã³ã¯ã¹ãããã§ããŸãã AWS CloudFormation ã䜿çšããŠã³ã³ããŒãã³ãããããã€ããã«ã¯ã以äžã®ã¹ããããå®è¡ããŸãã AWS CloudFormation ã³ã³ãœãŒã«ã®ããã²ãŒã·ã§ã³ãã€ã³ã§ ã ã¹ã¿ã㯠ã ãéžæããŸãã ã ã¹ã¿ãã¯ã®äœæ ã ãéžæããã æ°ãããªãœãŒã¹ã䜿çšïŒæšæºïŒ ã ãéžæããŸãã ã ãã³ãã¬ãŒããã¡ã€ã«ã®ã¢ããããŒã ã ãéžæããŸãã ã ãã¡ã€ã«ã®éžæ ã ãéžæããPC äžã® GitHub ãããžã§ã¯ããã setup.yml ãã¡ã€ã«ãéžæããŸãã ã æ¬¡ãž ã ãéžæããŸãã ã ã¹ã¿ãã¯ã®è©³çްãæå® ãããŒãžã§ã ã¹ã¿ãã¯å ã« ledger-migrate-setup ãšå
¥åããŸãã VPC ã® CIDR ãç°å¢å
ã®ä»ã® VPC ãšç«¶åããªãéãããã¹ãŠã®å
¥åãã©ã¡ãŒã¿ã¯ããã©ã«ãã®ãŸãŸã«ããŸããç«¶åããå Žåã¯ã VPCCIDR ã DatabaseSubnetCIDRs ã PublicSubnetCIDRs ã®åãã©ã¡ãŒã¿ã倿ŽããŠãç«¶åããªãããã«ããŠãã ããããŸããããã©ã«ãã® AuroraDBInstanceClass ãã©ã¡ãŒã¿ã調æŽããå¿
èŠãããå ŽåããããŸãããã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ã¿ã€ãããã¹ãŠã®ãªãŒãžã§ã³ã§å©çšã§ããããã§ã¯ãããŸããã ã æ¬¡ãžã ãéžæããŸãã ã ã¹ã¿ãã¯ãªãã·ã§ã³ã®èšå®ã ããŒãžã§ãã æ¬¡ãžã ãéžæããŸãã ã 確èªããŠäœæã ããŒãžã§ãIAM ãªãœãŒã¹ã®äœæã®å¯èœæ§ã確èªãããã§ãã¯ããã¯ã¹ãéžæããã éä¿¡ã ãéžæããŸãã ã¹ã¿ãã¯ã CREATE_COMPLETE ã¹ããŒãžã«ãªã£ãããã åºå ãã¿ããéžæããŠã¹ã¿ãã¯ã®åºåã衚瀺ããŸãããããã®å€ã¯ãç§»è¡ããã»ã¹ã®åŸç¶ã¹ãããã®å
¥åãšããŠäœ¿çšãããŸãã Amazon QLDB ããããŒã¿ããšã¯ã¹ããŒã ç§»è¡ã®æåã®ã¹ãããã¯ããœãŒã¹å°åž³ãã S3 ãã±ããã«ããŒã¿ããšã¯ã¹ããŒãããããšã§ãããšã¯ã¹ããŒãã¯å€æ°ã®ãã¡ã€ã«ã§æ§æãããåãã¡ã€ã«ã«ã¯ JSON 圢åŒã® 1 ã€ä»¥äžã®å°åž³ãããã¯ãå«ãŸããŸã (詳现ã«ã€ããŠã¯ã QLDB ã®ãžã£ãŒãã«ãšã¯ã¹ããŒãåºå ãåç
§ããŠãã ãã)ãäžèŠæš¡ã®å°åž³ã®ãšã¯ã¹ããŒãã§ãæ°æéãããå ŽåããããŸãããšã¯ã¹ããŒãæéãççž®ããããã«ã1 ã€ã®å°åž³ã«å¯ŸããŠè€æ°ã®ãšã¯ã¹ããŒãã䞊è¡ããŠå®è¡ããŠããšã¯ã¹ããŒãããšã«å°åž³ã®äžéšãåŠçããããšãã§ããŸããAmazon QLDB ã¯ããã©ã«ãã§æå€§ 2 ã€ã®åæãšã¯ã¹ããŒãããµããŒãããŸããå°åž³ãéåžžã«å€§ãã(æ°çŸã®ã¬ãã€ã) å Žåã¯ãAWS ãµããŒãã«é£çµ¡ããŠå¶éã®åŒãäžãããªã¯ãšã¹ãããŠãã ããã ãã®ãœãªã¥ãŒã·ã§ã³ã§ã¯ãStep Functions ã䜿çšããŠãšã¯ã¹ããŒããå®è¡ããŸããã¹ããŒããã·ã³ã¯ãå¿
èŠãªæ°ã®åæãšã¯ã¹ããŒãããã©ã¡ãŒã¿ãšããŠåãå
¥ããŸããå°åž³ãã€ãžã§ã¹ããååŸããŠãžã£ãŒãã«ã®æåŸã®ãããã¯çªå·ãååŸããããã䜿çšããŠå°åž³ãåçã«åå²ãããšã¯ã¹ããŒãå
šäœã§äœæ¥ãåçã«åå²ããŸããã¹ããŒããã·ã³ã¯ãšã¯ã¹ããŒããžã§ããéå§ãããã¹ãŠå®äºãããŸã§ã«ãŒãããŸãããã¹ãŠã®ãšã¯ã¹ããŒããžã§ããå®äºãããšãã¹ããŒããã·ã³ã¯åãšã¯ã¹ããŒãã®æåŸã®ãããã¯ã®ãã€ãžã§ã¹ããšãã«ãŒãããã·ã¥ãååŸããAmazon S3 ã«ä¿åããŸããããã«ããããœãŒã¹ã®å°åž³ãåé€ãããåŸã«ãšã¯ã¹ããŒãã¯æå·ã§æ€èšŒãããŸã (ãã®ããã»ã¹ã¯ãã®èšäºã§ã¯èª¬æããŸãã)ã ãšã¯ã¹ããŒããå®è¡ããã«ã¯ããŸã AWS CloudFormation ã䜿çšããŠå¿
èŠãªã³ã³ããŒãã³ãããããã€ããå¿
èŠããããŸãã以äžã®ã¹ããããå®äºããŸãã AWS CloudFormation ã³ã³ãœãŒã«ã®ããã²ãŒã·ã§ã³ãã€ã³ã§ ã ã¹ã¿ãã¯ã ãéžæããŸãã ã ã¹ã¿ãã¯ã®äœæã ãéžæããã æ°ãããªãœãŒã¹ãäœ¿çš (æšæº)ã ãéžæããŸãã ã ãã³ãã¬ãŒããã¡ã€ã«ãã¢ããããŒãã ãéžæããŸãã ã ãã¡ã€ã«ãéžæã ãéžæããã³ã³ãã¥ãŒã¿ãŒäžã® GitHub ãããžã§ã¯ããã ledger-export.yml ãã¡ã€ã«ãéžæããŸãã ã æ¬¡ãžã ãéžæããŸãã ã ã¹ã¿ãã¯ã®è©³çްãæå®ã ããŒãžã§ãã ã¹ã¿ãã¯åã ã« ledger-export ãšå
¥åããŸãã LedgerName ãã©ã¡ãŒã¿ã®å€ã¯ããã©ã«ãå€ ( âvehicle-registrationâ ) ã®ãŸãŸã«ããŠãããŸãã ã æ¬¡ãžã ãéžæããŸãã ã ã¹ã¿ãã¯ãªãã·ã§ã³ã®èšå®ã ããŒãžã§ãã æ¬¡ãžã ãéžæããŸãã ã 確èªããŠäœæã ããŒãžã§ãIAM ãªãœãŒã¹ã®äœæã®å¯èœæ§ã確èªãããã§ãã¯ããã¯ã¹ãéžæããã éä¿¡ã ãéžæããŸãã ã¹ã¿ãã¯ã CREATE_COMPLETE ã¹ããŒãžã«ãªã£ãããStep Functions ã³ã³ãœãŒã«ãéããããã²ãŒã·ã§ã³ãã€ã³ã§ ãã¹ããŒããã·ã³ã ãéžæããŸãã LedgerExporter ã¹ããŒããã·ã³ ãéžæããŸãã ã¹ããŒããã·ã³ã¯ ã€ã³ããããšããŠJSON ãªããžã§ã¯ããåãå
¥ããŸãã æ¬¡ã®ã¹ããããã JSON ãšãã£ã¿ãŒã«å
¥åããŸããAWS ãµããŒããéããŠåæãšã¯ã¹ããŒãã®å¶éãå¢ãããå Žåã¯ã ExportCount ã®å€ãæ°ããå¶éã«å€æŽããŠãã ããã { "LedgerName": "vehicle-registration", "BucketPrefix": "dmv/", "ExportCount": 2 } ã å®è¡ã®éå§ ããéžæããŸãã ã¹ããŒããã·ã³ã¯ã vehicle-registration å°åž³ã®å Žåã¯çŽ 10 åéå®è¡ãããŸãããå°åž³ã倧ããå Žåã¯ããã«é·ãå®è¡ãããŸããå®äºãããšãå®è¡ã¹ããŒã¿ã¹ã¯ã æå ãã«ãªããŸããå®è¡è©³çްããŒãžã® ã°ã©ããã¥ãŒ ã»ã¯ã·ã§ã³ã«ã¯ãã¹ããŒããã·ã³ã®ã¹ããããèŠèŠçã«è¡šç€ºãããŸãã Export ããŒããéžæãã Output ã»ã¯ã·ã§ã³ãããšã¯ã¹ããŒã ID ãã³ããŒããŠãããã¹ããšãã£ã¿ã«ä¿åããŸãããããã¯ãã以éã®ã¹ãããã§å¿
èŠã«ãªããŸãã ãã€ãžã§ã¹ã ããŒããéžæãã LastBlockNum ãš LastBlockTimestamp ã®å€ããåŸã§äœ¿çšã§ããããã«ããã¹ããšãã£ã¿ã«ã³ããŒããŸãã ãšã¯ã¹ããŒããå®äºããŸããããã®ããã»ã¹ã«ããã ledger-export-<ACCOUNT ID> ãšããååã® S3 ãã±ãããäœæãããŸããããã®ãã±ããã«ã¯ãJSON 圢åŒã§ãšã¯ã¹ããŒããããå°åž³ããŒã¿ãå«ã dmv ãšãããã©ã«ãããããŸãããã©ã«ãã®ååã¯ãã¹ããŒããã·ã³ãžã®å
¥åã® BucketPrefix ãã©ã¡ãŒã¿ãŒã§èšå®ãããŸããã ããŒã¿ã®æœåºãšå€æ å°åž³ã®ãšã¯ã¹ããŒããå®äºããããæ¬¡ã®ã¹ãããã¯ããšã¯ã¹ããŒãããã JSON ãã¡ã€ã«ããå°åž³ããŒã¿ãæœåºããããã CSV ãã¡ã€ã«ã«å€æã㊠Amazon Aurora PostgreSQL ã«å¹ççã«èªã¿èŸŒãããšã§ãããã®ãœãªã¥ãŒã·ã§ã³ã¯ãæœåºãšå€æãå®è¡ãã AWS Glue ãžã§ããäœæããŸããAWS Glue 㯠Apache Spark ã䜿çšããŠãšã¯ã¹ããŒãããŒã¿ã»ãããè€æ°ã®ã³ã³ãã¥ãŒãã£ã³ã°ããŒãã«åæ£ããŠåæåŠçããããšã§ãå€§èŠæš¡ãªå°åž³ããã®ããŒã¿ãåŠçããã®ã«å¿
èŠãªæéãççž®ããŸããAWS Glue ãžã§ãã¯ããšã¯ã¹ããŒãã¹ãããã§äœæããã S3 ãã±ãããããšã¯ã¹ããŒããããããŒã¿ãèªã¿åãããã®åºåãããã»ã¹ã«ãã£ãŠäœæãããæ°ãã ETL ãã±ããã«æžã蟌ã¿ãŸãã AWS Glue ãžã§ãã¯ã k å°åž³ã®ããŒãã«ãã¿ãŒã²ããããŒã¿ããŒã¹çšã«èšèšããã¹ããŒãã«å€æããå°åž³ææžã®æ§é ããªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã®è¡ãšåã«ãã©ããåããããã«æ§ç¯ãããŠããŸãããã®ããã»ã¹ã䜿çšããŠå°åž³ãç§»è¡ããã«ã¯ãããŒã¿ã¢ãã«ã«åãã㊠AWS Glue ãžã§ãã® PySpark ã³ãŒãã®äžéšã倿Žããå¿
èŠããããŸãã æœåºãšå€æãå®è¡ããã«ã¯ãAWS CloudFormation ã䜿çšããŠå¿
èŠãªã³ã³ããŒãã³ãããããã€ããŸãã AWS CloudFormation ã³ã³ãœãŒã«ã®ããã²ãŒã·ã§ã³ãã€ã³ã§ ã ã¹ã¿ãã¯ã ãéžæããŸãã ã ã¹ã¿ãã¯ã®äœæã ãéžæããã æ°ãããªãœãŒã¹ãäœ¿çš (æšæº)ã ãéžæããŸãã ã ãã³ãã¬ãŒããã¡ã€ã«ãã¢ããããŒãã ãéžæããŸãã ã ãã¡ã€ã«ãéžæã ãéžæããã³ã³ãã¥ãŒã¿ãŒäžã® GitHub ãããžã§ã¯ããã ledger-full-migration.yml ãã¡ã€ã«ãéžæããŸãã ã æ¬¡ãžã ãéžæããŸãã ãã®ãã³ãã¬ãŒãã¯ãç§»è¡ã®ãã®ãã§ãŒãºã𿬡ã®ãã§ãŒãºã«å¿
èŠãªã³ã³ããŒãã³ãããããã€ããŸãã ã ã¹ã¿ãã¯ã®è©³çްãæå®ã ããŒãžã§ãã ã¹ã¿ãã¯åã ã« ledger-full-migrage ãšå
¥åããŸãã ãšã¯ã¹ããŒãã¹ã¿ãã¯ãšã¯ç°ãªãããã®ãã³ãã¬ãŒãã«ã¯å
¥åãã©ã¡ãŒã¿ãå¿
èŠã§ãã æ¬¡ã®å
¥åãã©ã¡ãŒã¿ãæå®ããŸãã LedgerName ã«ã¯ã ledger-migrate-setup ã¹ã¿ãã¯ã® LedgerName åºåãã©ã¡ãŒã¿ã®å€ãå
¥åããŸãã ExportIds ã«ã¯ãstate 颿°å®è¡ããã³ããŒããexport IDs ããã«ã³ãåºåãã®ãªã¹ã圢åŒã§å
¥åããŸãã ããŒã¹ãã¬ãã£ãã¯ã¹ã®ãšã¯ã¹ããŒã ã«ã dmv/ ãšå
¥åããŸãã ã°ã«ãŒã¯ãŒã«ãŒã¿ã€ã ã«ã G.2X ãšå
¥åããŸãã ã°ã«ãŒã¯ãŒã«ãŒã®æ° ã«ã 2 ãšå
¥åããŸãã ã¬ããªã±ãŒã·ã§ã³ã»ã€ã³ã¹ã¿ã³ã¹ã»ãµãããã ã«ã ledger-migrate-setup ã¹ã¿ãã¯ã® DatabaseSubnets ãã©ã¡ãŒã¿ãããµãããããå
¥åããŸãã ã¬ããªã±ãŒã·ã§ã³ã€ã³ã¹ã¿ã³ã¹ã¯ã©ã¹ ã«ãdms.r6i.large ãšå
¥åããŸãã ã»ãã¥ãªãã£ã°ã«ãŒã ã«ã€ããŠã¯ã ledger-migrate-setup ã¹ã¿ãã¯ã® DatabaseSecurityGroups ãã©ã¡ãŒã¿ããã»ãã¥ãªãã£ã°ã«ãŒããéžæããŸãã ã¿ãŒã²ããããŒã¿ããŒã¹ã·ãŒã¯ã¬ããå ã«ã¯ã ledger-migrate-setup ã¹ã¿ãã¯ã® MigrateDatabaseUserSecretName åºåãã©ã¡ãŒã¿ã®å€ãå
¥åããŸãã ã¿ãŒã²ããããŒã¿ããŒã¹å ã«ã¯ã ledger-migrate-setup ã¹ã¿ãã¯ã® TargetDatabaseName åºåãã©ã¡ãŒã¿ã®å€ãå
¥åããŸãã ã æ¬¡ãžã ãéžæããŸãã ã ã¹ã¿ãã¯ãªãã·ã§ã³ã®èšå®ã ããŒãžã§ãã æ¬¡ãžã ãéžæããŸãã ã 確èªããŠäœæã ããŒãžã§ãIAM ãªãœãŒã¹ã®äœæã®å¯èœæ§ã確èªãããã§ãã¯ããã¯ã¹ãéžæããã éä¿¡ã ãéžæããŸãã CloudFormation ã¹ã¿ãã¯ã®ãããã€ãå®äºããããAWS Glue ã³ã³ãœãŒã«ã«ç§»åããããã²ãŒã·ã§ã³ãã€ã³ã§ ETL ãžã§ã ãéžæããŸãã ledger-dmv-migrate ãžã§ããéžæããã ãžã§ãã®å®è¡ã ãéžæããŸãã ãžã§ãã®ååãéžæããŠããžã§ãã®è©³çްããŒãžãéããŸãã ã å®è¡ ã ã¿ããéžæãããšããžã§ãã®ã¹ããŒã¿ã¹ã衚瀺ãããŸãã ãžã§ããå®äºãããšããã®ã¹ããŒã¿ã¹ã¯ã æå ã ã«ãªããŸãã CloudFormation ãã³ãã¬ãŒã㯠ledger-etl-<AccountId> ãšããååã® S3 ãã±ãããäœæããŸãããAWS Glue ãžã§ãã¯ããã®åºåããã±ããã® dmv ãšãããã©ã«ãã«æžã蟌ã¿ãŸããAmazon S3 ã³ã³ãœãŒã«ãéãã ledger-etl-<AccountId> ãã±ããã«ç§»åããŠã dmv ãã©ã«ããéãããšãã§ããŸãã vehicle-registration å°åž³ã®åããŒãã«ã«å¯Ÿå¿ãããã©ã«ãã®ãªã¹ãã衚瀺ãããŸãããããã®ãã©ã«ãã«ã¯ãããŒãã«å
ã®åé€ãããŠããªããã¹ãŠã®ããã¥ã¡ã³ãã®ææ°ãªããžã§ã³ãå«ãŸããŠããŸããã¿ãŒã²ããã® Aurora PostgreSQL ããŒã¿ããŒã¹ã«æžã蟌ãŸããç£æ»ããŒãã«ã®å
容ãå«ãåå°åž³ããŒãã«çšã®è¿œå ãã©ã«ãããããŸããç£æ»ããŒãã«ã«ã¯ãããããã®å
åž³ããŒãã«å
ã®ãã¹ãŠã®ææžã®å®å
šãªæ¹èšå±¥æŽãå«ãŸããŠããŸãã ãã©ã«ããšãã®ã³ã³ãã³ãã確èªããŠã¿ãŠãã ããã table_counts ãã©ã«ãã«ã¯ãå°åž³ã®åããŒãã«ã®ååãšãããŒãã«å
ã®ããããã®ããã¥ã¡ã³ããªããžã§ã³æ°ãå«ã1ã€ã®ãã¡ã€ã«ãæ ŒçŽãããŸããããã¯ããã¹ãŠã®ã¬ã³ãŒããã¿ãŒã²ããããŒã¿ããŒã¹ã«ç§»è¡ãããããšã確èªããã®ã«åœ¹ç«ã¡ãŸãã ãã«ããŒã¿ç§»è¡ ãã«ããŒã¿ã®ç§»è¡ã§ã¯ãAWS DMS ã䜿çšããŠåã®ã¹ãããã® AWS Glue ãžã§ãã® CSV åºåãèªã¿åããããã Amazon Aurora PostgreSQL ã«ããŒãããŸããAWS DMS ã¯ãããŒã¿ãããŒãããåã«ã¿ãŒã²ããããŒã¿ããŒã¹ã®ããŒãã«ãåãæšãŠãŸãããã®èšäºã§ã¯ã¿ãŒã²ããããŒã¿ããŒã¹ãšã㊠Amazon Aurora PostgreSQL ã䜿çšããŠããŸãããAWS DMS ã§ã¯ AWS Glue ãžã§ãã®åºåã ä»ã®å€ãã®ããŒã¿ããŒã¹ ã«ç§»è¡ã§ããŸãã ç§»è¡ãéå§ããã«ã¯ãæ¬¡ã®æé ãå®è¡ããŸãã AWS DMS ã³ã³ãœãŒã«ã®ããã²ãŒã·ã§ã³ãã€ã³ã§ ã ããŒã¿ããŒã¹ç§»è¡ã¿ã¹ã¯ã ãéžæããŸãã dmv-full-migration task ãéžæããã ã¢ã¯ã·ã§ã³ ãããããããŠã³ã§ã åèµ·å/åé ããéžæããŸãã èŠåãšã㊠ã¿ãŒã²ããããŒã¿ããŒã¹ãžã®ããŒã¿æå€±ã®å¯èœæ§ãããåèµ·å/åé ãéžæããŸãã ç§»è¡ã¿ã¹ã¯ã®å®è¡ãéå§ãããŸãããã®ã¹ããŒã¿ã¹ã«ã¯ãžã§ãã®é²è¡ç¶æ³ãåæ ãããŸãããžã§ããå®äºãããšããã®ã¹ããŒã¿ã¹ã¯ ã ããŒãå®äºã ã«ãªããŸãããã®æç¹ã§ãAmazon QLDB ã® vehicle-registration å°åž³ãããšã¯ã¹ããŒãããããã¹ãŠã®ããŒã¿ã Aurora PostgreSQL ããŒã¿ããŒã¹ã«ç§»è¡ãããŸããæ¬¡ã«ãAurora PostgreSQL ããŒã¿ããŒã¹ã«ã€ã³ããã¯ã¹ãšå¶çŽãäœæããŸãã Amazon RDS ã³ã³ãœãŒã«ã§ãåã®ã»ã¯ã·ã§ã³ã§è¡ã£ãããã«å°åž³ããŒã¿ããŒã¹ã«æ¥ç¶ããŸãã GitHub ãããžã§ã¯ãã® dmv-postload-ddl.sql ãã¡ã€ã«ãããã¹ãŠã®è¡ãã³ããŒããRDS ã¯ãšãªãšãã£ã¿ã«è²Œãä»ããŠãã å®è¡ã ãéžæããŸãã RDS ã¯ãšãªãšãã£ã¿ã䜿çšããŠã次ã®ã¯ãšãªã®ããã€ããå®è¡ããŠãç§»è¡ãããããŒã¿ã確èªããŸãã select * from dmv.person; select * from dmv.person_audit_log; select * from dmv.vehicle; select * from dmv.vehicle_audit_log; select * from dmv.vehicle_registration; select * from dmv.vehicle_registration_audit_log; select * from dmv.drivers_license; select * from dmv.drivers_license_audit_log; ããŒãã«ã® ql_audit ã«ã©ã 㯠PostgreSQL ã® JSON ã¿ã€ãã§ãããã®åã«ã¯ãAmazon QLDB å°åž³ããã®ãªããžã§ã³ã¡ã¿ããŒã¿ãå«ãŸããŠããŸãã æ¬¡ã®ã¯ãšãªãå®è¡ããŠãJSON ãªããžã§ã¯ãã®åã
ã®ãã£ãŒã«ãã«ã¢ã¯ã»ã¹ããæ¹æ³ã確èªããŠãã ããã select person_id, ql_audit->'ql_txid' transaction_id, ql_audit->'ql_txtime' transaction_timestamp from dmv.person_audit_log; ç¶ç¶çãªå€æŽããŒã¿ã®è€è£œ ãã«ããŒã¿ã®ç§»è¡ããã»ã¹ã§ã¯ãå°åž³ãããšã¯ã¹ããŒãããããã¹ãŠã®ããŒã¿ãç§»è¡ãããŸãããã ããå°åž³ã䜿çšããã¢ããªã±ãŒã·ã§ã³ã Aurora PostgreSQL ããŒã¿ããŒã¹ã䜿çšããããã«å€æŽããããŸã§ããšã¯ã¹ããŒãåŸãå°åž³ãåŒãç¶ã䜿çšã§ããŸããç§»è¡ã®æ¬¡ã®ã¹ãããã¯ãå®è¡ããã倿Žããã£ããã£ããã»ãŒãªã¢ã«ã¿ã€ã ã§ Aurora PostgreSQL ããŒã¿ããŒã¹ã«è€è£œããããšã§ãããã®ãœãªã¥ãŒã·ã§ã³ã§ã¯ãAmazon QLDB ã¹ããªãŒãã³ã° æ©èœã䜿çšããŠãå°åž³ã®å€æŽã Kinesis Data Stream ã«ã»ãŒãªã¢ã«ã¿ã€ã ã§éä¿¡ããŸããLambda 颿°ã¯ããŒã¿ã¹ããªãŒã ããã®å°åž³ã€ãã³ããåŠçããŠã RDS Data API ã§ Aurora PostgreSQL ããŒã¿ããŒã¹ã«æžã蟌ã¿ãŸããæ¬¡ã®å³ã¯ããã®ã¯ãŒã¯ãããŒã瀺ããŠããŸãã AWS CloudFormation ã䜿çšããŠå€æŽããŒã¿ã®ã¬ããªã±ãŒã·ã§ã³ã«å¿
èŠãªã³ã³ããŒãã³ãããããã€ããã«ã¯ã以äžã®ã¹ããããå®è¡ããŸãã AWS CloudFormation ã³ã³ãœãŒã«ã®ããã²ãŒã·ã§ã³ãã€ã³ã§ ã ã¹ã¿ãã¯ã ãéžæããŸãã ãã¹ã¿ãã¯ã®äœæã ãéžæããã æ°ãããªãœãŒã¹ãäœ¿çš (æšæº)ã ãéžæããŸãã ããã³ãã¬ãŒããã¡ã€ã«ãã¢ããããŒãã ãéžæããŸãã ããã¡ã€ã«ãéžæã ãéžæããã³ã³ãã¥ãŒã¿ãŒäžã® GitHub ãããžã§ã¯ããã ledger-cdc-migration.yml ãã¡ã€ã«ãéžæããŸãã ãæ¬¡ãžã ãéžæããŸãã ã ã¹ã¿ãã¯ã®è©³çްãæå® ãããŒãžã§ãã ã¹ã¿ãã¯å ãã« ledger-cdc-migrate ãšå
¥åããŸãã æ¬¡ã®ã¹ã¿ãã¯ãã©ã¡ãŒã¿ãå
¥åããŸãã AuroraClusterArn ã«ã¯ã ledger-migrate-setup ã¹ã¿ãã¯ã® AuroraClusterArn åºåãã©ã¡ãŒã¿ã®å€ãå
¥åããŸãã AuroraDatabaseName ã«ã¯ã ledger-migrate-setup ã¹ã¿ãã¯ã® TargetDatabaseName åºåãã©ã¡ãŒã¿ã®å€ãå
¥åããŸãã DatabaseUserSecretArn ã«ã¯ã ledger-migrate-setup ã¹ã¿ãã¯ããã® MigrateDatabaseUserSecretARN åºåãã©ã¡ãŒã¿ã®å€ãå
¥åããŸãã KinesisShardCount ã« 1 ãšå
¥åããŸãã LastFullLoadBlock ã«ã¯ããšã¯ã¹ããŒãã¹ããŒããã·ã³ããååŸãã LastBlockNum ã®å€ãå
¥åããŸãã LedgerName ã«ã¯ã ledger-migrate-setup ã¹ã¿ãã¯ãã LedgerName åºåãã©ã¡ãŒã¿ã®å€ãå
¥åããŸãã LedgerStreamStartTime ã«ã¯ããšã¯ã¹ããŒãã¹ããŒããã·ã³ããååŸãã LastBlockTimestamp ã®å€ãå
¥åããŸãã ãæ¬¡ãžã ãéžæããŸãã ãã¹ã¿ãã¯ãªãã·ã§ã³ã®èšå®ã ããŒãžã§ãã æ¬¡ãžã ãéžæããŸãã ã確èªããŠäœæã ããŒãžã§ãIAM ãªãœãŒã¹ã®äœæã®å¯èœæ§ã確èªãããã§ãã¯ããã¯ã¹ãéžæãã éä¿¡ã ãéžæããŸãã CloudFormation ã¹ã¿ãã¯ã®ãããã€ãå®äºããããAWS Glue ã³ã³ãœãŒã«ã«ç§»åããããã²ãŒã·ã§ã³ãã€ã³ã§ ETL ãžã§ã ãéžæããŸãã ã¹ã¿ãã¯ã®ãããã€ãå®äºãããšãé²è¡äžã®ã¬ããªã±ãŒã·ã§ã³ãã¢ã¯ãã£ãã«ãªããŸãã ã¬ããªã±ãŒã·ã§ã³ã®åäœã確èªããã«ã¯ãAmazon QLDB ã³ã³ãœãŒã«ã® PartiQL ãšãã£ã¿ã«ç§»åããŸãã ã å°åž³ã®éžæ ãããããããŠã³ã¡ãã¥ãŒã§ vehicle-registration å°åž³ãéžæããæ¬¡ã®ã¯ãšãªãå
¥åããŸãã update Person set FirstName = 'Melvin' where GovId = 'P626-168-229-765'; RDS ã¯ãšãªãšãã£ã¿ã«ç§»åããã¿ãŒã²ããããŒã¿ããŒã¹ã«å¯ŸããŠæ¬¡ã®ã¯ãšãªãå®è¡ããŸãã select * from dmv.person_audit_log where gov_id = 'P626-168-229-765' ç£æ»ããŒãã«ã«ã¯ãMelvin Parker ã® 2 ã€ã®ã¬ã³ãŒããå«ãŸããŠããŸããå
ã®ããŒãžã§ã³ã«ã¯ããMelVINããšããã¹ãã«ã®ãã¡ãŒã¹ãããŒã ã0 ã® version ãããã³ INSERT ã衚ã I ã® operation ãå«ãŸããŠããŸããã¢ããããŒããããããŒãžã§ã³ã§ã¯ããã¡ãŒã¹ãããŒã ããMelvinããšä¿®æ£ããã version 㯠1 ã«ãªããUPDATE ã® operation 㯠U ã«ãªã£ãŠããŸãã æ¬¡ã«ã以äžã®ã¯ãšãªãå®è¡ããŸãã select * from dmv.person where gov_id = 'P626-168-229-765' æŽæ°ãããpersonsããŒãã«ã«ã¯ãMelvin Parkerã®ã¬ã³ãŒãã®ææ°ãªããžã§ã³ãå«ãŸããŠããŸããååãšããŒãžã§ã³çªå·ãæžãçããŠãããŸãã åŸçä»ã ãã®èšäºã§äœæãã AWS ã€ã³ãã©ã¹ãã©ã¯ãã£ãåé€ããã«ã¯ãAWS CloudFormation ã³ã³ãœãŒã«ãéãã ledger-cdc-migrate , ledger-full-migrate , ledger-export, setup.yml ã®é ã« åé€ ããŸãã ã¹ã¿ãã¯ã«ã¯ã ledger-export-<AccountId> ãš ledger-etl-<AccountId> ãšãã 2 ã€ã® S3 ãã±ãããæ®ããŸããããã¯ããœãªã¥ãŒã·ã§ã³ãæ¬çªå°åž³ã®ç§»è¡ã«é©åããŠããå Žåã«ãéèŠãª Amazon QLDB å°åž³ããŒã¿ã誀ã£ãŠåé€ãããªãããã«ããããã§ããvehicle-registration å°åž³ã®ç§»è¡ã§ã¯ãåãã±ããã® ã³ã³ãã³ããåé€ ããŠãã ãã±ãããåé€ ããŸãã ãœãªã¥ãŒã·ã§ã³ãå°åž³ã«åãããŠèª¿æŽ ãã®ç§»è¡ãœãªã¥ãŒã·ã§ã³ã¯ãç¬èªã®å°åž³ã§äœ¿çšã§ããããã«èª¿æŽã§ããŸããã«ã¹ã¿ã ã¹ããŒããäœæããã«ã¯ããããžã§ã¯ããœãŒã¹ã® setup.yml ãã³ãã¬ãŒããã¡ã€ã«ã«ãã PrepareTargetDatabase ãªãœãŒã¹ã®ã¹ããŒãå®çŸ©ã倿Žããå¿
èŠããããŸãããŸãã dmv-postload-ddl.sql ãã¡ã€ã«ã倿ŽããŠãã«ã¹ã¿ã ã¹ããŒãã®ãã©ã€ããªã€ã³ããã¯ã¹ãšã»ã«ã³ããªã€ã³ããã¯ã¹ãäœæããå¿
èŠããããŸãã ledger-dmv-migrate ã®AWS Glue ãžã§ãã®PySparkã³ãŒãã§ã¯ã141è¡ç®ãã146è¡ç®ãŸã§ããœãŒã¹å°åž³å
ã®ããŒãã«ã®å€æé¢æ°ãšåºååãã table_converters ãšããPython dictã§å®çŸ©ãããŠããŸãã倿æ©èœã«ãããå°åž³ããã® 1 ã€ã®ææžãªããžã§ã³ã CSV ãšããŠåºåã§ããåã«ãã©ããåããŸãããœãŒã¹ããŒã¿ããŒã¹ãšã¿ãŒã²ããããŒã¿ããŒã¹ã®ããŒã¿ã¢ãã«ã® table_converters ããã³é¢é£ãã倿颿°ã®å®çŸ©ã倿ŽããŸããAWS Glue ãžã§ãã®ãœãŒã¹ã³ãŒãã¯ãGitHub ãããžã§ã¯ãã® ledger-full-migration.yml ãã¡ã€ã«ã® PutGlueJobCodeToS3 ãªãœãŒã¹ã§å®çŸ©ãããŠããŸãã table_converters = { 'Person': { 'name': 'person', 'func': convert_person, 'columns': ['doc_id', 'version', 'person_id', 'first_name', 'last_name', 'dob', 'gov_id', 'gov_id_type', 'address', 'ql_audit'] }, 'Vehicle': { 'name': 'vehicle', 'func': convert_vehicle, 'columns': ['doc_id', 'version', 'vin', 'type', 'year', 'make', 'model', 'color', 'ql_audit'] }, 'VehicleRegistration': { 'name': 'vehicle_registration', 'func': convert_vehicle_registration, 'columns': ['doc_id', 'version', 'vin', 'license_plate_num', 'state', 'city', 'pending_penalty_amt', 'valid_from_dt', 'valid_to_dt', 'primary_owner', 'secondary_owners', 'ql_audit'] }, 'DriversLicense': { 'name': 'drivers_license', 'func': convert_drivers_license, 'columns': ['doc_id', 'version', 'person_id', 'license_plate_num', 'license_type', 'valid_from_dt', 'valid_to_dt', 'ql_audit'] } } Kinesis Data Stream ããã®å°åž³æŽæ°ã䜿çšãã Lambda 颿°ã«ã¯ãåãããžãã¯ãå«ãŸããŠããŸãããããã倿Žããå¿
èŠããããŸãã倿Žããã³ãŒãã¯ãGitHub ãããžã§ã¯ãã® ledger-cdc-migration.yml ãã¡ã€ã«å
ã® StreamConsumerFunction ãªãœãŒã¹ã§å®çŸ©ãããŠããŸãã æåŸã«ã ledger-full-migration.yml ãã¡ã€ã«å
ã® SourceEndpoint ãªãœãŒã¹ã¯ãAWS Glue ãžã§ãã«ãã£ãŠçæããã CSV ãã¡ã€ã«ã®æ§é ãå®çŸ©ãã AWS DMS ãœãŒã¹ãšã³ããã€ã³ããå®çŸ©ããŸãããã®å®çŸ©ã¯ãæ°ããæ§é ã«åãããŠå€æŽããå¿
èŠããããŸããAWS DMS ããŒãã«å®çŸ©åœ¢åŒã®è©³çްã«ã€ããŠã¯ãã AWS DMS ã®ãœãŒã¹ãšããŠã® Amazon S3 ã®å€éšããŒãã«ã®å®çŸ© ããåç
§ããŠãã ããã ç§»è¡ãå®è¡ããåã«ãã¿ãŒã²ããããŒã¿ããŒã¹ãããã¯ã¢ããããŠãã ãããç§»è¡ãœãªã¥ãŒã·ã§ã³ã¯ã¿ãŒã²ããããŒã¿ããŒã¹ã®ããŒãã«ãåãæšãŠããšã©ãŒãçºçããŠãç§»è¡å
šäœãããŒã«ããã¯ããŸããã ãµããªãŒ ãã®æçš¿ã§ã¯ãAmazon QLDB éçºè
ã¬ã€ãã®ãã¥ãŒããªã¢ã«ã«ããè»äž¡ç»é²ãµã³ãã«ããŒã¿ããŒã¹ã䜿çšããŠãAmazon QLDB å°åž³ã Amazon Aurora PostgreSQL ã«ç§»è¡ããããã®ãœãªã¥ãŒã·ã§ã³ã玹ä»ããŸããããã®ãœãªã¥ãŒã·ã§ã³ãç¬èªã®å°åž³ã®ç§»è¡ã«é©å¿ãããããšãã§ããã¢ãžã¥ã©ãŒèšèšã«ããç§»è¡æŠç¥ã«åãããŠèª¿æŽã§ããŸãã ãã®ãœãªã¥ãŒã·ã§ã³ã®è©³çްãç§»è¡èšç»ã«ã€ããŠã¯ãAWS ã®æ
åœè
ã«ãåãåãããã ããã èè
ã«ã€ã㊠Dan Blaner ã¯ãå°åž³ãšãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ãå°éãšããããªã³ã·ãã«ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ãã§ãã圌ã¯åŠã¶ããšãç©äºãçè§£ããããšãä»ã®äººãç©äºãçè§£ããã®ãå©ããããšã楜ããã§ããŸããäŒã¿ã¯ããŒã¹ã匟ãã仲ã®è¯ãåéãš bad music äœããæ¥œããã§ããŸãã