Slide 1

Slide 1 text

API Gateway ͱ S3Ͱ࡞Δ αʔόϨεɾελϒAPI

Slide 2

Slide 2 text

ࣗݾ঺հ HN:·ͪ͞Ό͜ • ۂͱ͔࡞ΔϓϩάϥϚ ܥ SIer • ϓϩάϥϛϯάݴޠ: Java / node.js • αʔόαΠυΞϓϦɺεϚʔτεϐʔΧʔΞϓϦͷ։ൃ • ٶͪΌΜͷসإۦಈ։ൃ • χίχίಈըͰϛΫ͞ΜୡͷۂΛެ։தʂ • Twitter • @masachaco • Web Site • http://lamnic.com/ • GitHub • https://github.com/masachaco • SoundCloud • https://soundcloud.com/masa_charcoal • niconico • https://www.nicovideo.jp/mylist/11613193

Slide 3

Slide 3 text

એ఻

Slide 4

Slide 4 text

ΞδΣϯμ ɾ͋Δ͋Δࣄྫͱɺ΍Γ͍ͨ͜ͱ ɾͬ͘͟ΓɺAPI GatewayͱS3ͱ͸ ɾAPI GatewayΛͬ͘͟Γ঺հ ɾͭͬͯ͘ΈΔ ɾվྑ͢ΔͳΒ ɾ·ͱΊ

Slide 5

Slide 5 text

͋Δ͋Δࣄྫ

Slide 6

Slide 6 text

͋Δ͋Δࣄྫ ɾREST APIͰ࿈ܞ͢ΔγεςϜΛ࡞Γ͍ͨ ɾෳ਺ͷγεςϜΛಉ࣌ฒߦ։ൃ ɹ։ൃ͍͚ͨ͠Ͳ࿈ܞઌͷAPI͕ະ׬੒ ɹ։ൃ׬ྃ·Ͱͷ଴͕ͪൃੜɾɾɾɾ

Slide 7

Slide 7 text

͋Δ͋Δࣄྫ ɾͳΒελϒΛ࡞ͬͯ։ൃΛਐΊΑ͏ʂ ɹελϒαʔόͲ͏͠Α͏ʁ ɹελϒͷ࣮૷͕େมɾɾɾ ɹHTTPSͰςετ͍ͨ͠ɾɾɾɾ

Slide 8

Slide 8 text

΍Γ͍ͨ͜ͱ

Slide 9

Slide 9 text

΍Γ͍ͨ͜ͱ ɾLambdaΛ࢖Θͣʹ ɾαʔόϨεͰ ɾHTTPSʹରԠͨ͠ ɾREST APIελϒΛ ɾͰ͖Δָ͚ͩʹ࡞Γ͍ͨ

Slide 10

Slide 10 text

׬੒Πϝʔδ

Slide 11

Slide 11 text

Amazon API Gateway ։ൃαʔό ελϒϨεϙϯε1 ελϒϨεϙϯε2 ελϒϨεϙϯε3 Amazon S3 ׬੒Πϝʔδ ։ൃαʔό͕ϦΫΤε τΛ౤͛Δͱ

Slide 12

Slide 12 text

Amazon API Gateway ։ൃαʔό ελϒϨεϙϯε1 ελϒϨεϙϯε2 ελϒϨεϙϯε3 Amazon S3 ׬੒Πϝʔδ "1*(BUFXBZ͕ ϦΫΤετͷύε΍ΫΤϦ΍ϔομΛݩʹɺϨε ϙϯε͢Δελϒͷ಺༰Λ4͔Βऔಘɻ ࠓճ͸؆୯ʹύε͚ͩͰ੾Γସ͑ΒΕΔΑ͏ʹ 

Slide 13

Slide 13 text

Amazon API Gateway ։ൃαʔό ελϒϨεϙϯε1 ελϒϨεϙϯε2 ελϒϨεϙϯε3 Amazon S3 ׬੒Πϝʔδ 4͔Βऔಘͨ͠ϑΝΠϧΛݩʹ Ϩεϙϯεϔομͱ ϨεϙϯεϘσΟΛ ࡞੒ͯ͠Ϩεϙϯε͢Δ

Slide 14

Slide 14 text

͜Μͳײ͡ͷURLͷ APIΛ࡞Γ·͢ https://(API GWͷURL)/Ϩεϙϯεఆ͕ٛهड़͞ΕͨϑΝΠϧ໊ ɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹ! ྫɿ https://apigateway/ex/API_1 ɾ https://(API GWͷURL)/ex/API_1 ʹΞΫηε͢Δͱɺ ɾ S3͔Βɺʮex/API_1.jsonʯͱ͍͏ϑΝΠϧΛ͖࣋ͬͯͯ ɾ ͦͷJSONϑΝΠϧʹॻ͔Ε͍ͯΔ಺༰Λݩʹ ɾ ΫϥΠΞϯτʹϨεϙϯεΛ͢Δʂ

Slide 15

Slide 15 text

ͬ͘͟Γ API Gatewayͷ͘͠Έ

Slide 16

Slide 16 text

Amazon API Gatewayͱ͸ AWS্ͰAPIͷ࡞੒ͱɺ؅ཧ͕ߦ͑ΔαʔϏεɻ ࡞੒ͨ͠APIʹϦΫΤετ͢Δͱɺ AWSͷଞαʔϏεͱ࿈ಈͤͯ͞ɺଞαʔϏεͷॲཧ݁ՌΛ APIͷϨεϙϯεͱͯ͠ฦ͢͜ͱ͕Ͱ͖Δɻ

Slide 17

Slide 17 text

API Λ࡞੒ͯ͠

Slide 18

Slide 18 text

APIͷΤϯυϙΠϯτΛ࡞੒ ͜͜ ྫ͑͹ https://API GWͷURL/hoge/piyo ͷΑ͏ͳύε͕ΤϯυϙΠϯτ

Slide 19

Slide 19 text

ϦΫΤετ͔Βड͚औΔ ύϥϝʔλ΍ɺϔομɺϘσΟͷ಺༰Λઃఆ ͜͜

Slide 20

Slide 20 text

ड͚औͬͨϦΫΤετΛɺ ଞAWSͷαʔϏεͳͲ΁ͷϦΫΤετʹϚοϐϯά ͜͜

Slide 21

Slide 21 text

ϦΫΤετΛݩʹ ଞAWSͷαʔϏεͳͲʹॲཧͤͯ͞ ͜͜

Slide 22

Slide 22 text

ଞAWSͷαʔϏεͳͲͷॲཧ݁ՌΛɺ ΫϥΠΞϯτʹฦ͢Ϩεϙϯεεςʔλεɾ Ϩεϙϯε ϔομɾϨεϙϯεϘσΟͳͲʹϚοϐϯά ͜͜

Slide 23

Slide 23 text

͜ͷAPI ͕ͲΜͳϨεϙϯεϔομ΍ ϨεϙϯεBodyΛฦ͔͢ͷఆٛɻ ͦΕΛݩʹɺΫϥΠΞϯτʹϨεϙϯεΛฦ͢ ͜͜

Slide 24

Slide 24 text

࡞ͬͯΈΔ

Slide 25

Slide 25 text

API Λ࡞੒ ɾProtocol : REST ɾ৽͍͠API ɾAPI໊ɿstub-api ɾΤϯυϙΠϯτλΠϓ:Ϧʔδϣϯ (VPCݶఆެ։ͷ৔߹͸ϓϥΠϕʔτ)

Slide 26

Slide 26 text

APIͷΤϯυϙΠϯτΛ࡞੒ ΞΫγϣϯˠʮϦιʔεͷ࡞੒ʯΛબ୒ɻ ʮϓϩΩγϦιʔεͱͯ͠ઃఆʯΛબ୒ɻ ϓϩΩγϦιʔεͱͯ͠ઃఆ͢Δ͜ͱͰɺ ΤϯυϙΠϯτ͝ͱʹઃఆΛ࡞੒͠ͳͯ͘΋ྑ͍ɻ

Slide 27

Slide 27 text

౷߹λΠϓͷઃఆ ޙ΄Ͳ͜͜͸ઃఆมߋ͢ΔͷͰɺద౰ɻ HTTPϓϩΩγͰɺΤϯυϙΠϯτ URLΛ ࣗ෼ͷαΠτͳͲʹ͓ͯ͘͠ɻ

Slide 28

Slide 28 text

౷߹ϦΫΤετͷઃఆ ϦΫΤετͷ޲͖ઌΛS3ʹઃఆ͢Δɻ ʮ౷߹ϦΫΤετʯΛબ୒ ͜͜

Slide 29

Slide 29 text

Amazon API Gateway ։ൃαʔό ex/API_A.json ex/API_B.json ex/API_C.json Amazon S3 ϦΫΤετΠϝʔδ )551.FUIPE1045 ྫɿIUUQT"1*(8ͷ63-FY"1*@"

Slide 30

Slide 30 text

Amazon API Gateway ։ൃαʔό ex/API_A.json ex/API_B.json ex/API_C.json Amazon S3 ϦΫΤετΠϝʔδ )551.FUIPE(&5 ྫɿIUUQT 4ͷ63- TUVC@FYBNQMFFY"1*@"KTPO

Slide 31

Slide 31 text

౷߹ϦΫΤετͷઃఆ API Gateway͔ΒɺS3΁ͷϦΫΤετʹม׵͢Δɻ API Gateway΁ͷϦΫΤετΛɺ S3΁ͷϦΫΤετʹϚοϐϯά͍ͯ͘͠ɻ

Slide 32

Slide 32 text

౷߹ϦΫΤετͷઃఆ "84αʔϏεΛબ୒ ࡞੒ͨ͠4όέοτͷϦʔδϣϯ 4Λબ୒ 4ʹ"1*(8͔Β(&5ϝιουͰ ϦΫΤετ͢Δͱ ࢦఆͨ͠ϑΝΠϧ͕औಘͰ͖Δ

Slide 33

Slide 33 text

౷߹ϦΫΤετͷઃఆ "1*(BUFXBZ΁ͷϦΫΤετύε FY"1*@ ͕ɺ ʮQSPYZ@QBSBNʯͱ͍͏ม਺ʹೖ͍ͬͯΔɻ ҎԼͷΑ͏ʹʮTUVCFYBNQMF\QSPYZ@QBSBN^KTPOʯͱઃఆ͢Δͱ "1*(BUFXBZ͕ʮTUVCFYBNQMFʯͱ͍͏4όέοτ͔Β \QSPYZ@QBSBN^KTPOͱ͍͏ϑΝΠϧΛ࣋ͬͯ͘ΔΑ͏ʹϦΫΤετ͢Δɻ 4ʹΞΫηεݖͷ͋ΔϩʔϧΛࢦఆ

Slide 34

Slide 34 text

URLύεύϥϝʔλͷઃఆ ໊લɿQSPYZ@QBSBN ϚοϐϯάݩɿNFUIPESFRVFTUQBUIQSPYZ API Gateway΁ͷϦΫΤετύε͕ɺ ઌ΄Ͳઃఆͨ͠ʮproxy_paramʯʹ Ϛοϐϯά͞ΕΔΑ͏ʹઃఆ͢Δɻ

Slide 35

Slide 35 text

ϨεϙϯεఆٛϑΝΠϧͷ࡞੒ S3ʹஔ͘ɺϨεϙϯεఆٛϑΝΠϧΛ࡞੒͢Δɻ ϑΝΠϧ໊ɿAPI_1.json

Slide 36

Slide 36 text

ϨεϙϯεఆٛϑΝΠϧͷ࡞੒ S3ʹஔ͘ɺϨεϙϯεఆٛϑΝΠϧΛ࡞੒͢Δɻ "1*(BUFXBZ͕ΫϥΠΞϯτʹฦ͢εςʔλε ϑΝΠϧ໊ɿAPI_1.json

Slide 37

Slide 37 text

ϨεϙϯεఆٛϑΝΠϧͷ࡞੒ S3ʹஔ͘ɺϨεϙϯεఆٛϑΝΠϧΛ࡞੒͢Δɻ ΫϥΠΞϯτʹฦ͢Ϩεϙϯεϔομ ϑΝΠϧ໊ɿAPI_1.json

Slide 38

Slide 38 text

ϨεϙϯεఆٛϑΝΠϧͷ࡞੒ S3ʹஔ͘ɺϨεϙϯεఆٛϑΝΠϧΛ࡞੒͢Δɻ ΫϥΠΞϯτʹฦ͢ϨεϙϯεϘσΟ ϑΝΠϧ໊ɿAPI_1.json

Slide 39

Slide 39 text

S3όέοτΛ࡞ͬͯ όέοτ໊ʮstub-exampleʯͰ࡞੒ɻ

Slide 40

Slide 40 text

S3ʹϨεϙϯεఆٛΛஔ͘ exσΟϨΫτϦʹɺ࡞੒ͨ͠API_1ϑΝΠϧΛஔ͘

Slide 41

Slide 41 text

౷߹Ϩεϙϯεͷઃఆ S3ͷϑΝΠϧͷ಺༰ΛɺΫϥΠΞϯτ޲͚ͷ Ϩεϙϯεʹม׵͢Δɻ ͜͜

Slide 42

Slide 42 text

౷߹Ϩεϙϯεͷઃఆ ϚοϐϯάςϯϓϨʔτˠ application/json Λબ୒͠ɺϚοϐϯάςϯϓϨʔτ (S3ͷ಺༰ΛϨεϙϯεʹϚοϐϯά͢Δఆٛ)Λ௥Ճɻ

Slide 43

Slide 43 text

Apache VTL (Apache Velocity Template Language) Ͱهड़͢ΔϦΫΤετɾϨεϙϯεͷςϯϓϨʔτɻ ϚοϐϯάςϯϓϨʔτ Amazon API Gateway ։ൃαʔό Amazon S3 "1*(BUFXBZ͔Βଞ"84αʔϏε΁ͷ ϦΫΤετ΍ɺ "1*(BUFXBZ͔ΒɺΫϥΠΞϯτ΁ͷϨεϙϯεΛ ϚοϐϯάςϯϓϨʔτͰఆٛ͢Δ͜ͱ͕Ͱ͖Δɻ

Slide 44

Slide 44 text

• S3͔Βड৴ͨ͠ϑΝΠϧͷ಺༰ΛݩʹϨεϙϯεϔομʹઃఆ ͢Δ • S3͔Βड৴ͨ͠಺༰ΛݩʹɺϨεϙϯεϘσΟΛઃఆ͢Δ • If ΍ for΋࢖͑Δ • etc.. (࣮͸S3΁ͷϦΫΤετʹ΋ϚοϐϯάςϯϓϨʔτ͸࢖͑Δ) ※ৄ͘͠͸ެࣜϦϑΝϨϯεΛࢀߟ ■API Gateway ͷϚοϐϯάςϯϓϨʔτϦϑΝϨϯε
 https://docs.aws.amazon.com/ja_jp/apigateway/latest/ developerguide/api-gateway-mapping-template-reference.html ϚοϐϯάςϯϓϨʔτͰɺͰ͖Δ͜ͱ

Slide 45

Slide 45 text

ϚοϐϯάςϯϓϨʔτͷઃఆྫ ࢀߟɿS3ʹஔ͍ͨjsonϑΝΠϧ

Slide 46

Slide 46 text

ϝιουϨεϙϯεͷઃఆ S3ͷϑΝΠϧͷ಺༰ΛɺΫϥΠΞϯτ޲͚ͷ Ϩεϙϯεʹม׵͢Δɻ ͜͜

Slide 47

Slide 47 text

ϝιουϨεϙϯεͷઃఆ HTTPͷεςʔλε200Λ௥Ճɺ ίϯςϯπλΠϓʹɺapplication/json ϞσϧɿEmptyΛબ୒

Slide 48

Slide 48 text

API ΛσϓϩΠ͢Δ

Slide 49

Slide 49 text

APIͷσϓϩΠ ΞΫγϣϯ͔ΒɺʮAPIͷσϓϩΠʯΛબ୒ ৽͍͠εςʔδΛબ୒ͯ͠ɺεςʔδ໊ΛʮstubʯͰσϓϩΠɻ ※εςʔδ໊ɿσϓϩΠ؀ڥ໊ͷ୯Ґ

Slide 50

Slide 50 text

APIͷσϓϩΠ εςʔδˠ stubΛબ୒͢Δͱɺ σϓϩΠ͞Εͨ APIͷURL͕දࣔ͞ΕΔͷͰɺ S3ʹஔ͍ͨɺʮex/API_1ʯͷελϒʹΞΫηεͯ͠ΈΔɻ

Slide 51

Slide 51 text

curlͰ࣮ߦ $ curl -X POST https://XXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/stub/ex/API_1 —verbose !Ϩεϙϯε < HTTP/2 404 < date: Mon, 18 Feb 2019 10:06:15 GMT < content-type: application/json < content-length: 15 < x-amzn-requestid: XXXXXX-XXXXXXX-XXXXXXX-XXXXXXX < x-example-header-1: Header Value 1 < x-example-header-2: Header Value 2 < x-amz-apigw-id: XXXXXXXXXXXX < x-amzn-trace-id: XXXXXX-XXXXXXX-XXXXXXX-XXXXXXX < {"key1":"val1"} ࢀߟɿS3ʹஔ͍ͨjsonϑΝΠϧ

Slide 52

Slide 52 text

Ͱ͖ͨ

Slide 53

Slide 53 text

·ͱΊ • LambdaΛ࢖ΘͣʹελϒΛ࡞Δ͜ͱ͕Ͱ͖ͨ • jsonϑΝΠϧΛ௥Ճ͢Ε͹ྑ͍ͷͰɺ୭Ͱ΋ελϒ Λ௥Ճ͠΍͍͢ • API Gateway͸σϑΥϧτͰHTTPSͳͷͰɺಛʹख ΛՃ͑Δඞཁ͕ͳָ͘

Slide 54

Slide 54 text

͝੩ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ

Slide 55

Slide 55 text

ิ଍/Appendix

Slide 56

Slide 56 text

ิ଍ • ΫϥΠΞϯτͷϦΫΤετΫΤϦ΍ɺϔομਓج͍ͮͯɺελϒͷϨε ϙϯεΛ੾Γସ͑Δʹ͸ɺผ్ϦΫΤετͷϚοϐϯάͷ௥Ճɾมߋ ͕ඞཁ
 • ը૾΍όΠφϦϑΝΠϧΛฦ͢ʹ͸΋͏Ұखؒඞཁ • (ΫϥΠΞϯτ͔ΒͷϦΫΤετϔομʹAcceptϔομͷ௥Ճɺ· ͨ͸ɺLambda͕ඞཁ)
 • खͷࠐΜͩϦΫΤετɾϨεϙϯεϚοϐϯάΛ͚ͤͨ͞Ε͹ɺ Lambdaͱ࿈ܞͯ͠ελϒϑΝΠϧͱϚοϐϯάͤͨ͞ํָ͕ͦ͏
 • ࣾ಺ͳͲVPC಺͚ͩʹެ։͍ͨ͠৔߹͸ɺϓϥΠϕʔτλΠϓͰAWI GWΛ࡞੒ͯ͠ɺVPCΤϯυϙΠϯτͷઃఆ͕ඞཁ

Slide 57

Slide 57 text

ελϒΛ௥Ճͯ͠ΈΔ ϦΫΤετ͢ΔͱɺXMLΛฦ͢ϨεϙϯεఆٛΛ ࡞੒ɺS3ͷʮex/API_2.jsonʯʹΞοϓϩʔυ͢Δ ϑΝΠϧ໊ɿAPI_2.json

Slide 58

Slide 58 text

curlͱϒϥ΢βͰ࣮ߦ $ curl -X POST https://XXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/stub/ex/API_2 —verbose < HTTP/2 201 < date: Mon, 18 Feb 2019 10:11:40 GMT < content-type: application/xml < content-length: 26 < x-amzn-requestid: XXXXXXX-XXXXXXXXX-XXXXXXX-XXXXXXXX < x-amz-apigw-id: XXXXXXXX < x-amzn-trace-id: Root=XXXXXXXX-XXXXXX—XXXXXXXX < * Connection #0 to host XXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com left intact “value”