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

Application development with AWS Lambda and Kotlin

Application development with AWS Lambda and Kotlin

Kotlin Tech Talk ( https://mercari.connpass.com/event/206751/ ) の資料

Hiroyuki Kusu

April 05, 2021
Tweet

More Decks by Hiroyuki Kusu

Other Decks in Programming

Transcript

  1. Application development with


    AWS Lambda and Kotlin
    2021.04.05 Kotlin Tech Talk #merpay_techtalk


    Hiroyuki Kusu ( @hkusu_ )

    View Slide

  2. About me

    View Slide

  3. https://aws.amazon.com/jp/lambda/
    ݱ࣌఺Ͱ͸ Java ͸ Java 8 ͱ Java 11 ͕࢖͑Δ

    View Slide

  4. "1*(BUFXBZ
    )551
    ఆظ࣮ߦ
    -BNCEB+BWB,PUMJO
    ͷΤίγεςϜ
    *P5
    4/4 4
    %ZOBNP%#
    "84ϦιʔεΛར༻
    )551
    ೚ҙͷαʔϏεΛར༻
    ʢ(JU)VC"1* 4MBDL"1* FUDʣ
    "84Ϧιʔε͔Βىಈ
    )551Ͱىಈ

    View Slide

  5. "1*(BUFXBZ
    )551
    ఆظ࣮ߦ
    -BNCEB+BWB,PUMJO
    ͷΤίγεςϜ
    *P5
    4/4 4
    %ZOBNP%#
    "84ϦιʔεΛར༻
    )551
    ೚ҙͷαʔϏεΛར༻
    ʢ(JU)VC"1* 4MBDL"1* FUDʣ
    "84Ϧιʔε͔Βىಈ
    )551Ͱىಈ

    View Slide

  6. "1*(BUFXBZ
    )551
    ఆظ࣮ߦ
    -BNCEB+BWB,PUMJO
    ͷΤίγεςϜ
    *P5
    4/4 4
    %ZOBNP%#
    "84ϦιʔεΛར༻
    )551
    ೚ҙͷαʔϏεΛར༻
    ʢ(JU)VC"1* 4MBDL"1* FUDʣ
    "84Ϧιʔε͔Βىಈ
    )551Ͱىಈ

    View Slide

  7. "1*(BUFXBZ
    )551
    ఆظ࣮ߦ
    -BNCEB+BWB,PUMJO
    ͷΤίγεςϜ
    *P5
    4/4 4
    %ZOBNP%#
    "84ϦιʔεΛར༻
    )551
    ೚ҙͷαʔϏεΛར༻
    ʢ(JU)VC"1* 4MBDL"1* FUDʣ
    "84Ϧιʔε͔Βىಈ
    )551Ͱىಈ

    View Slide

  8. "1*(BUFXBZ
    )551
    ఆظ࣮ߦ
    -BNCEB+BWB,PUMJO
    ͷΤίγεςϜ
    *P5
    4/4 4
    %ZOBNP%#
    "84ϦιʔεΛར༻
    )551
    ೚ҙͷαʔϏεΛར༻
    ʢ(JU)VC"1* 4MBDL"1* FUDʣ
    "84Ϧιʔε͔Βىಈ
    )551Ͱىಈ

    View Slide

  9. "1*(BUFXBZ
    )551
    ఆظ࣮ߦ
    -BNCEB+BWB,PUMJO
    ͷΤίγεςϜ
    *P5
    4/4 4
    %ZOBNP%#
    "84ϦιʔεΛར༻
    )551
    ೚ҙͷαʔϏεΛར༻
    ʢ(JU)VC"1* 4MBDL"1* FUDʣ
    "84Ϧιʔε͔Βىಈ
    )551Ͱىಈ
    ͜ͷ͋ͨΓ͕͋Ε͹Ϙοτ΍ӡ༻πʔϧྨͷϗεςΟϯά؀ڥͱͯ͠͸े෼

    View Slide

  10. IDE ͸ IntelliJ IDEA Λར༻ ( Community ൛ͳΒແঈ ) ͠ɺ


    Java ΍ Kotlin ͷϓϩδΣΫτςϯϓϨʔτΛ࢖͏ͱ࢝Ί΍͍͢

    View Slide

  11. task buildZip(type: Zip) {


    from compileKotlin


    from processResources


    into('lib') {


    from configurations.compileClasspath


    }


    }


    build.dependsOn buildZip
    Kotlin ͷίʔυΛϏϧυ͢Δ Gradle λεΫ
    ./gradlew build
    Gradle ίϚϯυͰϏϧυ

    View Slide

  12. ※ SAM( Serverless Application Model ) ΍ CloudFormation ͰσϓϩΠͯ͠΋͍͍Ͱ͢
    ؅ཧίϯιʔϧ
    ϏϧυͰੜ੒͞Εͨ zip ϑΝΠϧΛ AWS ͷ؅ཧίϯιʔϧ΁Ξοϓϩʔυ

    View Slide

  13. // Kotlin


    implementation “org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.72”


    implementation “org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.3”


    // Network


    implementation "com.squareup.retrofit2:retrofit:2.7.1"


    implementation "com.squareup.retrofit2:converter-moshi:2.6.0"


    implementation "com.squareup.moshi:moshi:1.8.0"


    implementation "com.squareup.moshi:moshi-kotlin:1.8.0"


    implementation “com.squareup.okhttp3:okhttp:4.3.1”


    implementation “com.squareup.okhttp3:logging-interceptor:4.3.1”


    // AWS


    implementation 'com.amazonaws:aws-lambda-java-core:1.1.0'


    ※ ਵ෼લʹ࡞ͬͨπʔϧͷίʔυ͔ΒҾ༻ͨ͠ͷͰ֤όʔδϣϯ͸ͪΐͬͱݹ͍Ͱ͢..
    ೚ҙͷϥΠϒϥϦ͕ར༻Ͱ͖Δ

    View Slide

  14. // Kotlin


    implementation “org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.72”


    implementation “org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.3”


    // Network


    implementation "com.squareup.retrofit2:retrofit:2.7.1"


    implementation "com.squareup.retrofit2:converter-moshi:2.6.0"


    implementation "com.squareup.moshi:moshi:1.8.0"


    implementation "com.squareup.moshi:moshi-kotlin:1.8.0"


    implementation “com.squareup.okhttp3:okhttp:4.3.1”


    implementation “com.squareup.okhttp3:logging-interceptor:4.3.1”


    // AWS


    implementation 'com.amazonaws:aws-lambda-java-core:1.1.0'


    ※ ਵ෼લʹ࡞ͬͨπʔϧͷίʔυ͔ΒҾ༻ͨ͠ͷͰ֤όʔδϣϯ͸ͪΐͬͱݹ͍Ͱ͢..
    ೚ҙͷϥΠϒϥϦ͕ར༻Ͱ͖Δ

    View Slide

  15. package io.github.hkusu.githubrepositoryreport


    import com.amazonaws.services.lambda.runtime.Context


    import com.amazonaws.services.lambda.runtime.RequestHandler


    class Handler : RequestHandler {


    override fun handleRequest(input: Input, context: Context): Output {


    // do something ...


    return Output(statusCode = 200, body = "OK")


    }


    }


    // API Gateway ͷ Lambda ϓϩΩγ౷߹ͷ৔߹


    data class Input(var body: String? = null) // varͰσϑΥϧτ஋͕ඞཁ


    data class Output(val statusCode: Int, val body: String)

    View Slide

  16. package io.github.hkusu.githubrepositoryreport


    import com.amazonaws.services.lambda.runtime.Context


    import com.amazonaws.services.lambda.runtime.RequestHandler


    class Handler : RequestHandler {


    override fun handleRequest(input: Input, context: Context): Output {


    // do something ...


    return Output(statusCode = 200, body = "OK")


    }


    }


    // API Gateway ͷ Lambda ϓϩΩγ౷߹ͷ৔߹


    data class Input(var body: String? = null) // varͰσϑΥϧτ஋͕ඞཁ


    data class Output(val statusCode: Int, val body: String)

    View Slide

  17. package io.github.hkusu.githubrepositoryreport


    import com.amazonaws.services.lambda.runtime.Context


    import com.amazonaws.services.lambda.runtime.RequestHandler


    class Handler : RequestHandler {


    override fun handleRequest(input: Input, context: Context): Output {


    // do something ...


    return Output(statusCode = 200, body = "OK")


    }


    }


    // API Gateway ͷ Lambda ϓϩΩγ౷߹ͷ৔߹


    data class Input(var body: String? = null) // varͰσϑΥϧτ஋͕ඞཁ


    data class Output(val statusCode: Int, val body: String)
    Input().body = ""

    View Slide

  18. https://github.com/hkusu/aws-lambda-templete-for-kotlin
    AWS Lambda x Kotlin ϓϩδΣΫτͷςϯϓϨʔτ

    View Slide

  19. Thank you !


    @hkusu_

    View Slide

  20. ෇࿥

    View Slide

  21. API Gateway Λ࢖͏৔߹͸ Lambda ϓϩΩγ౷߹ʹ͓ͯ͘͠ͱ


    Lambda ͷೖग़ྗ͕ѻ͍΍͘͢ͳΔ

    View Slide

  22. Lambda ͷϋϯυϥͷઃఆྫ ( ΫϥεͷϑϧύεΛࢦఆ͢Δ )

    View Slide

  23. γʔΫϨοτͳ΋ͷ͸؀ڥม਺΁ઃఆ

    View Slide