Lambdaを使ってJawsDaysをHackしてみよう! 2016 3/12 13:00-13:50(50min)
LambdaΛͬͯJawsDaysΛHackͯ͠ΈΑ͏!+"84%":45PTIJIJSP'VSVOP
View Slide
ɾWiFi SSID->jawsdays_workshopɾWiFi ύεϫʔυ->workshop02ɾࢿྉ-> https://github.com/toshihirock/jaws2016-lambda-hands-on
લఏɾॳ৺ऀ͚ͷߨशͳͷͰқߴ͋͘Γ·ͤΜɻ͕࣌ؒ༨ͬͨํվ͢ΔͳͲࣗ༝ʹ༡ΜͰΈ͍ͯͩ͘͞ɻɾLambdaͷίʔυ࣮αϯϓϧNode.jsͰߦ͓ͬͯΓ·͢ɻJava,PythonͰͷαϯϓϧͳ͍ྃ͝ঝ͍ͩ͘͞ɻ
Δ͜ͱɺΒͳ͍͜ͱΔ͜ͱɾϋϯζΦϯܗࣜͰLambdaͰԿ͔Λ࡞ͬͯ༡ΜͰΈΔ(༡ͼͳͷͰۀ͚Ͱͳ͍)Βͳ͍͜ͱɾLambdaͷৄࡉͳઆ໌ɾTwitterAPIͷৄࡉ
ࣗݾհɾݹढ़(@toshihirock)ɾNTTιϑτΣΞגࣜձࣾɾAWSۀ1͙Β͍ɾ͖- Lambda- Podcast- ϫʔϧυτϦΨʔ
ຊͷϋϯζΦϯ
-BNCEBΛͬͯKBXTEBZTʹπΠʔτ͠Α͏
LambdaΛͬͯJawsDaysΛHackͬͧ͢ɾπΠʔτ͍ͤͨ͞༰ͷςΩετΛS3ʹஔɾIAMϩʔϧΛ༩ͨ͠LambdaͰS3͔ΒςΩετϑΝΠϧΛऔಘ͠ɺϥϯμϜʹϐοΫΞοϓɾ༧Ί࡞ͯ͋͠ΔAPIGatewayʹ͚ͯPOSTϦΫΤετΛ࣮ࢪɾAPIGatewayܦ༝Ͱ@jaws2016_lambda͔Βϋογϡλά #jawsdays Λ͚ͯπΠʔτ͞ΕΔ(࡞ࡁΈ)
֓ཁਤ
ࣝฤ
S3?ɾΦϯϥΠϯετϨʔδɾߴ͍ݎ࿚ੑ(99.999999999%)ɾ҆Ձɾ༰ྔແ੍ݶ(1ϑΝΠϧ5TB·Ͱ)ࠓճπΠʔτจݴΛஔ͘ॴͱͯ͠ར༻
Lambda?ɾΠϕϯτυϦϒϯcronͷΑ͏ʹఆظλΠϛϯάͰϢʔβʔ͕ॻ͍ͨίʔυΛ࣮ߦͰ͖ΔɾίʔυNode.js,Java,Pythonɾ࠷ۙVPCରԠɾৄࡉެࣜࢀর
IAMϩʔϧ?ɾϢʔβʔLambdaɺEC2ͳͲͷϦιʔεʹରׂͯ͠(Role)ΛࢦఆͰ͖Δɻྫ͑ʮS3ͷReadݖݶʯͳͲɾϩʔϧLambda࡞࣌ʹ༩͢Δ͜ͱͰઃఆ͞ΕͨAPIͷkick͕Ͱ͖ΔࠓճͷྫͰLambda͔ΒS3ͷόέοτͷใΛऔಘ͍ͨ͠ͷͰLambda͚ͷ্هʹ֘͢ΔIAMϩʔϧΛ࡞͢Δ
࡞ۀͷྲྀΕɾS3όέοτʹπΠʔτจݴͷஔɾLambda༻IAMϩʔϧͷ࡞ɾLambda Functionͷ࡞ɾLambda Functionͷఆظ࣮ߦͷઃఆ
४උฤ(S3)
αʔϏεҰཡ͔ΒS3ͷબ
όέοτͷ࡞ʮ$SFBUF#VDLFUʯΛબόέοτ໊Λ࡞ɻόέοτ໊SFHJPOͰϢχʔΫͳඞཁ͋ΓϦʔδϣϯ5PLZPʮ$SFBUFʯΛબ
S3ஔ͢ΔςΩετϑΝΠϧͷ࡞ɾ֤ࣗͷPCͷ͖ͳΤσΟλͰπΠʔτ͍ͤͨ͞จݴूΛ࡞͍ͯͩ͘͠͞ɻจࣈίʔυUTF-8ͰอଘɾҙͷσϦϛλ۠ΓͰ࡞͍ͯͩ͘͠͞ɻҎԼྫσϦϛλվߦ(\r\n)ɾ࡞ޙɺʮtweetList.txtʯͰϩʔΧϧʹอଘ
֬ೝ# จࣈίʔυ֬ೝ$nkf -g tweetList.txt# վߦίʔυ֬ೝ.LF = $.CR = ^MͰදࣔ$cat -e tweetList.txt
S3ςΩετϑΝΠϧͷΞοϓϩʔυʮ6QMPBEʯΛબςΩετΛυϥοάΞϯυυϩοϓͰΞοϓϩʔυʮ4UBSU6QMPBEʯΛબઌ΄Ͳ࡞ͨ͠όέοτΛબޙɺҎԼͷૢ࡞ͰΞοϓϩʔυ
֬ೝ
४උฤ(IAMϩʔϧ)
αʔϏεҰཡ͔ΒIAMͷબ
ϩʔϧͷ৽ن࡞ʮ3PMFTʯΛબʮ$SFBUF/FX3PMFʯΛબ
ϩʔϧ໊ͷܾఆҙͷ3PMF/BNFΛೖྗʮ/FYU4UFQʯΛબ
ϩʔϧλΠϓͷબʮ"84-BNCEBʯΛબLambdaʹΞλον͍ͨ͠ϩʔϧΛ࡞͢ΔͷͰLambdaΛબ͠·͢
ϙϦγʔͷબʮTʯͱೖྗʮ"NB[PO43FBE0OMZ"DDFTTʯΛબʮ/FYU4UFQʯΛબطʹAWSଆͰ༻ҙ͍ͯ͠ΔS3ͷReadOnlyͷϙϦγʔΛ༩
ϨϏϡʔ֬ೝޙɺʮ$SFBUF3PMFʯΛબ
LambdaΛ࡞Ζ͏!
(ޙͰར༻)ίʔυͷ४උɾҎԼͷ༰Λίϐϖͯ͠ҙͷςΩετΤσΟλʹష͓ͬͯ͘ɾhttps://github.com/toshihirock/jaws2016-lambda-hands-on/blob/master/index.js
(ޙͰར༻)ίʔυͷ४උ4ͷઃఆదٓࣗͷઃఆʹมߋ"1*(BUFXBZͷೝূΩʔΛࢦఆ
αʔϏεҰཡ͔ΒLambdaͷબ
Functionͷ࡞※ॳΊͯͷํͷը໘ʮ$SFBUFB-BNCEBGVODUJPOʯΛબʮ(FU4UBSUFE/PXʯΛબ※طʹFunction͕͋Δਓͷը໘
Blueprintར༻͠ͳ͍ͷͰʮ4LJQʯΛબ
Functionͷઃఆ(1/2)/PEFKT/BNFٴͼ%FTDSJQUJPOԿͰ0,&EJUDPEFJOMJOFઌ΄Ͳͷ༰Λίϐϖ
Functionͷઃఆ(2/2)ઌ΄Ͳ࡞ͨ͠4ΞΫηεͰ͖Δ3PMF໊*OEFYIBOEMFS/P71$࠷ޙʹʮ/FYUʯ
ϨϏϡʔઃఆ͕ͳ͚Εʮ$SFUFGVODUJPOʯ
࡞ຊޠ͕จࣈԽ͚͠·͢ɻɻؾʹͳΔਓຊϖʔδͰ࠶ίϐϖͯ͠ߋ৽͢ΔͱΓ·͢ɻ
ςετͯ͠ΈΔʮ5FTUʯΛબ
ςετͯ͠ΈΔʮ4BWFBOEUFTUʯΛબςϯϓϨʔτԿͰ0, πΠʔτใ4͔Βऔಘ͢ΔͷͰ
ςετͯ͠ΈΔޭ͢Εը໘Լ෦ʹπΠʔτͨ͠จࣈྻ͕දࣔ͞ΕΔࣦഊ͢Δͱ͍ΤϥʔදࣔʹͳΔ
ςετͯ͠ΈΔ5XJUUFSͰ֬ೝ
Τϥʔ͕ൃੜ͍ͯ͠Δ߹ɾը໘Լ෦(Log output)ʹϩάใ͕දࣔ͞ΕΔͷͰ֬ೝɾඞཁʹԠͯ͡console.logͳͲΛࠐΜͰσόοάͯ͠ΈΔ
botΒ͘͠ఆظ࣮ߦͤͯ͞ΈΔ
ఆظ࣮ߦͷઃఆʮ&WFOUTPVSDFTʯλϒΛબʮ"EEFWFOUTPVSDFʯΛબ
ఆظ࣮ߦͷઃఆҙͷִ࣌ؒؒΛઃఆ࠷খʮ$MPVE8BUDI&WFOUT4DIFEVMFʯΛબ໊শΛదٓมߋ4VCNJUܾͯ͠ఆ
֬ೝ5XJUUFS্Ͱ֬ೝͬͯ֬͠͠ೝ
͕࣌ؒ༨ͬͨਓ
͕࣌ؒ༨ͬͨਓɾ͖ʹ৭ʑͬͯΈ͍ͯͩ͘͞ʂʢఆظ࣮ߦִؒΛม͑ΔɺจݴͷύλʔϯΛ૿͢ͳͲʣɾLambda͔ΒTwitterͷAPIΛୟ͘ͳͲΛͯ͠Έ͍ͨ߹Ҏલॻ͍ͨͪ͜ΒΛࢀߟʹͬͯΈ͍ͯͩ͘͞http://qiita.com/toshihirock/items/d28505442526e0ae7793
Thanks!