æ¬èšäºã¯ã Integrate Amazon Aurora MySQL and Amazon Bedrock using SQL ã翻蚳ãããã®ã§ãã翻蚳ã¯Sr. Database Solutions Architectã®æå±±ãæ
åœããŸããã çµç¹ã¯å€§éã®ããŒã¿ããªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã«ä¿åããŠããããããšã³ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããããã«çæAIã®åºç€ã¢ãã«ã䜿ã£ãŠãããã®ããŒã¿ã»ãããè£åŒ·ããæç¢ºãªåæ©ããããŸãããã®èšäºã§ã¯ã Amazon Aurora Machine Learning ã䜿çšããŠã Amazon Aurora MySQLäºæãšãã£ã·ã§ã³ ãçæAIã¢ãã«ãšçµ±åããæ¹æ³ãæ¢ããŸããAmazon Bedrockãšã®Amazon Aurora MySQLã®çµ±åã«ã€ããŠèª¬æãã2ã€ã®ãŠãŒã¹ã±ãŒã¹ã玹ä»ããŸã: ãµãŒãã¹æ¹åã®ããã®ããŒã¿ããŒã¹æ
å ±ã®è£å® â Amazon Bedrockã§çæããè£è¶³æ
å ±ãAuroraããŒã¿ããŒã¹ã«ä¿åãããªã¢ã«ã¿ã€ã ã«ã¢ã¯ã»ã¹å¯èœã«ããŸã çç£æ§ã®åäž â AuroraããŒã¿ããŒã¹ã«ä¿åãããé·ãææžãAmazon Bedrockã§èŠçŽããŸã Amazon Aurora MySQLã§MLã䜿çšããä»ã®æ¹æ³ã«ã€ããŠã¯ãã Build a generative AI- powered agent assistance application using Amazon Aurora and Amazon SageMaker JumpStart ããåç
§ããŠãã ããã Solution overview çæäººå·¥ç¥èœ (çæAI)ã¯ãäŒè©±ãç©èªãç»åãåç»ã鳿¥œãªã©ãæ°ããã³ã³ãã³ããã¢ã€ãã¢ãçæã§ããAIã®äžçš®ã§ãã åºç€ã¢ãã« (FM)ã¯ãå¹
åºãäžè¬åãããã©ãã«ä»ããããŠããªãããŒã¿ã§èšç·Žãããæ©æ¢°åŠç¿(ML)ã¢ãã«ã§ãããããã¯æ§ã
ãªäžè¬çãªã¿ã¹ã¯ãå®è¡ã§ããŸãã å€§èŠæš¡èšèªã¢ãã« (LLM)ã¯FMã®äžçš®ã§ããLLMã¯èŠçŽãããã¹ãçæãåé¡ããªãŒãã³ãšã³ãã®äŒè©±ãæ
å ±æœåºãªã©ã®èšèªããŒã¹ã®ã¿ã¹ã¯ã«ç¹åããŠããŸãã ãã®ãœãªã¥ãŒã·ã§ã³ã¯ã以äžã®äž»èŠã³ã³ããŒãã³ãã«åºã¥ããŠããŸã: Amazon Aurora â Amazon Aurora ã¯ãMySQLåã³PostgreSQLãšäºææ§ã®ããã¯ã©ãŠãåãã®ãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ç®¡çã·ã¹ãã (RDBMS)ã§ããAuroraã¯åçšããŒã¿ããŒã¹ã«å¹æµããããã©ãŒãã³ã¹ãšå¯çšæ§ãã10åã®1ã®ã³ã¹ãã§æäŸããŸããAurora MLã䜿ãã°ãåŸæ¥ã®SQLããã°ã©ãã³ã°èšèªã§ããŸããŸãªML ã¢ã«ãŽãªãºã (MLããŒã¹ã®äºæž¬ãçæAIãææ
åæãªã©)ãåŒã³åºãããšãã§ããŸããAurora MLã䜿ãããã«MLã®çµéšã¯å¿
èŠãããŸãããAurora MLã¯ãAurora ãšAWS ML ãµãŒãã¹ãšã®éã§ãã«ã¹ã¿ã ã€ã³ãã°ã¬ãŒã·ã§ã³ãæ§ç¯ãããããŒã¿ãç§»åããããããããšãªããç°¡åã§æé©åããå®å
šãªçµ±åãæäŸããŸããAuroraã¯FMãå«ãããŸããŸãªMLã¢ã«ãŽãªãºã ã®ããã« Amazon SageMaker ãŸã㯠Amazon Bedrock ãã ææ
åæ ã®ããã« Amazon Comprehend ãåŒã³åºãã®ã§ãã¢ããªã±ãŒã·ã§ã³ããã¯ãããã®ãµãŒãã¹ãçŽæ¥åŒã³åºãå¿
èŠã¯ãããŸããã Amazon Bedrock â Amazon Bedrockã¯ãAI21 LabsãAnthropicãCohereãMetaãMistral AIãStability AIãAmazonãªã©ã®äž»èŠAIäŒæ¥ãã髿§èœã®åºç€ã¢ãã«(FM)ã1ã€ã®APIã§éžæã§ãããå®å
šãããŒãžããµãŒãã¹ã§ãããŸããã»ãã¥ãªãã£ããã©ã€ãã·ãŒã責任ããAIãçµã¿èŸŒãŸããçæAIã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®å¹
åºãæ©èœã»ãããæäŸããŸããAmazon Bedrockã¯ãFMã䜿ã£ãŠçæAIã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããã³ã¹ã±ãŒãªã³ã°ããç°¡åãªæ¹æ³ãæäŸããŸããAmazon Bedrockã¯ãµãŒããŒã¬ã¹ãªã®ã§ãã€ã³ãã©ã¹ãã©ã¯ãã£ã管çããå¿
èŠããªããæ¢ã«æ
£ã芪ããã AWS ãµãŒãã¹ã䜿ã£ãŠãå®å
šã«çæAIæ©èœãã¢ããªã±ãŒã·ã§ã³ã«çµ±åããã³ãããã€ã§ããŸãã æ¬¡ã®å³ã¯ãAmazon Aurora MySQLã§MLã䜿çšããäŸã瀺ããŠããŸã 以äžã®ã»ã¯ã·ã§ã³ã§ã¯ãAmazon Aurora MySQLããSQLã¯ãšãªã䜿ã£ãŠAmazon Bedrockããªã¢ã«ã¿ã€ã ã§åŒã³åºãæ¹æ³ã宿ŒããŠãããŸããæé æŠèŠã¯ä»¥äžã®éãã§ã: 1. æ°ããã¯ã©ã¹ã¿ãŒãäœæ 2. ããŒã¿ããŒã¹ãšããŒã¿ããŒã¹ãŠãŒã¶ãŒãäœæ 3. Auroraã¯ã©ã¹ã¿ãŒã®ããã® AWS Identity and Access Management (IAM) ããŒã«ãšããªã·ãŒãäœæ 4. IAMããŒã«ãAuroraã¯ã©ã¹ã¿ãŒã«å²ãåœãŠã 5. Amazon BedrockããŒã¹ã¢ãã«ãæå¹ã«ããŠAurora MLãäœ¿çš 6. Amazon Bedrockã«ã¢ã¯ã»ã¹ãã颿°ãäœæ Prerequisites ãã®æçš¿ã§ã¯ã AWS管çã³ã³ãœãŒã« ã®æäœã«æ
£ããŠããäºãåæãšããŠããŸãã ãŸããAWS ã¢ã«ãŠã³ãã§ä»¥äžã®ãªãœãŒã¹ãšãµãŒãã¹ãæå¹ã«ãªã£ãŠããå¿
èŠããããŸã: Amazon Bedrockãšã®çµ±åã䜿çšããã«ã¯ãAmazon Aurora MySQL 3.06.0以éã®ããŒãžã§ã³ãå¿
èŠã§ãã Aurora MySQLã¯ã©ã¹ã¿ãŒã¯ã«ã¹ã¿ã DBã¯ã©ã¹ã¿ãŒãã©ã¡ãŒã¿ã°ã«ãŒãã䜿çšããå¿
èŠããããŸãã ããŒã«ãšæš©éãäœæããã«ã¯ãIAMãžã®ã¢ã¯ã»ã¹æš©ãå¿
èŠã§ãã Amazon Bedrockã§FMã䜿çšããããã®ã¢ã¯ã»ã¹æš©ãå¿
èŠã§ãã ãã®æçš¿ã§ã¯ã Amazon Titan Text G1 â Express (amazon.titan-text-express-v1)ãš Anthropic Claude 3 Haiku (anthropic.claude-3-haiku-20240307-v1:0)ã䜿çšããŠããŸããåãªãŒãžã§ã³ã§ãµããŒããããŠããModelã«é¢ããŠã¯ã Model support by AWS Region ãåç
§ããŠãã ããã MLãµãŒãã¹ã¯ãAurora MySQLã¯ã©ã¹ã¿ãŒãšåãAWS ãªãŒãžã§ã³ ã§å®è¡ãããŠããå¿
èŠããããŸãã Aurora MySQLã¯ã©ã¹ã¿ãŒã® ãããã¯ãŒã¯æ§æ ããAmazon Bedrockã®ãšã³ããã€ã³ããžã®æ¥ç¶ãèš±å¯ããŠããå¿
èŠããããŸãã(Amazon Bedrockãšã³ããã€ã³ãã«å¯Ÿã㊠https ã¢ã¯ã»ã¹ãèš±å¯) Create an Aurora MySQL cluster æåã®ã¹ãããã¯ãAurora MySQLã¯ã©ã¹ã¿ãŒãäœæããããšã§ããå®å
šãªæé ã«ã€ããŠã¯ãã Creating and connecting to an Aurora MySQL DB cluster ããšã Using Amazon Aurora machine learning with Aurora MySQL ããåç
§ããŠãã ããããã®äŸã§äœ¿çšããç¹å®ã®æ§æãªãã·ã§ã³ãããã€ã玹ä»ããŸã: Auroraã³ã³ãœãŒã«ã§ã Amazon Bedrock ããµããŒãããŠãããªãŒãžã§ã³ ã«æ°ããã¯ã©ã¹ã¿ãŒãäœæããŸã(äŸ: us-east-1)ã è£è¶³: 2024幎5æçŸåšãæ±äº¬ãªãŒãžã§ã³(ap-northeast-1)ã§ã¯Anthropic Claude v3 Haikuã ãµããŒãããŠããŸãã ã ãšã³ãžã³ãªãã·ã§ã³ ã§ã¯ã Aurora(MySQLäºæ) ãéžæããŸãã ãšã³ãžã³ããŒãžã§ã³ ã¯ãAmazon Bedrockçµ±åã䜿çšããããã« Aurora MySQL 3.06.0 ã䜿çšããŸãã èšå®ãªãã·ã§ã³ ã§ã¯ã Auroraã¹ã¿ã³ããŒã ãŸã㯠Aurora I/Oæé©å ã®ãããããéžæããŸãã ã€ã³ã¹ã¿ã³ã¹ã®èšå®ã§ã¯ã ã€ã³ã¹ã¿ã³ã¹ã¯ã©ã¹ ãéžæããŸãã Amazon Bedrockãšçµ±åããã«ã¯ãåŸã§ãã©ã¡ãŒã¿ã°ã«ãŒãã倿Žããå¿
èŠããããã ãã®ã¿ã€ãã³ã°ã§ custom DB cluster parameter group ãäœæãé©çšããŸãã Auroraã¯ã©ã¹ã¿ãŒãäœæããŸãã ã¯ã©ã¹ã¿ãŒãããããžã§ãã³ã°ãããåŸãAmazon Bedrockãšã®çµ±åã«åããŠã¯ã©ã¹ã¿ãŒãæºåããããã®äžé£ã®SQLã³ãã³ããå®è¡ããå¿
èŠããããŸãã MySQLã³ãã³ãã©ã€ã³ã¯ã©ã€ã¢ã³ã ã䜿çšããŠã rds_superuser_role æš©éãæã€ãŠãŒã¶ãŒ( ãã¹ã¿ãŒãŠãŒã¶ãŒ ãªã©)ãšããŠAuroraã¯ã©ã¹ã¿ãŒã«ãã°ã€ã³ã以äžã®ã³ãŒããå®è¡ããŸããAmazon Bedrock ML颿°ã䜿çšããã«ã¯ã AWS_BEDROCK_ACCESS ããŒã¿ããŒã¹ããŒã«ããŠãŒã¶ãŒã«ä»äžããå¿
èŠããããŸãã mysql> create database bedrockdb; /*** Sample Database ***/ Query OK, 1 row affected (0.03 sec) mysql> create user `bedrock_user`@`%` identified by 'password'; /*** Sample User ***/ Query OK, 0 rows affected (0.30 sec) mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, INDEX, CREATE ROUTINE, ALTER ROUTINE, EXECUTE ON bedrockdb.* TO `bedrock_user`@`%`; Query OK, 0 rows affected (0.05 sec) mysql> GRANT AWS_BEDROCK_ACCESS TO `bedrock_user`@`%`; Query OK, 0 rows affected (0.01 sec) mysql> SHOW GRANTS FOR `bedrock_user`@`%`\G *************************** 1. row *************************** Grants for bedrock_user@%: GRANT USAGE ON *.* TO `bedrock_user`@`%` *************************** 2. row *************************** Grants for bedrock_user@%: GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, EXECUTE, CREATE ROUTINE, ALTER ROUTINE ON `bedrockdb`.* TO `bedrock_user`@`%` *************************** 3. row *************************** Grants for bedrock_user@%: GRANT `AWS_BEDROCK_ACCESS`@`%` TO `bedrock_user`@`%` ããã§ãããŒã¿ããŒã¹ãŠãŒã¶ãŒãAmazon Bedrockãšçµ±åããæºåãã§ããŸãããæ¬¡ã«ãAurora MySQL DBã¯ã©ã¹ã¿ãŒã«Amazon Bedrockãžã®ã¢ã¯ã»ã¹æš©ãä»äžããçºã«IAMããŒã«ãäœæããŸãã Create an IAM role and policy for the Aurora cluster Aurora MLãAmazon BedrockãšããŸã飿ºã§ããããã«ããã«ã¯ããŸã Aurora ã¯ã©ã¹ã¿ãŒãAmazon Bedrockã¢ãã«ãšéä¿¡ã§ããããã«ããIAMããªã·ãŒãäœæããå¿
èŠããããŸãã以äžã®æé ãå®è¡ããŠãã ãã: IAMã³ã³ãœãŒã«ã§ãããã²ãŒã·ã§ã³ãã€ã³ããã ããªã·ãŒ ããéžæããŸãã ã ããªã·ãŒã®äœæ ããéžæããŸãã ã ã¢ã¯ã»ã¹èš±å¯ãæå® ãããŒãžã§ãã ãµãŒãã¹ãéžæ ãããã Bedrock ããéžæããŸãã ããªã·ãŒãšãã£ã¿ã§ãã Bedrock ããå±éããã èªã¿åã ãã®äžã«ããã InvokeModel ããéžæããŠããã®ã¢ã¯ã·ã§ã³ãèš±å¯ããŸãã ããªãœãŒã¹ãã§ã¯ãã ãã¹ãŠ ããŸãã¯ã ç¹å® ããéžæããŸããããŒã ãå¿
èŠãšããAmazon Bedrockå
ã®ã¢ãã«ã«ã®ã¿ã¢ã¯ã»ã¹ãèš±å¯ããããšããã¹ããã©ã¯ãã£ã¹ã§ãã(ããã§ã¯ãã¢çšã«ãã¹ãŠãéžæããŠããŸã) ã æ¬¡ãž ããéžæããŸãã ã ããªã·ãŒå ãã«ã¯ãããªã·ãŒã®åå(äŸ: AuroraBedrockInvokeModel )ãå
¥åããŸãã ã ããªã·ãŒã®äœæ ããéžæããŸãã IAMã³ã³ãœãŒã«ã§ãããã²ãŒã·ã§ã³ãã€ã³ããã ããŒã« ããéžæããŸãã ã ããŒã«ã®äœæ ããéžæããŸãã ã ä¿¡é Œããããšã³ãã£ãã£ã¿ã€ã ãã§ã¯ãã AWSã®ãµãŒãã¹ ããéžæããŸãã ããµãŒãã¹ããŸãã¯ããŠãŒã¹ã±ãŒã¹ãã§ã¯ãã RDS ããéžæããŸãã ã RDS â Add Role to Database ããéžæããŸãã ã æ¬¡ãž ããéžæããŸãã åã®æé ã§äœæããIAMããªã·ãŒãããã®äœæäžã®IAMããŒã«ã«å²ãåœãŠãŸãã ã èš±å¯ããªã·ãŒ ãã§ãäœæããã AuroraBedrockInvokeModel ãããªã·ãŒãæ€çŽ¢ããŠéžæããŸãã ã æ¬¡ãž ããéžæããŸãã ã ããŒã«ã®è©³çް ãã»ã¯ã·ã§ã³ã§ãããŒã«å(ãã®äŸã§ã¯ AuroraBedrockRole )ãšèª¬æãå
¥åããŸãã äœæããIAMããŒã«ã確èªãã AuroraBedrockInvokeModel ããªã·ãŒãä»äžãããŠããããšã確èªããŸãã ã ããŒã«ãäœæ ããéžæããŠããŒã«ãäœæããŸãã Assign the IAM role to the Aurora cluster 次ã«ãäœæãã AuroraBedrockRole ãšããIAMããŒã«ãAmazon Aurora MySQLã¯ã©ã¹ã¿ãŒã«å²ãåœãŠãå¿
èŠããããŸãã以äžã®æé ã«åŸã£ãŠãã ãã: Amazon RDSã³ã³ãœãŒã«ã§ãAurora MySQLã¯ã©ã¹ã¿ãŒã®è©³çްããŒãžã«ç§»åããŸãã ã æ¥ç¶ãšã»ãã¥ãªã㣠ãã¿ãã§ãã IAMããŒã«ã®ç®¡ç ãã»ã¯ã·ã§ã³ãæ¢ããŸãã ã ãã®ã¯ã©ã¹ã¿ãŒã«è¿œå ãã IAM ããŒã«ãéžæ ãã§ãäœæãã AuroraBedrockRole ããŒã«ãéžæã ã ããŒã«ã®è¿œå ããéžæããŸãã äœæãããã®IAMããŒã«ã®ARNããAurora MySQLã¯ã©ã¹ã¿ãŒã«é¢é£ä»ããããŠããã«ã¹ã¿ã DBã¯ã©ã¹ã¿ãŒãã©ã¡ãŒã¿ã°ã«ãŒãã® aws_default_bedrock_role ãã©ã¡ãŒã¿ã«è¿œå ããŸãã ã倿Žãä¿åããéžæããŠèšå®ãä¿åããŸãã ãã©ã¡ãŒã¿ã®ç¢ºèªã¯ãAWS ãããžã¡ã³ãã³ã³ãœãŒã«ãAWS ã³ãã³ãã©ã€ã³ã€ã³ã¿ãŒãã§ã€ã¹ (AWS CLI) ã®ããããã䜿çšã§ããŸãããŸããæ¬¡ã®äŸã®ããã« MySQL ã¯ã©ã€ã¢ã³ãããŒã«ã䜿çšããŠç¢ºèªããããšãã§ããŸã: mysql> show global variables like 'aws_default%'; +-----------------------------+--------------------------------------------------+ | Variable_name | Value | +-----------------------------+--------------------------------------------------+ | aws_default_bedrock_role | arn:aws:iam::012345678910:role/AuroraBedrockRole | | aws_default_comprehend_role | | | aws_default_lambda_role | | | aws_default_s3_role | | | aws_default_sagemaker_role | | +-----------------------------+--------------------------------------------------+ 5 rows in set (0.03 sec) ããã§ã¯ã©ã¹ã¿ãŒã¯ãAmazon Bedrock å
ã®ã¢ãã«ãåŒã³åºãããšãã§ããããã«ãªããŸããã Use Aurora ML Aurora MLã¯ãAmazon BedrockãSageMakerãAmazon Comprehendãªã©ãSQL ã³ãã³ãã䜿ã£ãŠAWS MLãµãŒãã¹ãšçŽæ¥é£æºã§ããAuroraã®æ©èœã§ãã Amazon Bedrock FMsã®äžèЧã¯ãAWS CLIã§ç¢ºèªããäºãã§ããŸã: $ aws bedrock list-foundation-models --query '*[].[modelName,modelId]' --out table ------------------------------------------------------------------------------- | ListFoundationModels | +---------------------------------+-------------------------------------------+ | Titan Text Large | amazon.titan-tg1-large | | Titan Image Generator G1 | amazon.titan-image-generator-v1:0 | | Titan Image Generator G1 | amazon.titan-image-generator-v1 | | Titan Text Embeddings v2 | amazon.titan-embed-g1-text-02 | | Titan Text G1 - Lite | amazon.titan-text-lite-v1:0:4k | | Titan Text G1 - Lite | amazon.titan-text-lite-v1 | ... | Claude | anthropic.claude-v2:1:200k | | Claude | anthropic.claude-v2:1 | | Claude | anthropic.claude-v2 | | Claude 3 Sonnet | anthropic.claude-3-sonnet-20240229-v1:0 | | Claude 3 Haiku | anthropic.claude-3-haiku-20240307-v1:0 | +---------------------------------+-------------------------------------------+ ããŒã¹ã¢ãã«ã䜿çšããåã«ã察象ã®ã¢ãã«ã Amazon Bedrockã³ã³ãœãŒã« ã§æå¹ã«ãªã£ãŠããããšã確èªããŠãã ããã æå¹ã«ãªã£ãŠããªãå Žåã¯ã察象㮠ã¢ãã«ãžã®ã¢ã¯ã»ã¹ã远å ããŠäžããã ããã§ãAurora ããçŽæ¥Amazon Bedrockã«ã¢ã¯ã»ã¹ã§ãã颿°ãäœæã§ããããã«ãªããŸããã以äžã®äŸã¯ã Amazon Titan Text G1 â Express ãš Anthropic Claude 3 Haiku ã¢ãã«ã䜿çšããŠAmazon BedrockãåŒã³åºã颿°ãçæããæ¹æ³ã瀺ããŠããŸãããããã®ã¢ãã«ã¯TEXTã¢ããªãã£ããµããŒãããŠããŸããå¥ã®ã¢ãã«IDã䜿çšãããå Žåã¯ã ããŒã¹ã¢ãã«ID ã®ã¢ãã«IDãšã Amazon Bedrockã§ãµããŒããããŠããã¢ãã«ã®ãªã¹ã ãåç
§ããŠãã ããã 1. ããã§ã¯ãå
çšäœæãã bedrock_user ã¢ã«ãŠã³ãã§ãã°ã€ã³ããŸãã 2. ããŒã¿ããŒã¹ã bedrockdb ã«åãæ¿ããããŒã«ã AWS_BEDROCK_ACCESS ã«èšå®ããåŸã«é¢æ°ãäœæããŸãã颿°ã®å®çŸ©ã¯ GitHubãªããžã㪠ã«çšæãããŠããŸãã mysql> use bedrockdb Database changed mysql> SELECT CURRENT_ROLE(); +----------------+ | CURRENT_ROLE() | +----------------+ | NONE | +----------------+ 1 row in set (0.00 sec) mysql> SET ROLE AWS_BEDROCK_ACCESS; Query OK, 0 rows affected (0.00 sec) mysql> SELECT CURRENT_ROLE(); +--------------------------+ | CURRENT_ROLE() | +--------------------------+ | `AWS_BEDROCK_ACCESS`@`%` | +--------------------------+ 1 row in set (0.00 sec) 3, Amazon Titan Text G1 -Express ãåŒã³åºã颿°ãäœæããŸã: CREATE FUNCTION invoke_titan (request_body TEXT) RETURNS TEXT ALIAS AWS_BEDROCK_INVOKE_MODEL MODEL ID 'amazon.titan-text-express-v1' /*** model ID ***/ CONTENT_TYPE 'application/json' ACCEPT 'application/json'; 4. Anthropic Claude 3 Haiku ãåŒã³åºã颿°ãäœæããŸã: CREATE FUNCTION claude3_haiku (request_body TEXT) RETURNS TEXT ALIAS AWS_BEDROCK_INVOKE_MODEL MODEL ID 'anthropic.claude-3-haiku-20240307-v1:0' CONTENT_TYPE 'application/json' ACCEPT 'application/json'; 5. ãå°çã®éžå°ãšæµ·ã®å²åã¯äœã§ãã?ããšè³ªåããAmazon Titanã®é¢æ°ãåŒã³åºããŸã: select json_unquote(json_extract(invoke_titan( '{ "inputText": "What is the proportion of land and sea on Earth?", "textGenerationConfig": { "maxTokenCount": 1024, "stopSequences": [], "temperature":0, "topP":1 } }' ),"$.results[0].outputText")) as bedrock_response\G 6. Anthropic Claude 3ã®é¢æ°ãåŒã³åºããŸã: select json_unquote(json_extract(claude3_haiku( '{ "anthropic_version": "bedrock-2023-05-31", "max_tokens": 1024, "messages": [{"role": "user","content": [{"type": "text", "text": "What is the proportion of land and sea on Earth?"}]}], "temperature": 0, "top_p": 0, "top_k":1, "stop_sequences": [] }' ),"$.content[0].text")) as response_from_bedrock\G Amazon Bedrockã³ã³ãœãŒã«ã® Amazon Bedrock ãã¬ã€ã°ã©ãŠã³ã ã§è³ªåã®åºåã確èªããããšã§ãã¬ã¹ãã³ã¹ã®æ£ç¢ºæ§ãæ€èšŒã§ããŸãã詳现ã«ã€ããŠã¯ãã Anthropicâs Claude 3 Haiku model is now available on Amazon Bedrock ããåç
§ããŠãã ããã ããã§ãAmazon Bedrockã䜿çšããããã®Auroraã¯ã©ã¹ã¿ãŒã®æºåãå®äºããŸããã æ¬¡ã®ã»ã¯ã·ã§ã³ã§ã¯ãçµ±åãããAmazon Bedrockãšæ¢åã®ããŒã¿ã䜿çšãã2ã€ã®ãŠãŒã¹ã±ãŒã¹ã瀺ããŸãã Aurora ã¯ã©ã¹ã¿ãŒã Amazon Bedrock ãšéä¿¡ã§ããªãå Žå㯠ã Aurora ã¯ã©ã¹ã¿ãŒã Amazon Bedrock ãšéä¿¡ã§ããããã«ãããã¯ãŒã¯æ§æã調æŽããå¿
èŠããããããããŸããããã®èšå®æ¹æ³ã®è©³çްã«ã€ããŠã¯ã Enabling network communication from Amazon Aurora MySQL to other AWS services , Create a VPC endpoint åã³ Use AWS PrivateLink to set up private access to Amazon Bedrock ãåç
§ããŠãã ããã ãã®æçš¿ã§ã¯ãVPC ãš Amazon Bedrock éã®ãã©ã€ããŒãæ¥ç¶ã䜿çšããããã«ã bedrock-runtime endpoint ãéžæããŠããŸãã Use case 1: Complement existing data with Amazon Bedrock æ¢åã®ããŒã¿ãAmazon Bedrockãšãªã³ã¯ãããããšã§ãã©ã®ããã«æ
å ±ãè£å®ã§ããããèŠãŠã¿ãŸãããããã®äŸã§ã¯ããŸã ããŒã¿ããŒã¹ã«ããŒã¿ããªãã®ã§ãæ€èšŒç®çã§æ°ããããŒãã«ãäœæããŠããŒã¿ã远å ããŸããããŒãã«å®çŸ©ã¯ GitHubãªããžããª ã§æäŸãããŠããŸãã ãµã³ãã«ããŒãã« ãäœæããŸã: CREATE TABLE `t_bedrock` ( `id` int NOT NULL AUTO_INCREMENT, `country` varchar(52) NOT NULL DEFAULT '', `information` varchar(2048), `modify_user` varchar(255) NOT NULL DEFAULT (current_user()), `updated_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_update_time` (`updated_time`) ) ENGINE=InnoDB AUTO_INCREMENT=1; ãµã³ãã«ããŒã¿ ãæ¿å
¥ããŸã(ããã¯æ¢ã«ããŒã¿ããŒã¹ã«æ ŒçŽãããŠããæ¢åã®ããŒã¿ãšæ³å®ããŠãã ãã): insert into t_bedrock(country) values('India'),('China'),('United States'),('Indonesia'),('Brazil'),('Mexico'),('Japan'); ããŒã¿ãããŒãã«ã«æ ŒçŽãããŠããããšã確èªããŸãã ããŒãã«ããããŒã¿ãååŸããããã®ããã·ãŒãžã£ãäœæãããã®ããŒã¿ã«å¯ŸããŠé¢æ°ãå®è¡ããŸããããã·ãŒãžã£ã®å®çŸ©ã¯ GitHubãªããžããª ã§æäŸãããŠããŸã: DROP PROCEDURE IF EXISTS get_bedrock_claude3_haiku; DELIMITER // Create Procedure get_bedrock_claude3_haiku() BEGIN DECLARE done INT DEFAULT FALSE; DECLARE v_id INT; DECLARE v_country varchar(52); DECLARE cursor_bedrock CURSOR FOR SELECT id,country FROM t_bedrock order by id; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN cursor_bedrock; loop_cursor: LOOP FETCH cursor_bedrock INTO v_id,v_country; IF done THEN LEAVE loop_cursor; END IF; set @question = concat('\"messages\": [{\"role\": \"user\",\"content\": [{\"type\": \"text\", \"text\": \"What is the most popular food in ', v_country,' ?\"}]}]}\'),\"$.content[0].text\")) as response_from_bedrock'); set @parameter = '(\'{\"anthropic_version\": \"bedrock-2023-05-31\",\"max_tokens\": 1024,\"temperature\": 0,\"top_p\": 0, \"top_k\":1, \"stop_sequences\": [],'; set @request = concat("update t_bedrock,(select json_unquote(json_extract(claude3_haiku",@parameter,@question,") response set information = response.response_from_bedrock where id =",v_id); PREPARE update_stmt FROM @request; EXECUTE update_stmt; DEALLOCATE PREPARE update_stmt; END LOOP; CLOSE cursor_bedrock; END// DELIMITER ; æ¢åã®ããŒãã«ããããŒã¿ãååŸãã察象ã®ããŒã¿ã«åºã¥ããŠAmazon Bedrockã«ãªã¯ãšã¹ããéä¿¡ããã³ã³ãã³ãã«å¿ããŠããŒã¿ãååŸããããŒãã«ã®å
å®¹ãæŽæ°ããããã·ãŒãžã£ãå®è¡ããŸã: mysql> call get_bedrock_claude3_haiku(); ãã®çµæãããŒã¿ã«å¯ŸããŠè£å®çãªæ
å ±ãååŸã§ããŠããã¯ãã§ãã æ¬¡ã®äŸã§ã¯ãç°ãªãåœã
ã§äººæ°ã®é£ã¹ç©ããªã¹ãã¢ããããçµæã確èªããŠããŸã: mysql> select * from t_bedrock limit 1\G äŸãã°ãããªããæ
è¡ãµã€ããéå¶ããŠããŠãèªèº«ã®ãµã€ãäžã§äº¬éœã®èгå
ã¹ããããåèæ
å ±ãšããŠæ²èŒãããå Žåãæ¬¡ã®äŸã®ããã«è³ªåå
容ã倿Žããã°ããŒã¿ãååŸã§ããŸãã䜿çšäŸã«ãã£ãŠå¿
èŠãšãªãããŒã¿ã¯ç°ãªããŸãã®ã§ãããŒãºã«åãããŠè³ªåãã«ã¹ã¿ãã€ãºããŠã¿ãŠãã ãã: select json_unquote(json_extract(claude3_haiku( '{ "anthropic_version": "bedrock-2023-05-31", "max_tokens": 1024,"temperature": 0,"top_p": 0,"top_k":1,"stop_sequences": [], "messages": [{"role": "user","content": [{"type": "text", "text": "Please tell me 3 recommended sightseeing spots in Kyoto."}]}] }'),"$.content[0].text")) as response_from_bedrock\G Anthropic Claude 3 ã¯ãè±èªãã¹ãã€ã³èªãæ¥æ¬èªãã¯ãããšããè€æ°ã®èšèªããµããŒãããŠããŸããäŸãã°ã次ã®ãªã¯ãšã¹ãã§ã¯ã京éœã®ãããã芳å
ã¹ããã5ãæãæ¥æ¬èªã§å°ããŠããŸãã select json_unquote(json_extract(claude3_haiku( '{ "anthropic_version": "bedrock-2023-05-31", "max_tokens": 1024,"temperature": 0,"top_p": 0,"top_k":1,"stop_sequences": [], "messages": [{"role": "user","content": [{"type": "text", "text": "京éœã§ãå§ãã®èгå
å°ãæããŠäžãã"}]}] }'),"$.content[0].text")) as response_from_bedrock\G 次ã®äŸãšããŠãããŒã¿ããŒã¹ã«æ ŒçŽãããé·ãæç« ãã©ã®ããã«èŠçŽãããã確èªããŸãããã Use case 2: Summarize existing data with Amazon Bedrock ããŒã¿ããŒã¹ã«æ ŒçŽãããé·ãæç« ãèŠçŽããããã« Amazon Bedrock ã䜿ããšãèªã¿ã«ããã軜æžãããŸããèŠçŽæ©èœã䜿ãã°ãçæéã§æŠèŠãææ¡ããäºãã§ããŸããããã«è©³çްãå¿
èŠãªå Žåã¯ããªãªãžãã«ã®ããŒã¿ãèªãããšãã§ããŸãããã®äœ¿çšäŸã¯ã補åããµãŒãã¹ã®ã¬ãã¥ãŒã®èŠçŽãããµããŒãæ
åœè
åãã®ã±ãŒã¹ããŒãã®èŠçŽãªã©ã«æŽ»çšãããŠããŸãã ãã®äœ¿çšäŸã§ã¯ãã Whatâs New with AWS? ãããAWSãµãŒãã¹ã®ææ°ãªãªãŒã¹ã«é¢ãããã¥ãŒã¹ãååŸããããŒã¿ããŒã¹ã«ä¿åããŸããæåã«ä¿åãããããŒã¿ãã補ååã®ã¿ãååŸããåŠçãè¡ããŸããæ¬¡ã«ããªãªãŒã¹ããŒãã®èŠçŽãè¡ããŸããããŒãã«å®çŸ©ã¯ã GitHubãªããžããª ã§æäŸãããŠããŸãã æ¬¡ã®æé ãå®äºããŠãã ãã: 1. ããŒã¿ãä¿åããããã® ãµã³ãã«ããŒãã« ãäœæããŸã: CREATE TABLE `t_feed` ( `id` int NOT NULL AUTO_INCREMENT, `title` varchar(1024) DEFAULT NULL, `link` varchar(2048) DEFAULT NULL, `product` varchar(512) DEFAULT NULL, `description` text, `summary` text, -- `modify_user` varchar(255) DEFAULT (current_user()) COMMENT 'optional column', `updated_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_update_time` (`updated_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; å¥ã®ã¿ãŒããã«ã«ãŠã次㮠ã¹ã¯ãªãã ãå®è¡ããŠãµã³ãã«ããŒã¿ãæ¿å
¥ããŸã (Python 3.7以éãå¿
èŠã§ããâpython3 feed.pyâã§å®è¡ã§ããŸã): import pymysql import feedparser import re # if module is not installed, please install it. ex: pip install -r requirements.txt myfeed = feedparser.parse("https://aws.amazon.com/about-aws/whats-new/recent/feed/") db = pymysql.connect( host='<Aurora MySQL Writer Endpoint>', user='<user name>', password='<password>', database='<sample schema (ex: bedrockdb)>', cursorclass=pymysql.cursors.DictCursor) with db: with db.cursor() as cur: for item in myfeed['items']: title = item.title link = item.link description = re.sub(r'<[^>]+>', '', item.description).replace("'", "\\'").replace('"', '\\"').replace('\n', ' ') print (title) print (link) print (description) cur.execute("INSERT INTO t_feed (title, link, description) VALUES (%s, %s, %s)", (title, link, description)) db.commit() print ('Import rss Succesfull!') ã¹ã¯ãªãããå®è¡ãããšãããã¥ã¡ã³ããæ¬¡ã®ããã«ä¿åãããŸã: mysql> select count(*) from t_feed; select * from t_feed limit 1\G ããã§ãdescriptionã«ã©ã ãã補ååãååŸããproductã«ã©ã ã«æ ŒçŽããæºåãã§ããŸããã descriptionã«ã©ã ãã補ååã®ã¿ã远å ããããã® ããã·ãŒãžã£ ãäœæããŸã: DROP PROCEDURE IF EXISTS get_rss_product_by_bedrock_claude3_haiku; DELIMITER // CREATE PROCEDURE `get_rss_product_by_bedrock_claude3_haiku`() BEGIN DECLARE done INT DEFAULT FALSE; DECLARE v_id INT; DECLARE v_description text; DECLARE cursor_description CURSOR FOR SELECT id,description FROM t_feed order by id; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN cursor_description; loop_cursor: LOOP FETCH cursor_description INTO v_id,v_description; IF done THEN LEAVE loop_cursor; END IF; set @question = concat('\"messages\": [{\"role\": \"user\",\"content\": [{\"type\": \"text\", \"text\": \"Please pick up product name only from the following description. ', v_description,' ?\"}]}]}\'),\"$.content[0].text\")) as response_from_bedrock'); set @parameter = '(\'{\"anthropic_version\": \"bedrock-2023-05-31\",\"max_tokens\": 1024,\"temperature\": 0,\"top_p\": 0, \"top_k\":1, \"stop_sequences\": [],'; set @request = concat("update t_feed,(select json_unquote(json_extract(claude3_haiku",@parameter,@question,") response set product = response.response_from_bedrock where id =",v_id); PREPARE summarize_stmt FROM @request; EXECUTE summarize_stmt; DEALLOCATE PREPARE summarize_stmt; END LOOP; CLOSE cursor_description; END// DELIMITER ; Amazon Bedrockã䜿ã£ãŠãdescriptionã«ã©ã ãã補ååãååŸããããã«ããã·ãŒãžã£ãå®è¡ããŸã: mysql> call get_rss_product_by_bedrock_claude3_haiku(); ããã·ãŒãžã£ãå®è¡ããåŸãproductã«ã©ã ã«ããŒã¿ã远å ãããããšã確èªã§ããŸãã ããã«ãããã³ã³ãã³ãããã容æã«çè§£ããäºãã§ããŸãã mysql> select * from t_feed limit 1\G descriptionã«ã©ã ãèŠçŽãããå Žåã¯ã質åããæ¬¡ã®èª¬æã200æå以å
ã§èŠçŽããŠãã ãããã®ãããªãã®ã«å€æŽããæŽæ°å¯Ÿè±¡ã®ã«ã©ã ãsummaryã«å€æŽããå¿
èŠããããŸããããã«ãããå説æãçŽ200æåã§èŠçŽããããããäœæ¥å¹çãåäžããŸãã descriptionã«ã©ã ã®èŠçŽãsummaryã«ã©ã ã«è¿œå ããããã® ããã·ãŒãžã£ ãäœæããŸã: DROP PROCEDURE IF EXISTS get_rss_summary_by_bedrock_claude3_haiku; DELIMITER // CREATE PROCEDURE `get_rss_summary_by_bedrock_claude3_haiku`() BEGIN DECLARE done INT DEFAULT FALSE; DECLARE v_id INT; DECLARE v_description text; DECLARE cursor_description CURSOR FOR SELECT id,description FROM t_feed order by id; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN cursor_description; loop_cursor: LOOP FETCH cursor_description INTO v_id,v_description; IF done THEN LEAVE loop_cursor; END IF; set @question = concat('\"messages\": [{\"role\": \"user\",\"content\": [{\"type\": \"text\", \"text\": \"Please summarize the following description in 200 characters or less. ', v_description,' ?\"}]}]}\'),\"$.content[0].text\")) as response_from_bedrock'); set @parameter = '(\'{\"anthropic_version\": \"bedrock-2023-05-31\",\"max_tokens\": 1024,\"temperature\": 0,\"top_p\": 0, \"top_k\":1, \"stop_sequences\": [],'; set @request = concat("update t_feed,(select json_unquote(json_extract(claude3_haiku",@parameter,@question,") response set summary = response.response_from_bedrock where id =",v_id); PREPARE summarize_stmt FROM @request; EXECUTE summarize_stmt; DEALLOCATE PREPARE summarize_stmt; END LOOP; CLOSE cursor_description; END// DELIMITER ; Amazon BedrockããèŠçŽããŒã¿ãååŸããããã«ããã·ãŒãžã£ãå®è¡ããŸã: mysql> call get_rss_summary_by_bedrock_claude3_haiku(); ããã·ãŒãžã£ãå®è¡ããåŸãsummaryã«ã©ã ã«ããŒã¿ã远å ãããããšã確èªã§ããŸã: mysql> select * from t_feed limit 1\G 次ã®äŸã§ã¯ãdescriptionã«ã©ã ãšsummaryã«ã©ã ã®æåæ°ããã§ãã¯ããŠããŸã: mysql> select id,description,summary,length(description),length(summary) from t_feed limit 10; group_concatã䜿ãäºã§ãè€æ°ã®ããŒã¿ãçµã¿åãããŠèŠçŽãäœæããããšãå¯èœã§ããæ¬¡ã®åºåã¯ã20è¡ããããŒã¿ãååŸããèŠçŽãäœæããäŸã§ãããµã³ãã«ã³ãŒã㯠GitHubãªããžããª ã§æäŸãããŠããŸãã set session group_concat_max_len = 1048576; set session aurora_ml_inference_timeout = 30000; -- If the data size is small, there is no particular need to limit it. However, if there is a large amount of data, it is limited because PREPARED STATEMENTS can cause errors. -- set @all = (select group_concat(description) from t_feed); set @all = (select group_concat(top20.description) from (select description from t_feed limit 20) top20); set @question = concat('\"messages\": [{\"role\": \"user\",\"content\": [{\"type\": \"text\", \"text\": \"Please categorize and tell me what kind of services improvement being talked about based on the following content. ', @all,' ?\"}]}]}\'),\"$.content[0].text\")) as response_from_bedrock'); set @parameter = '(\'{\"anthropic_version\": \"bedrock-2023-05-31\",\"max_tokens\": 1024,\"temperature\": 0,\"top_p\": 0, \"top_k\":1, \"stop_sequences\": [],'; set @request = concat("select json_unquote(json_extract(claude3_haiku",@parameter,@question); PREPARE select_stmt FROM @request; EXECUTE select_stmt\G DEALLOCATE PREPARE select_stmt; æ¥æ¬èªçã®ã Whatâs New with AWS? ãããAWSãµãŒãã¹ã®ææ°ãªãªãŒã¹ã«é¢ãããã¥ãŒã¹ãååŸããäºã§ãUse case 2ã§èª¬æããããã«æ¥æ¬èªã§èŠçŽãäœæããäºãå¯èœã§ãã Considerations ãã¢ã§ã¯SQLã³ãã³ããå®è¡ãããš1å以å
ã«å¿çãè¿ã£ãŠããŸãããããã¯ã³ã³ããã¹ãã®çްãããéã«ãã£ãŠãå€ãããŸããæ¬çªç°å¢ã«å°å
¥ããåã«ããã®æŠå¿µå®èšŒããèªèº«ã®å®è£
ã«é©å¿ãããããšãéèŠã§ãã倧éã®åŠçãè¡ãäºå®ã®å Žåã¯ã Amazon Bedrockã®ã¯ã©ãŒã¿ ãšã Amazon Bedrockã®äŸ¡æ Œèšå® ã«é¢ããŠãåç
§ããããšããå§ãããŸãã Clean up äœæãããªãœãŒã¹ã䜿çšããå¿
èŠããªããªã£ãå Žåã¯ãçµäºæã«åé€ããŠãã ãã: ããŒã¿ããŒã¹ããäžèŠãªãªããžã§ã¯ããšãŠãŒã¶ãŒãåé€ããŸãã Aurora MLã䜿çšããå¿
èŠããªããªã£ãããã¯ã©ã¹ã¿ãŒã®äœ¿çšãç¶ããå Žåã¯ãMLé¢é£ã®ãã©ã¡ãŒã¿ãŒ( aws_default_bedrock_role )ãšIAMããŒã«ãã¯ã©ã¹ã¿ãŒããåé€ã§ããŸãã Amazon Bedrockã«ã¢ã¯ã»ã¹ããããã«äœæããIAMããŒã«ãäžèŠã«ãªã£ãå Žåã¯ãåé€ã§ããŸãããŸããå¿
èŠã«å¿ããŠãããã¯ãŒã¯èšå®ãæŽæ°ããå¿
èŠãããå ŽåããããŸãã Auroraã¯ã©ã¹ã¿ãŒãäžèŠã«ãªã£ãå Žåã¯ãã Aurora DBã¯ã©ã¹ã¿ãŒãšDBã€ã³ã¹ã¿ã³ã¹ã®åé€ ãã®æé ã«åŸã£ãŠåé€ããŠãã ããã Conclusion çŸåšã®äŒæ¥ã¯ããšã³ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãçç£æ§ã®åäžã®ããã«ããªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã«æ ŒçŽãããŠããããŒã¿ã« çæAI ã®æ©èœãçµã¿èŸŒã¿ãããšèããŠããŸãããã®æçš¿ã§ã¯ãAmazon Bedrock ã䜿ã£ãŠæ ŒçŽãããããŒã¿ã«å¯ŸããŠè£å®çãªæ
å ±ãååŸããæ¹æ³ã宿ŒããŸããããŸããAmazon Bedrock ãšã® Aurora ML çµ±åæ©èœãå©çšããŠãAurora ããŒã¿ããŒã¹ã«æ ŒçŽãããããã¥ã¡ã³ããèŠçŽããæ¹æ³ã宿ŒããŸããã Aurora ML ã䜿ã£ãŠ SQL 颿°ãšã㊠Amazon Bedrock äžã® FMs ãåŒã³åºããæ©èœã¯ãçæAI ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããéã« LLM ã®åŠç¿æ²ç·ãå¹³æ»åããŸããããã«ãããã«ã¹ã¿ã çµ±åãæ§ç¯ããããããŒã¿ãç§»åãããããããšãªããAurora ãš AWS ML ãµãŒãã¹ãç°¡åã§æé©åãããå®å
šãªæ¹æ³ã§çµ±åã§ããŸãã Aurora MLã®è©³çްã«ã€ããŠã¯ãã Amazon Aurora Machine Learning ããåç
§ããŠãã ããã Amazon Aurora MySQLã«ãããææ°ã®Aurora MLã«ã€ããŠã¯ãã Using Amazon Aurora machine learning with Aurora MySQL ããåç
§ããŠãã ããã ã³ã¡ã³ãã§ãã£ãŒãããã¯ããå¯ããã ããã About the Authors Steve Dille ã¯ãAmazon Auroraã®ã·ãã¢ãããã¯ããããŒãžã£ãŒã§ããAWSã®AuroraããŒã¿ããŒã¹ã«ãããgenerative AIã®æŠç¥ãšãããã¯ãã€ãã·ã¢ãããäž»å°ããŠããŸãããã®åœ¹å²ã«å°±ãåã¯ãAuroraã®ããã©ãŒãã³ã¹ããã³ãã³ãããŒã¯ããŒã ãåµèšãããã®åŸAmazon Aurora Serverless v2ã®RDS Data APIãæ§ç¯ããŠç«ã¡äžããŸãããAWSã«ã¯4幎éåšç±ããŠããŸãããã以åã¯ãNCRã§ãœãããŠã§ã¢éçºè
ãHPã§ãããã¯ããããŒãžã£ãŒãSybase(SAP)ã§ããŒã¿ãŠã§ã¢ããŠãžã³ã°ãã£ã¬ã¯ã¿ãŒãåããŠããŸãããããŒã¿ç®¡çãåæãããã°ããŒã¿åéã§5ä»¶ã®äŒæ¥è²·åãš1ä»¶ã®IPOã«æåããäŒæ¥ã®å·è¡åœ¹å¡ãšããŠVPãŸãã¯CMOã20幎以äžåããçµéšããããŸããSteveã¯ãUC Berkeleyã§Information and Data Scienceã®ä¿®å£«å·ãã·ã«ãŽå€§åŠããŒã¹æ ¡ã§MBAããããããŒã°å€§åŠã§Computer Science/Mathã®åŠå£«å·ãååŸããŠããŸãã æå±±çä¹ ã¯ã¢ããŸã³ ãŠã§ã ãµãŒãã¹ (AWS) ã§ã·ãã¢ããŒã¿ããŒã¹ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ããåããŠããŸããããŒããŠã§ã¢ããã³ããŒã¿ããŒã¹ãœãããŠã§ã¢ãã³ããŒã§ããŒã¿ããŒã¹ãã¯ãã«ã«ã³ã³ãµã«ã¿ã³ããšããŠ10幎éåŸäºããåŸãã€ã³ã¿ãŒãããäŒæ¥ã«ãããŠ10幎以äžã«ããããµã€ãéçšããµãŒãã¹éçºãç®¡çæ¥åãªã©æ§ã
ãªæ¥åã«æºãã£ãŠããŸãããçŸåšã¯ãäž»ã«Amazon RDSããã³Amazon Auroraã䜿çšããMySQLãšMariaDBã®ãŠãŒã¶ãŒäŒæ¥ã«å¯Ÿãã課é¡è§£æ±ºãšãœãªã¥ãŒã·ã§ã³æäŸã®ãµããŒããè¡ã£ãŠããŸãã