Slide 1

Slide 1 text

AWS Lambda Swi, Run0me @giginet

Slide 2

Slide 2 text

@giginet • Cookpad Inc. ϞόΠϧج൫ • εϚϒϥͷ࣋ͪΩϟϥ • ϤογʔɺΞΠεΫϥΠϚʔɺσΟσΟʔίϯά

Slide 3

Slide 3 text

re:Inventߦ͖ͬͯͨ

Slide 4

Slide 4 text

re:Invent • Amazonओ࠵ͷAWS։ൃऀ޲͚ΧϯϑΝϨϯε • 11/26 ~ 11/30 @ Las Vegas • ࢀՃऀ50000ਓ • ڊେϗςϧ5ݸ͙Β͍࢖͏

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

AWSͷओͳϞόΠϧ޲͚αʔϏε • Pinpoint: FCMΈ͍ͨͳ΍ͭ • Device Farm: Firebase TestLabΈ͍ͨͳ΍ͭ • AppSync • DynamoDBͱ͔LambdaͷGraphQLΠϯλʔϑΣΠεఏڙ͢Δ ΍ͭ • Mobile Hub: ͳΜ͔͍Ζ͍ΖͰ͖Δ΍ͭ

Slide 8

Slide 8 text

ࠓ೥ൃද͞ΕͨϞόΠϧαʔϏε

Slide 9

Slide 9 text

Slide 10

Slide 10 text

AWS Lambda • APIୟ͘ͱϫϯγϣοτͰεΫϦϓτ͕࣮ߦ • αʔόʔϨεΞϓϦέʔγϣϯ͕ߏஙͰ͖Δ • ཁ͸AWS൛Firebase CloudFunc6onΈ͍ͨͳ΍ͭ

Slide 11

Slide 11 text

AWS Lambda Custom Run1me • ࠓ·ͰPython΍JavaScriptͳͲɺҰ෦ͷݴޠͷΈΛαϙʔτ͠ ͍ͯͨ • AWS LambdaͰ೚ҙͷݴޠͰॻ͍ͨίʔυΛ࣮ߦͰ͖ΔΑ͏ʹ ͳͬͨ

Slide 12

Slide 12 text

COBOL͕ಈ͘

Slide 13

Slide 13 text

AWS Lambda Run-me for Swi4 • COBOL͕ಈ͘ͳΒSwi)΋ಈͩ͘Ζ͏ͱࡶʹ࡞ͬͨ • h+ps:/ /github.com/giginet/aws-lambda-swi)-run?me

Slide 14

Slide 14 text

AWS Lambda Run-meͷ࣮૷ • C++/RustͷϦϑΝϨϯε࣮૷͕͋ͬͨͷͰࢀߟʹͨ͠ • h*ps:/ /github.com/awslabs/aws-lambda-cpp • h*ps:/ /github.com/awslabs/aws-lambda-rust-run;me

Slide 15

Slide 15 text

Lambda Run*me࢓૊Έ • AWS Lambdaͷఏڙ͢ΔREST APIΛεΫϦϓτ͔Βpolling • ࣮ߦͰ͖Δஈ֊ʹͳͬͨΒPayloadͱ͔͕ฦͬͯ͘ΔͷͰϢʔ βʔͷॻ͍ͨϋϯυϥͰॲཧ • ੒ޭɺࣦഊ࣌ʹAPIୟ͍ͯLambdaଆʹ௨஌

Slide 16

Slide 16 text

import Foundation import AWSLambdaRuntime struct User: Decodable { let firstName: String } enum GreetingError: String, LambdaError { var message: String { switch self { case .invalidPayload: return "Payload is invalid" } } case invalidPayload } run { context -> Result in guard let data = context.payload, let user = try? JSONDecoder().decode(User.self, from: data) else { return .failure(error: .invalidPayload) } let payload = try! JSONSerialization.data(withJSONObject: ["message": "Hello \(user.firstName)"]) return .success(payload: payload, contentType: "application/json") }

Slide 17

Slide 17 text

$ aws lambda invoke --function-name hello-swift --payload '{"username": "giginyan"}' output.txt Hello giginyan

Slide 18

Slide 18 text

࣮ߦόΠφϦͷ࡞੒ • Amazon Linux্Ͱಈ͘Swi/όΠφϦΛ࡞੒ͯ͠AWSʹΞοϓ ϩʔυ͢Δ • docker-swi/ͰUbuntu޲͚ʹϏϧυͨ͠όΠφϦͰ΋ಈ࡞ͨ͠ ͷͰDockerͰϏϧυ͢Δ

Slide 19

Slide 19 text

• -static-stdlibͷίϯύΠϥϑϥάΛ౉͢͜ͱͰϫϯόΠφ ϦʹͰ͖Δ $ swift build --configuration release -Xswiftc -static-stdlib

Slide 20

Slide 20 text

• libdispatch͕Sta-c LinkͰ͖ͳͯ͘ࢮ͵ Compile Swift Module 'Example' (1 sources) Linking ./.build/x86_64-unknown-linux/debug/Example /usr/bin/ld.gold: error: cannot find -ldispatch

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

• docker-swi,Λforkͯ͠ɺ࠷৽ͷToolchainΛؚΜͩDockerίϯ ςφͰϏϧυ͢ΔΑ͏ʹͯ͠Έͨ • ͕ɺͦΕͰ΋͏·͘ߦ͔ͳͯ͘ϋϚͬͨʢ๨Εͨʣ $ swift build -c release -Xswiftc -static-stdlib $ /usr/bin/swift-build: error while loading shared libraries: libBlocksRuntime.so.0: cannot open shared object file: No such file or directory

Slide 24

Slide 24 text

ݱঢ় • ࿦ཧͰ͖͍ͯΔ͕·ͩͰ͖͍ͯͳ͍ • 2ि͙ؒΒ͍લʹ੎͍Ͱ༗څΛऔͬͯ࡞͕ͬͨɺͦͷޙεϚ ϒϥ͕ग़ͯਐḿ͕ऴΘͬͨ

Slide 25

Slide 25 text

ղܾࡦ 1. LinuxͰಈ͘ϫϯόΠφϦΛੜ੒Ͱ͖ΔΑ͏ʹapple/swi/ͰରԠ 2. AWS Lambda Layer࢖͏ • ඪ४ϥΠϒϥϦΛϨΠϠʔଆʹ࣋ͬͯDynamic LinkͰղܾ

Slide 26

Slide 26 text

AWS Lambda Layer

Slide 27

Slide 27 text

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