Swiftでサーバーサイドを書いてAWS Lambdaで動かそう
サーバレスSwiftサーバーサイドへようこそ
さて、みなさん、サーバーサイドを書くときは何の言語で書いてますか?
Go?Node.js?Python?Ruby?Java?
今日はSwiftでサーバレスなサーバーサイド書いていきましょう。
Appleが開発した言語で、軽量で読みやすいのが特徴です。
使うもの
SwiftをAWS Lambdaでデプロイするのに使用するパッケージは以下がおすすめです。
このパッケージをより使いやすくするためのVSCode拡張もあります。今日はこちらを使っていきます。
やること
1. 必要ツールのインストール
以下のツールが必要になるので事前に入れていきましょう。Macユーザーならasdfで全部入ります。
2. VSCode拡張のインストール
VSCode AWS Lambda Swift
と入れて一番上の拡張を入れましょう。
3. ダッシュボードを開く
Cmd+Shift+P
でコマンドパレットを開き、Swift
と入れてダッシュボードを開きます。
4. プロジェクトの初期化
ここから先はダッシュボードの指示に従っていくだけです。
プロジェクト名を入れて
api-to-lambda
のテンプレートを選択し、Initializeボタンを押します。
こうすることでAPI GatewayとSwift Lambdaが立ち上がるSAMテンプレートが作られます。
5. コードを書く
ここまできたらいよいよSwiftを書いていきましょう。
Sources/HelloWorld/LambdaHandler.swift
に以下のようなコードを書きます。
今回は名前をおうむ返しするようなAPIを作っていきます。
import AWSLambdaRuntime
import AWSLambdaEvents
@main
struct HelloWorld: SimpleLambdaHandler {
func handle(_ event: APIGatewayV2Request, context: LambdaContext) async throws -> APIGatewayV2Response {
let name = event.queryStringParameters?["name"] ?? "World"
let body = "Hello Serverless Swift, \(name)!"
return APIGatewayV2Response(statusCode: .ok, body: body)
}
}
6. プロジェクトのビルド
コードが書けたら、Buildボタンを押しましょう。
7. ローカルでのInvokeテスト
テストに使うリクエストを定義するjsonを書き換えましょう
events/event.jsonの以下の部分です
# 14行目から17行目
"queryStringParameters": {
"parameter1": "value1,value2",
"parameter2": "value"
},
↓
# 以下に(好きな名前に)変更
"queryStringParameters": {
"name": "Yuki"
},
ここまでできたらInvokeボタンを押します。
テスト用のDockerイメージのビルドが走り、成功すると以下のように出力されます。
8. プロジェクトをLambdaにデプロイ
AWSにデプロイされるリソース名を入力し、Deployボタンを押します。
デプロイされると以下のようにAPI GatewayエンドポイントのURLが表示され、リクエストできるようになります。
9. Lambda関数上でのInvokeテスト
最後に、Lambda関数が動くかもテストしてみましょう!
無事動いていますね。
以下のようなcurlコマンドでも確認できるはずです。
curl "https://{API GatewayのID}.execute-api.ap-northeast-1.amazonaws.com?name=Yuki"
まとめ
簡単にコードが書けて、簡単にデプロイができるサーバレスSwiftサーバーサイド、あなたもはじめてみませんか!!!
余談:この記事を書こうと思ったきっかけ
12/2-6までAWS re:invent2024に参加しておりました。
AI系や仕事に関わるEKSのsessionに参加する中で、ひとつ純粋な興味だけで参加したsessionがありました。
DEV334 | Swift, server-side, serverless
登壇していたAWSのPrincipal Developer AdvocateのSébastienさんがあまりにもSwiftサーバーサイドに愛があるsessionをしており、これは日本に帰ったらすぐに試したいなと思って、手を動かし、記事にしました!
re:invent滞在記はこちら
このsessionの登壇者がゲストのPodcastもすごく面白いのでぜひ!
Discussion