A l e x a ͷ S e r v i c e ͕ ͬͯ͘ Ε Δ ͜ ͱ • ԻΛςΩετʹม • ςΩετΛࣗવݴޠॲཧͯ͠JSONʹม • Lambda ͷ Invoke / HTTPS API ͷ POSTϦΫΤετ • Lambda·ͨAPI͕JSONΛreturn͢Δ • ϨεϙϯεͷJSONΛԻʹม
A l e x a ͷ Χ ελϜ εΩϧ ։ ൃ ≒ We b h o o k A P I ࡞ • Alexa Service͕͛ͯ͘ΔJSON͔ΒɺϦΫΤετ༰ΛѲ • Alexa͕TTS (Text To Speech)͢ΔͨΊͷJSONΛreturn͢Δ • entrypoint̍ͭͷΈɺJSONͷσʔλͰ༰Λࣝผ͢Δ • ask sdk(Node.js / Python / Java)Λ͏͜ͱͰɺ؆୯ʹ࣮Ͱ͖Δ • ܕఆٛGitHubʹެ։͞Ε͍ͯΔͨΊɺൺֱత໎͍ʹ͍͘
A l e x a L a m b d a ܕ ͖ ݴ ޠ ೖ ʹ Α ͍ ʢ ͔ ʣ • جຊతͳϢʔεέʔεͰ͋Εɺ΄΅Input / Output͕ݻఆ • API࿈ܞͳͲΛ͠ͳ͚Ε΄΅ดͨ͡ܗͰ࣮Ͱ͖Δ • LambdaͷGUIʹαϯϓϧInput͕ϓϦηοτ͞Ε͍ͯͯςετ؆୯ • πʔϧLambdaͷೖͱͯ͠AlexaεΩϧΛ͓ʹͯ͠ΈΑ͏
A S K C L I + ख ಈ ߋ ৽ ͕ A l e x a ଆ ͷ ఆ ੴ • npm i -g ask-cliͰΠϯετʔϧ • ask delpoyͰAlexaεΩϧ + AWSϦιʔεΛσϓϩΠ • Lambda / IAM Role / CloudWatchͷϦιʔε͕࡞ΒΕΔ • IAMͷPolicyAWSLambdaBasicExecutionRole • DynamoDB / S3ͳͲΛ͏߹खಈͰIAM PolicyͷՃ͕ඞཁ
AW S Ϣ ʔ β ʔ ͔ Β Έ ͨ A S K C L I • AWSΛҙࣝͤͣʹεΩϧΛ࡞ΕΔCLIπʔϧ • ҙ͍͍ࣝͯͨ͠ʹਖ਼Γͳ͍ • IAMͷϙϦγʔཧखಈͳͷͰɺґଘϦιʔε͕૿͑ΔͱͭΒ͍ • Serverless FW / SAM / CDKͱΈ߹ΘͤΔͷ͕ݱঢ়ϕλʔ
AW S A l e x a εΩϧ ։ ൃ Λ ϒʔε τ ͢ Δ • ASK CLIΛ͑AWSΛҙࣝͤͣʹ։ൃͰ͖Δ • ҙ͍ࣝͯ͠ͳ͍͕ɺAWSͦ͜ʹ͋Δ • ҙࣝͤͣʹ͑Δൣғͷػೳ͔͍͑ͯ͠ͳ͍ • AWSΛཧղ͢Δ͜ͱͰɺΑΓΑ͍DX(Developer Experience)ʹ
D y n a m o D B o r S 3 • σϑΥϧτDynamoDB • ͲͪΒUser IDΛΩʔʹɺObjectΛอଘ͢Δܗ • SLA΄΅ޡࠩ(S3: 99.9% / DynamoDB: 99.99%) • ແྉ͕ແظݶͳͷDynamoDB( S312ϲ݄ͷΈ ) • ैྔ՝ۚͷ৳ͼํS3ͷ΄͏͕Ժ͔( 0.023USD / GB)
S D K M a p ܕ Ͱ શ ෦ 1 Ω ʔ ʹ ͍ Εͯ ͠ · ͏ dynamoDBDocumentClient.put({ TableName: 'TableName', Item: { [partitionKey]: userId, [attributesName]: { … } } }).promise() A S K - S D K AW S - S D K
S 3 Λ Ϣ ʔ β ʔ D B ͱ ͯ͠ ѻ ͏ ࡍ ͷ T i p s • ask-sdk-dynamodb-persistence-adapter Λ͑؆୯ʹಋೖՄೳ • User ID / Device ID / Person IDεΩϧຖʹϢχʔΫ • ./ask-user-db/{custom_prefix}/{user_id}ͷΑ͏ͳύεͰϑΝΠϧੜ • prefixΛεΩϧ໊ʹઃఆ͢Δͱɺ̍όέοτʹूͰ͖Δ
– h t t p s : / / d o c s . a w s . a m a z o n . c o m / j a _ j p / l a m b d a / l a t e s t / d g / r u n n i n g - l a m b d a - c o d e . h t m l “ʮϒʔτετϥοϓʯ͕ඞཁͳͨΊɺ Lambda ؔΛݺͼग़ͨ͢ͼʹएׯͷϨΠςϯγʔ͕ൃੜ͠·͢ɻ ௨ৗɺ͜ͷԆ Lambda ؔΛॳΊͯݺͼग़ͨ͠ͱ͖ɺ ·ͨߋ৽͞Εͨͱ͖ʹൃੜ͠·͢ɻ Lambda ؔΛ࿈ଓͯ͠ݺͼग़͢߹ɺ AWS Lambda Ͱ͖ΔݶΓ࣮ߦίϯςΩετΛ࠶ར༻͠·͢ɻ” L a m b d a ʹ ί ʔ ϧ υ ελ ʔ τ ͕ ͋ Δ
E C S / E K S / e b ͳ Ͳ Ͱ ࡞ ͬ ͨ ৗ ࣌ Ք ಇ A P I ʹ Γ ସ ͑Δ • ৗ࣌Քಇʹ͢Είʔϧυελʔτͳ͘ͳΔ • ExpressͰಈ͔ͨ͢Ίͷadapter͕npmʹ͋Δʢެࣜʣ • ExpressΛಈ͔͢Node.jsͷίϯςφΛՔಇͤ͞ΕOK • ৗ࣌Քಇͷ߹ɺJavaͷํ͕ૣ͘ͳΔઆɾɾɾ
̍ ͭ ͷ L a m b d a ʹ · ͱ Ί ͯ ͠ · ͏ • ෳͷεΩϧ͔Β̍ͭͷLambdaΛࢀরͤ͞Δ • ݺͼग़͠ճΛ૿ͯ͠ɺίʔϧυελʔτΛݮΒ͢ • applicationIdΛͬͯSkillFactoryΛΑͼΘ͚ΕOK • Ξοϓσʔτ / σϓϩΠͰଞͷεΩϧΛյ͢ϦεΫʹҙ • LambdaͷόʔδϣϯʢΤΠϦΞεʣΛ͍͜ͳͤOK͔
A l e x a ͱ A l e x a ͷ ֎ Λ AW S Ͱ Ϧ ϯ Ϋ ͢ Δ • AlexaOAuth2ͰΞΧϯτϦϯΫʢαʔϏε࿈ܞʣͰ͖Δ • Cognito User PoolsOAuth2ʹରԠ͍ͯ͠Δ • AWS AmplifyΛ͑webΞϓϦͷߏங͕؆୯ʹ • Amplify SDKͰPersonalizeRekognitionͳͲͱͷ࿈ܞ؆୯
A l e x a A W S ϓ ϩ Ϟ ʔ γ ϣ ϯ Ϋ Ϩ δ ο τ h t t p s : / / d e v e l o p e r. a m a z o n . c o m / j a / a l e x a - s k i l l s - k i t / a l e x a - a w s - c re d i t s
E C 2 S 3 Ϋ ʔϙ ϯ ର h t t p s : / / d e v e l o p e r. a m a z o n . c o m / j a / a l e x a - s k i l l s - k i t / a l e x a - a w s - c re d i t s