Upgrade to Pro — share decks privately, control downloads, hide ads and more …

とあるサービスにおける、とあるAPIの、 サーバーレス化を目指した検証のアレコレ

とあるサービスにおける、とあるAPIの、 サーバーレス化を目指した検証のアレコレ

JAWS-UG青森支部 [第5回] (https://jaws-tohoku.doorkeeper.jp/events/45162) でAPI Gateway, AWS Lambda(Apex), Elasticsearch Serviceについて話しました

Retu Fukui

June 25, 2016
Tweet

More Decks by Retu Fukui

Other Decks in Technology

Transcript

  1. ͱ͋ΔαʔϏεʹ͓͚Δɺ
    ͱ͋ΔAPIͷɺ
    αʔόʔϨεԽΛ໨ࢦͨ͠
    ݕূͷΞϨίϨ
    JAWS-UG੨৿ࢧ෦ [ୈ5ճ] 2016/06/25

    View Slide

  2. ࣗݾ঺հ
    ෱Ҫ ྽ (Takeshi Fukui)
    Engineer @ Piece of Cake, inc.
    https://github.com/fukuiretu
    https://twitter.com/fukuiretu
    https://www.facebook.com/fukuiretu
    http://fukuiretu.com/
    since 2015. 3 ~

    View Slide

  3. ࣗݾ঺հ
    https://cakes.mu/ https://note.mu/

    View Slide

  4. ࣗݾ঺հ
    ͜ͷํʑ΋noter

    View Slide

  5. ࣗݾ঺հ
    http://www.pref.aomori.lg.jp/sangyo/shoko/aomori_IT_life.html

    View Slide

  6. ࠓ೔࿩͢͜ͱ
    • αʔόʔϨεͱ͸
    • ݕূͷ಺༰
    • ΤίγεςϜ
    • ֤छαʔϏεͷઃఆͱͭͳ͗ࠐΈ
    • ϋϚͬͨͱ͜Ζ
    • ࠓޙͷ՝୊

    View Slide

  7. ಋೖࣄྫΛظ଴͍ͯͨ͠ํΰϝϯφαΠ
    ·ͩݕূஈ֊Ͱಋೖʹ͸͍͓ͨͬͯΓ·ͤΜ

    View Slide

  8. ࠷ۙΑࣖ͘ʹ͢Δ
    αʔόʔϨεͬͯ??

    View Slide

  9. GoogleτϨϯυ
    2014೥தࠒ͔ΒҰൠతʹͳ͖ͬͯͨ܏޲

    View Slide

  10. Q. αʔόͳ͠Ͱ
    ӡ༻͔Βͳʹ͔Β
    શͯΛؙ౤͛Ͱ͖Δ
    ͦΜͳ͓͍͍͠࿩͕
    ͋ΔΜͰ͔͢ʁ

    View Slide

  11. A. ࢒೦ͳ͕Β
    ͦΜͳ͓͍͍͠࿩Ͱ͸ͳ͍
    શͯͰ͸ͳ͍͕
    ͋Δఔ౓͸
    ౤͛Δ͜ͱ͕Ͱ͖Δ

    View Slide

  12. ҰݴͰ͍͏ͱ…

    View Slide

  13. αʔόΛࣗલͰ༻ҙͤͣ
    ϚωʔδυαʔϏεʹཔΔ
    ΞʔΩςΫνϟ

    View Slide

  14. αʔόʔϨεΑΓ΋
    αʔϏεϑϧ
    ͷ΄͏͕ͬ͘͠Γ͘Δ
    ※ड͚ചΓͰ͢
    Track 2 GCP.AWSͱ͍ΘΏΔSeverlessɺ΄͔Habitatͷ࿩
    https://soundcloud.com/cloudinfra_podcast_ja/track002

    View Slide

  15. ݩωλ
    http://www.slideshare.net/jedi4ever/from-serverless-to-service-full-how-the-role-of-devops-is-evolving

    View Slide

  16. ͱ͋ΔαʔϏε noteʹ͓͚Δɺ
    ͱ͋Δ ϋογϡλά,
    ϢʔβݕࡧAPIͷ
    αʔόʔϨεԽΛ໨ࢦͨ͠
    ݕূͷΞϨίϨ

    View Slide

  17. αʔόʔϨε
    ಋೖͯ͠Έ͍ͨΜ͚ͩͲ
    ஔ͖׵͑ΒΕͦ͏ͳػೳ
    ͳ͍͔ͳ…

    View Slide

  18. ݟ͚ͭͨ!!

    View Slide

  19. ݕ౼ϙΠϯτ
    Ωʔϫʔυ͔ΒϋογϡλάͱϢʔβ໊ΛαδΣετ

    View Slide

  20. ݱࡏͷαʔόߏ੒
    EC2(ΞϓϦέʔγϣϯ)
    ELB EC2(Elasticsearch)
    PC

    View Slide

  21. ݕ౼ϙΠϯτͱͨ͠ϫέ
    • ϚωʔδυαʔϏε΁ͷ੾Γସ͑
    • ਓతϦιʔεͷίετμ΢ϯ
    • ΞϓϦέʔγϣϯαʔό͔Βͷಠཱ
    • ෛՙͷܰݮ
    • Մ༻ੑ
    • อकੑ (Մಡੑ, ϘτϧωοΫ΍ো֐ͷ੾Γ෼͚)
    • (͋ΘΑ͘͹) αʔόඅͷίετμ΢ϯ

    View Slide

  22. Lambda
    ͱ
    API Gateway
    ͱ
    Elasticsearch Service
    ͷػӡΛಘͨ!!

    View Slide

  23. AWS Lambda ͱ͸
    • ԿΒ͔ͷΠϕϯτΛτϦΨʔʹॲཧΛ࣮ߦͰ͖Δ
    • S3ͷಛఆόέοτ΁ͷϑΝΠϧΞοϓϩʔυ
    • KinesisͷετϦʔϜ΁ͷσʔλૠೖ
    • DynamoDBͷςʔϒϧߋ৽
    • εέδϡʔϥʔ
    • Πϯϑϥͷ؅ཧ͕ෆཁ
    • ΦʔτεέʔϦϯά
    • ࡉ͔͍ྉۚମܥ

    View Slide

  24. AWS Lambda ͱ͸
    http://www.slideshare.net/youyo_/jawsdays2016-aws-lambda-59462755

    View Slide

  25. ͜ͷ͓ํ(ੴᖒ͞Μ)ʹฉ͚͹
    Lambdaͷશ͕ͯΘ͔Δ͸ͣ!!
    …ͱ͓΋͍·͢

    View Slide

  26. Amazon API Gatewayͱ͸
    • RESTFulͳAPIͷΤϯυϙΠϯτͷఏڙ͕Ͱ͖Δ
    • AWSͷ֤छαʔϏε
    • طଘͷΞϓϦέʔγϣϯ
    • ηΩϡϦςΟ(ೝূ)
    • IAM
    • Cognito
    • Custom Authorizer
    • Πϯϑϥͷ؅ཧ͕ෆཁ
    • ΦʔτεέʔϦϯά

    View Slide

  27. Amazon Elasticsearch Serviceͱ͸
    • ElasticsearchͷϚωʔδυαʔϏε
    • Elasticsearchͱ͸Elastic͔ࣾΒఏڙ͞Ε͍ͯΔݕࡧΤϯδϯ
    • Luceneͱ͍͏શจݕࡧΤϯδϯΛόοΫΤϯυʹ࣋ͭ
    • RESTFulͳAPIͰσʔλͷૢ࡞͕Մೳ
    • σϓϩΠ͕؆୯
    • Πϯετʔϧ࡞ۀͳͲ͕ෆཁ
    • ؅ཧ͕؆୯
    • ো֐ݕग़
    • ϊʔυͷަ׵
    • σʔλόοΫΞοϓ

    View Slide

  28. αʔόʔϨεͳߏ੒
    API Gateway
    PC Lambda Elasticsearch Service

    View Slide

  29. ͱ͸͍͑ɺ
    ͲΕ΋৮ͬͨ͜ͱͳ͔ͬͨͷͰ…

    View Slide

  30. श͏ΑΓ׳ΕΖͱ͍͏͜ͱͰ…

    View Slide

  31. Lambdaͱ
    API Gatewayͱ
    Elasticsearch Service
    ΛབྷΊͨ
    ؆୯ͳWebΞϓϦΛ࡞ͬͯ
    ཧղΛਂΊΔ͜ͱʹͨ͠

    View Slide

  32. ·ͣ͸ͬ͟ͱλεΫͷચ͍ग़͠

    View Slide

  33. View Slide

  34. ઌਓͷ஌ܙ͸
    ଘ෼ʹ࢖Θͳ͍ͱଛͰ͢ΑͶ??

    View Slide

  35. View Slide

  36. Lambda, API GatewayपΓͷΤίγεςϜ
    • Serverless (http://serverless.com/)
    • Apex (http://apex.run/)
    • Zappa (https://zappa.gun.io/)
    • Fluct (https://github.com/fluct/fluct)
    • Lamvery (https://github.com/marcy-terui/lamvery)

    View Slide

  37. Lambda, API GatewayपΓͷΤίγεςϜ
    • Serverless (http://serverless.com/)
    • Apex (http://apex.run/)
    • Zappa (https://zappa.gun.io/)
    • Fluct (https://github.com/fluct/fluct)
    • Lamvery (https://github.com/marcy-terui/lamvery)

    View Slide

  38. Serverless
    • LambdaΛ؆୯ʹϓϩάϥϛϯά͢ΔͨΊͷ࿮૊Έ
    (ϑϨʔϜϫʔΫ)Λఏڙ
    • LambdaͱAPI GatewayΛσϓϩΠ͢ΔͨΊͷίϚϯυ
    Λఏڙ
    • ϩʔΧϧͰLambdaΛಈ͔͢࢓૊ΈΛఏڙ
    • αϙʔτ͍ͯ͠Δݴޠ͸ɺNode.js, Python, Java

    View Slide

  39. Apex
    • LambdaΛ؆୯ʹϓϩάϥϛϯά͢ΔͨΊͷ࿮૊Έ
    (ϑϨʔϜϫʔΫ)Λఏڙ
    • LambdaͱAPI GatewayΛσϓϩΠ͢ΔͨΊͷίϚϯυ
    Λఏڙ
    • αϙʔτ͍ͯ͠Δݴޠ͸ɺNode.js, Python, Java, Go

    View Slide

  40. Apex
    • LambdaΛ؆୯ʹϓϩάϥϛϯά͢ΔͨΊͷ࿮૊Έ
    (ϑϨʔϜϫʔΫ)Λఏڙ
    • LambdaͱAPI GatewayΛσϓϩΠ͢ΔͨΊͷίϚϯυ
    Λఏڙ
    • αϙʔτ͍ͯ͠Δݴޠ͸ɺNode.js, Python, Java, Go

    View Slide

  41. GoΛαϙʔτͯ͠Δ?????

    View Slide

  42. LambdaެࣜυΩϡϝϯτ
    ެࣜʹ͸Node.js, Java, PythonΛαϙʔτ

    View Slide

  43. GoͰॻ͍ͯΈ͔ͨͬͨͷͰ
    Apex࢖ͬͯਐΊΔ͜ͱʹͨ͠
    ஫: ࢲͷGoྗ͸ɺA Tour of Goͱ͍͏νϡʔτϦΞϧΛૡ͍ఠΜͩϨϕϧͰ͢

    View Slide

  44. Goͱ͸
    • ಛ௃
    • ੩తܕ෇͚
    • ฒߦॲཧ͕खܰʹॻ͚Δ
    • ΫϩείϯύΠϧ͕؆୯Ͱ1ͭͷόΠφϦϑΝΠ
    ϧͰಈ࡞͢Δ
    • ඪ४Ͱॆ࣮ͨ͠πʔϧ܈
    • ϚείοτΩϟϥͷGopher͘Μ͕͖΋͔Θ͍͍
    https://golang.org/
    GoogleʹΑͬͯ։ൃ͞Εͨϓϩάϥϛϯάݴޠ

    View Slide

  45. LambdaͰ
    ެࣜαϙʔτ͍ͯ͠ͳͯ͘΋
    GoΛಈ͔ͤΔͷ͸
    ؀ڥʹԠͯ͡
    όΠφϦϑΝΠϧ1ͭͰ
    ಈ࡞͢Δ͔Β

    View Slide

  46. ApexͷGoαϙʔτͷ࣮ଶ͸
    Node.js͔Β
    Go(ίϚϯυ)Λ࣮ߦ͠
    ඪ४ೖग़ྗͰ΍ΓͱΓ

    View Slide

  47. Go on ApexͰHello World

    View Slide

  48. ApexͰHello World
    1. Πϯετʔϧ
    DVSMIUUQTSBXHJUIVCVTFSDPOUFOUDPNBQFYBQFYNBTUFSJOTUBMMTIcTI

    View Slide

  49. ApexͰHello World
    2. ϓϩδΣΫτͷ࡞੒
    NLEJSBQFYTBNQMF
    DEBQFYTBNQMF
    BQFYJOJU
    &OUFSUIFOBNFPGZPVSQSPKFDU*UTIPVMECFNBDIJOFGSJFOEMZ BTUIJT
    JTVTFEUPQSFpYZPVSGVODUJPOTJO-BNCEB

    1SPKFDUOBNFBQFYTBNQMF

    &OUFSBOPQUJPOBMEFTDSJQUJPOPGZPVSQSPKFDU

    1SPKFDUEFTDSJQUJPOBQFYTBNQMF
    ※ࣄલʹIAMͷ४උ͕ඞཁ

    View Slide

  50. ApexͰHello World
    σΟϨΫτϦߏ੒
    USFF

    ᵓᴷᴷGVODUJPOT
    ᴹᵓᴷᴷIFMMP
    ᴹᴹᵓᴷᴷGVODUJPOKTPO
    ᴹᴹᵋᴷᴷJOEFYKT
    ᵋᴷᴷQSPKFDUKTPO

    View Slide

  51. ApexͰHello World
    {
    "description": “hello world function",
    "runtime": "golang"
    }
    3. function.jsonΛमਖ਼

    View Slide

  52. ApexͰHello World
    package main
    import (
    "encoding/json"
    "github.com/apex/go-apex"
    )
    type message struct {
    Hello string `json:"hello"`
    }
    func main() {
    apex.HandleFunc(func(event json.RawMessage, ctx *apex.Context) (interface{}, error) {
    var m message
    if err := json.Unmarshal(event, &m); err != nil {
    return nil, err
    }
    return m, nil
    })
    }
    4. main.goΛ༻ҙ

    View Slide

  53. ApexͰHello World
    {
    "hello": "world"
    }
    5. event.jsonΛ༻ҙ

    View Slide

  54. ApexͰHello World
    σΟϨΫτϦߏ੒
    USFF

    ᵓᴷᴷGVODUJPOT
    ᴹᵓᴷᴷIFMMP
    ᴹᴹᵓᴷᴷFWFOUKTPO
    ᴹᴹᵓᴷᴷGVODUJPOKTPO
    ᴹᴹᵋᴷᴷNBJOHP
    ᵋᴷᴷQSPKFDUKTPO

    View Slide

  55. ApexͰHello World
    6. Lambda΁σϓϩΠ
    BQFYEFQMPZIFMMP

    View Slide

  56. ApexͰHello World
    7. ϑΝϯΫγϣϯΛ࣮ߦ͢Δ
    BQFYJOWPLFIFMMPFWFOUKTPO
    \IFMMPXPSME^

    View Slide

  57. ࡞ͬͨWebΞϓϦͷ঺հ

    View Slide

  58. WebΞϓϦ (࢓༷)
    • Ωʔϫʔυؚ͕·ΕΔσʔλΛAPI Gateway → Lambda →
    Elasticseach ServiceΛհͯ͠औ͖ͬͯͨ΋ͷΛදࣔ
    • αϯϓϧσʔλ͸໿20ສ݅
    • είΞͷܭࢉ͸͍ͯ͠ͳ͍

    View Slide

  59. WebΞϓϦ (APIͷϨεϙϯε)
    {
    "result": [
    {
    "access_count": "1064",
    "address": "ळాࢢେொ5-4-16ΞδϚοΫεϏϧ1ʙ2F",
    "category": "110",
    "closed": "0",
    "description": "",
    "location": "",
    "menu_count": "0",
    "name": "ळాॳେτϩ1؏130ԁͷళ͋ͬͺΕण࢘",
    "name_alphabet": "",
    "name_kana": "͖͋ͨ͸͓͓ͭͱΖ͍͔ͬΜͻΌ͘͞Μ͡Ύ͏͑ΜͷΈͤ͋ͬͺΕͣ͠",
    "photo_count": "0",
    "purpose": "",
    "restaurant_id": "371693"
    },
    ɾ
    ɹɹɾ
    ɾ
    }
    ]
    }

    View Slide

  60. WebΞϓϦ (αϯϓϧσʔλ)
    https://github.com/livedoor/datasets

    View Slide

  61. WebΞϓϦ (αϯϓϧσʔλ౤ೖ)
    func main() {
    fp, err := os.Open("fixtures/restaurants.csv")
    if err != nil {
    panic(err)
    }
    defer fp.Close()
    reader := csv.NewReader(fp)
    reader.Comma = ','
    reader.LazyQuotes = true
    client, err := elastic.NewClient(
    elastic.SetSniff(false),
    elastic.SetURL(os.Getenv("ES_HOST")),
    )
    if err != nil {
    // Handle error
    panic(err)
    }
    bulkRequest := client.Bulk()
    i := 0
    for {
    record, err := reader.Read()
    if err == io.EOF {
    break
    } else if err != nil {
    panic(err)
    }
    restaurant := newRestaurant(record)
    mapingData := toMapingData(restaurant)
    indexReq := elastic.NewBulkIndexRequest().Index("ldgourmet").Type("restaurant").Doc(mapingData)
    bulkRequest = bulkRequest.Add(indexReq)
    if i%1000 == 0 {
    bulkResponse, err := bulkRequest.Do()
    if err != nil {
    panic(err)
    }
    if bulkResponse == nil {
    panic("expected bulkResponse to be != nil; got nil")
    }
    }
    i++
    }
    if bulkRequest.NumberOfActions() > 0 {
    bulkRequest.Do()
    }
    }
    ࢖༻ϥΠϒϥϦ: https://github.com/olivere/elastic
    CSVͷߦΛಡΈࠐΈ
    ߏ଄ମʹม׵͠ɺ
    ESʹ1000݅୯ҐͰ
    όϧΫΠϯαʔτ

    View Slide

  62. WebΞϓϦ (LambdaͰಈ͍͍ͯΔϓϩάϥϜ)
    func main() {
    apex.HandleFunc(func(event json.RawMessage, ctx *apex.Context) (interface{}, error) {
    client, err := elastic.NewClient(
    elastic.SetSniff(false),
    elastic.SetURL(os.Getenv("ES_HOST")),
    )
    if err != nil {
    panic(err)
    }
    var in input
    if err := json.Unmarshal(event, &in); err != nil {
    panic(err)
    }
    q := elastic.NewQueryStringQuery(in.SearchWord)
    q = q.DefaultField("name")
    searchResult, err := client.Search().
    Index("ldgourmet").
    Query(q).
    Sort("name", true).
    From(0).Size(30).
    Pretty(true).
    Do()
    if err != nil {
    panic(err)
    }
    var out output
    var ttyp restaurant
    for _, item := range searchResult.Each(reflect.TypeOf(ttyp)) {
    if t, ok := item.(restaurant); ok {
    out.Restaurants = append(out.Restaurants, t)
    }
    }
    return out, nil
    })
    }
    ࢖༻ϥΠϒϥϦ: https://github.com/olivere/elastic
    ESͷσʔλݕࡧ
    ES͔ΒͷऔಘσʔλΛ
    ߏ଄ମʹม׵

    View Slide

  63. WebΞϓϦΛ࡞ֶͬͯΜͩ͜ͱ
    • ֤αʔϏεͷઃఆʹ͍ͭͯ
    • ApexΛར༻ͨ͠GoͰͷ࣮૷ํ๏ͱσϓϩΠ·
    Ͱͷաఔ
    • API Gateway <-> Lambdaͷͭͳ͗ࠐΈ
    • Lambda <-> Elasticsearch Serviceͷͭͳ͗ࠐΈ

    View Slide

  64. ݕূதʹϋϚͬͨ͜ͱ

    View Slide

  65. API GatewayͱLambdaؒͷϚοϐϯάઃఆ
    • API GatewayͰड͚ͨϦΫΤετ৘ใΛLambda
    ͔Βࢀর͢ΔͨΊʹඞཁ
    • ϚοϐϯάͷςϯϓϨʔτ͸Apache Velocityͱ
    ͍͏ςϯϓϨʔτΤϯδϯ͕࢖ΘΕ͍ͯΔ

    View Slide

  66. API GatewayͱLambdaؒͷϚοϐϯάઃఆ

    View Slide

  67. API Gatewayʹ͓͚ΔCORSͷઃఆ
    • CORS(Cross-origin resource sharing)Λ༗ޮʹ
    ͯ͠ɺAccess-Control-Allow-OriginΛઃఆͯ͠
    ͋͛ͳ͍ͱ 'Access-Control-Allow-Origin'
    header is present on the requested resource.
    ͱ͍͏Τϥʔ͕ൃੜ (͍ΘΏΔΫϩευϝΠϯ
    ໰୊)

    View Slide

  68. API Gatewayʹ͓͚ΔCORSͷઃఆ

    View Slide

  69. API Gatewayͷઃఆมߋ͕൓ө͞Εͳ͍
    • Ϛοϐϯάͷઃఆ͸൓ө͞Ε͕ͨɺCORSͷઃఆ
    ͸API Actions -> deploy APIΛ࣮ߦ͠ͳ͍ͱ൓ө
    ͞Εͳ͔ͬͨ
    • deploy͕ඞཁͳ΋ͷͱෆཁͳ΋ͷ͕͋Δͷ͔
    ΋ɻ൓ө͞Εͳ͔ͬͨΒ͜͜Λٙ͏΂͠ɻ

    View Slide

  70. API Gatewayͷઃఆมߋ͕൓ө͞Εͳ͍

    View Slide

  71. Lambdaͷσόοά͕໘౗
    • ͍͍ͪͪσϓϩΠ͢Δඞཁ͕͋Δ(ServerlessͰ͋
    Ε͹ϩʔΧϧͰಈ͘ͷͰෆཁ)
    • ApexͰϥϯλΠϜΛGoʹͨ͠৔߹ɺprint debug
    Λ͢Δํ๏͕Θ͔Βͳ͔ͬͨ
    • Tips
    • apex logs ίϚϯυ͕ศར
    BQFYMPHTTFBSDI
    BXTMBNCEBBQFYTBNQMF@TFBSDI45"353FRVFTU*EEBFBGDCGB
    7FSTJPO
    BXTMBNCEBBQFYTBNQMF@TFBSDI&/%3FRVFTU*EEBFBGDCGB
    BXTMBNCEBBQFYTBNQMF@TFBSDI3&10353FRVFTU*EEBFBGDCGB
    %VSBUJPONT #JMMFE%VSBUJPONT .FNPSZ4J[F.# .BY.FNPSZ6TFE.#

    View Slide

  72. ࠓޙͷ՝୊

    View Slide

  73. Lambdaͷݴޠબఆ
    • બఆͷͨΊͷࡐྉΛूΊΔ
    • ֤ݴޠͷϝϦοτɾσϝϦοτ
    • νʔϜͷεΩϧηοτ
    • Ϟνϕʔγϣϯ

    View Slide

  74. Lambdaʹ͓͚ΔϩάͷՄࢹԽ | ෼ੳ | Τϥʔ௨஌
    • CloudWatch LogsͰݟΕΔʹ͸ݟΕΔ͕ࡉ͔͍෼
    ੳ͕ඞཁͳͱ͖ͳͲ͸গʑΊΜͲ͏
    • CloudWatch Logs͸͋͘·ͰࢀߟϨϕϧͱׂΓ͖
    ΓɺS3΁όονΤΫεϙʔτ͠ɺdatadog΍
    bugsnagͳͲ޷͖ͳαʔϏεʹσʔλϩʔυ͢Δ

    View Slide

  75. Lambdaʹ͓͚Δࢿݯͷڞ༗
    • ΞϓϦέʔγϣϯͱ࢖༻ݴޠ͕ҟͳΔ৔߹
    (Lambda͸GoɺΞϓϦέʔγϣϯ͕Rails(Ruby)ͳ
    Ͳʣɺݴޠؒͷࢿݯ(ιʔείʔυ)ͷڞ༗͕೉͍͠
    • ORM༻ͷModelΫϥεΛੜ੒͢Δπʔϧ(Railsͷ
    ActiveRecord͔ΒGoͷgorm etc…)͘Β͍͸༻ҙ
    ͓͖͍ͯͨ͠
    • ΞϓϦέʔγϣϯͱ࢖༻ݴޠΛ౷ҰͰ͖ΔͳΒͦ
    Εʹӽͨ͜͠ͱ͸ͳ͍

    View Slide

  76. API Gatewayͷೝূ
    • API KeyͰڐ༰ग़དྷͳ͍৔߹ͷߟྀ͕ඞཁ
    • IAM or Cognito or Custom Authorizer
    • Custom AuthorizerΛར༻ͯ͠JWT or OAuthͰ

    View Slide

  77. Elasticsearch Serviceͷαϙʔτঢ়گ
    • VPCະରԠ
    • ηΩϡϦςΟͷ୲อ͸IAMͱಛఆIPڐՄ
    • ϨΠςϯγ͕ؾʹͳΔ৔߹͸VPCରԠ·Ͱ͸ࣗલͰؤுΔ
    ͔͠ແ͍
    • ଴ͬͯΕ͹͍ͣΕରԠ͸͞ΕΔ͸ͣ
    • Elasticsearchͷόʔδϣϯ͕બ΂ͳ͍ + ௥ै͕஗͍
    • 2016/06/25ݱࡏ 1.5.2ɻຊՈ͸2.3.3ɻ
    • ࠷৽ͷόʔδϣϯΛར༻͍ͨ͠৔߹͸ࣗલͰؤுΔ͔͠ແ
    ͍
    • Ҡߦ࣌ʹݹ͍όʔδϣϯ΁ͷϦετΞ͕ग़དྷͳ͍ͷͰ஫ҙ

    View Slide

  78. ύϑΥʔϚϯεͱεέʔϥϏϦςΟ
    • ୲อͯ͘͠ΕΔͱ͸͍͑ɺͲͷఔ౓ͷ΋ͷ͔೺Ѳ͓ͯ͠
    ͖͍ͨ
    • πʔϧ
    • ఆ൪ͷApache Bench (http://httpd.apache.org/docs/
    2.4/programs/ab.html)
    • LambdaʹߜΔͳΒgoad (https://github.com/
    goadapp/goad)

    View Slide

  79. CIͱσϓϩΠઓུ
    • લड़ͷ௨ΓLambda͸σόοά͕େมͳͷͰɺϩδοΫ͸ͳ
    Δ΂͘෼཭͠ɺCIͰςετΛճͤΔΑ͏ʹ͍ͨ͠
    • σϓϩΠͷϑϩʔ͸ΞϓϦέʔγϣϯಉ༷ɺCI͕௨ͬͨΒࣗ
    ಈͰσϓϩΠ͢ΔΑ͏ͳ͘͠Έʹ͍ͨ͠ (CircleCI + Apex)
    • LambdaͱAPI GatewayͷϦιʔε؅ཧ͸Apex(࣮ଶ͸
    Terraform)ʹ೚͍ͤͨ
    • ςετ͸awspec(https://github.com/k1LoW/awspec)Ͱ

    View Slide

  80. ·ͱΊ

    View Slide

  81. খ׳Εͯ͘Ε͹
    αʔόηοτΞοϓ͕
    ෆཁͳ෼
    εϐʔσΟʔʹ
    ϦϦʔεͰ͖Δ(ϋζ)

    View Slide

  82. εέʔϦϯά΍
    όοΫΞοϓΛ
    ೚ͤΔ͜ͱ͕Ͱ͖Δ෼
    ӡ༻ίετ΋
    ݮΔ(ϋζ)

    View Slide

  83. ۜͷ஄ؙ
    Ͱ͸ͳ͍ͷͰɺ
    τϨʔυΦϑ
    Λ͔ͬ͠Γͱ཈͑
    ద੾ʹར༻͢Δ

    View Slide

  84. ΈΜͳͰ৭ʑࢼͯ͠
    ஌ݟΛڞ༗͠·͠ΐ͏!!

    View Slide

  85. Let's Enjoy AWS

    View Slide

  86. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠

    View Slide