Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up
for free
AWS Lambda Swift Runtime
giginet
December 15, 2018
Programming
0
180
AWS Lambda Swift Runtime
https://github.com/giginet/aws-lambda-swift-runtime
https://hakata-swift.connpass.com/event/100775/
giginet
December 15, 2018
Tweet
Share
More Decks by giginet
See All by giginet
giginet
0
1.7k
giginet
4
2.1k
giginet
3
6k
giginet
0
900
giginet
1
6.4k
giginet
13
4.7k
giginet
0
89
giginet
2
190
giginet
3
240
Other Decks in Programming
See All in Programming
azdaroth
0
160
siketyan
1
110
dulltz
0
500
hanhan1978
0
290
line_developers_tw
0
1.2k
mizdra
7
4.8k
kyonmm
2
2.1k
line_developers_tw2
0
650
azdaroth
0
120
chichou
1
830
cocoeyes02
0
220
komagata
1
1.8k
Featured
See All Featured
lynnandtonic
270
16k
addyosmani
494
110k
reverentgeek
27
1.9k
chriscoyier
780
240k
gr2m
83
11k
tanoku
86
8.5k
caitiem20
308
17k
frogandcode
127
20k
robhawkes
52
2.8k
andyhume
62
3.3k
sstephenson
144
12k
malarkey
192
8.5k
Transcript
AWS Lambda Swi, Run0me @giginet
@giginet • Cookpad Inc. ϞόΠϧج൫ • εϚϒϥͷ࣋ͪΩϟϥ • ϤογʔɺΞΠεΫϥΠϚʔɺσΟσΟʔίϯά
re:Inventߦ͖ͬͯͨ
re:Invent • Amazonओ࠵ͷAWS։ൃऀ͚ΧϯϑΝϨϯε • 11/26 ~ 11/30 @ Las Vegas
• ࢀՃऀ50000ਓ • ڊେϗςϧ5ݸ͙Β͍͏
None
None
AWSͷओͳϞόΠϧ͚αʔϏε • Pinpoint: FCMΈ͍ͨͳͭ • Device Farm: Firebase TestLabΈ͍ͨͳͭ •
AppSync • DynamoDBͱ͔LambdaͷGraphQLΠϯλʔϑΣΠεఏڙ͢Δ ͭ • Mobile Hub: ͳΜ͔͍Ζ͍ΖͰ͖Δͭ
ࠓൃද͞ΕͨϞόΠϧαʔϏε
ແ
AWS Lambda • APIୟ͘ͱϫϯγϣοτͰεΫϦϓτ͕࣮ߦ • αʔόʔϨεΞϓϦέʔγϣϯ͕ߏஙͰ͖Δ • ཁAWS൛Firebase CloudFunc6onΈ͍ͨͳͭ
AWS Lambda Custom Run1me • ࠓ·ͰPythonJavaScriptͳͲɺҰ෦ͷݴޠͷΈΛαϙʔτ͠ ͍ͯͨ • AWS LambdaͰҙͷݴޠͰॻ͍ͨίʔυΛ࣮ߦͰ͖ΔΑ͏ʹ
ͳͬͨ
COBOL͕ಈ͘
AWS Lambda Run-me for Swi4 • COBOL͕ಈ͘ͳΒSwi)ಈͩ͘Ζ͏ͱࡶʹ࡞ͬͨ • h+ps:/ /github.com/giginet/aws-lambda-swi)-run?me
AWS Lambda Run-meͷ࣮ • C++/RustͷϦϑΝϨϯε࣮͕͋ͬͨͷͰࢀߟʹͨ͠ • h*ps:/ /github.com/awslabs/aws-lambda-cpp • h*ps:/
/github.com/awslabs/aws-lambda-rust-run;me
Lambda Run*meΈ • AWS Lambdaͷఏڙ͢ΔREST APIΛεΫϦϓτ͔Βpolling • ࣮ߦͰ͖Δஈ֊ʹͳͬͨΒPayloadͱ͔͕ฦͬͯ͘ΔͷͰϢʔ βʔͷॻ͍ͨϋϯυϥͰॲཧ •
ޭɺࣦഊ࣌ʹAPIୟ͍ͯLambdaଆʹ௨
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<GreetingError> 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") }
$ aws lambda invoke --function-name hello-swift --payload '{"username": "giginyan"}' output.txt
Hello giginyan
࣮ߦόΠφϦͷ࡞ • Amazon Linux্Ͱಈ͘Swi/όΠφϦΛ࡞ͯ͠AWSʹΞοϓ ϩʔυ͢Δ • docker-swi/ͰUbuntu͚ʹϏϧυͨ͠όΠφϦͰಈ࡞ͨ͠ ͷͰDockerͰϏϧυ͢Δ
• -static-stdlibͷίϯύΠϥϑϥάΛ͢͜ͱͰϫϯόΠφ ϦʹͰ͖Δ $ swift build --configuration release -Xswiftc -static-stdlib
• 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
None
None
• 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
ݱঢ় • ཧͰ͖͍ͯΔ͕·ͩͰ͖͍ͯͳ͍ • 2ि͙ؒΒ͍લʹ͍Ͱ༗څΛऔͬͯ࡞͕ͬͨɺͦͷޙεϚ ϒϥ͕ग़ͯਐḿ͕ऴΘͬͨ
ղܾࡦ 1. LinuxͰಈ͘ϫϯόΠφϦΛੜͰ͖ΔΑ͏ʹapple/swi/ͰରԠ 2. AWS Lambda Layer͏ • ඪ४ϥΠϒϥϦΛϨΠϠʔଆʹ࣋ͬͯDynamic LinkͰղܾ
AWS Lambda Layer
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠