LambdaカスタムランタイムでPHPでもサーバーレス︕JAWS-UG TOHOKU フリーテーマでAWSを語る会@2019/07/19@taiko19xx / ⽊村 俊彦
View Slide
いきなりですがLambda好きな⽅︖
PHP好きな⽅︖
今⽇はLambdaとPHPを組み合わせて使おうという話です
もくじ• Lambdaのおさらい• Lambdaカスタムランタイムについて• カスタムランタイムの構築について• ローカル実⾏について• まとめ
Lambdaのおさらい• とても便利で使いやすいサーバーレス実⾏環境• 実⾏できる⾔語(ランタイム)に限りがあるのが難点・・・︖• Node.js/Python/Ruby/Java/Go• .NET Core利⽤のC#/PowerShell• 少しずつ増えてきている• 書き慣れていない⾔語で書く場合は学習コストがかかる• Lambdaカスタムランタイムで解決できるかも︖
Lambdaカスタムランタイムとは• Lambda関数を好きな⾔語で実⾏できる• Linux(Amazon Linux/Amazon Linux 2)で実⾏できるものなら実⾏可• 使い勝⼿は普通のLambda関数と同様• X-Rayとかも使える• https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/runtimes-custom.html
カスタムランタイムの動作の流れ• ランタイム設定が「provided」に設定されている必要がある• 関数を実⾏すると「bootstrap」のファイルが実⾏される• 「$ ./bootstrap」 的な感じで実⾏されるイメージ• ファイルが無いとエラー• bootstrap内で各種バイナリを呼び出したり実⾏する• ハンドラの名前や各種設定は環境変数で渡される
カスタムランタイムの構築
実⾏環境の作成• 実⾏バイナリやライブラリをzipで固めなければならない• かつ、Amazon Linux上でコンパイルされている必要がある• 取得する⼿段• EC2インスタンスで取得• インスタンスを⽴ち上げる必要がある• Amazon LinuxのDockerコンテナを起動して取得• ローカルで完結• Dockerを実⾏できる環境が必要• Dockerの知識も必要
実⾏環境のデプロイ• 関数スクリプトと共にデプロイ• ⼀緒にデプロイできるので楽• 実⾏環境に変更がある度にデプロイする必要がある• Layerとしてデプロイ• スクリプトパッケージサイズが⼩さくできる
Layerとは• 既存のコードとは別に、追加のコードやコンテンツをアーカイブとして設定できるもの• 1つの関数に最⼤5つ設定できる• 関数と、関数に設定したLayerが全てマージされた上で実⾏されるというイメージ• メリット• 関数のデプロイパッケージを⼩さくする事ができる• 複数の関数間でライブラリを共有できる• https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-layers.html
ローカルで実⾏
カスタムランタイムをローカルで実⾏• もちろん可能• AWS CLIとSAM CLIが必要• Dockerも必要• LambdaのDockerイメージを利⽤して実⾏するため• Layerを設定している場合は、実⾏時にAWSからダウンロードしてくる• Windows 10+Docker DesktopだとSAM CLIのバグがあり動かない• https://github.com/awslabs/aws-sam-cli/issues/1014
SAM(Serverless Application Model)とは• AWS上でサーバーレスアプリケーションを構築するためのフレームワーク• CloudFormationを拡張したYAML/JSONで記述• 関数の作成に加え、API Gateway/DynamoDBの設定も簡単にできる• 複雑な設定をする場合は結局CloudFormationっぽくなってしまう
DEMO
まとめ• 良いところ• 使い慣れた⾔語で関数を記述できる• ≒メンテナンスが楽になる• 悪いところ• 環境構築が少し⼤変• Lambda以外の知識がそれなりに必要• DockerとかLinuxとか
⾃⼰紹介• ⽊村俊彦(@taiko19xx)• 株式会社SRIA 制作部 リーダー• PHP/Node.jsを使ったバックエンド構築• AWS/Azure/GCPの設計構築• 技術同⼈誌サークル「杜の都の開発室」主宰• 技術書典で2冊本を出しています• 次も出す予定
ありがとうございました