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

Lambdaカスタムランタイムで PHPでもサーバーレス!

Lambdaカスタムランタイムで PHPでもサーバーレス!

taiko19xx

July 19, 2019
Tweet

More Decks by taiko19xx

Other Decks in Technology

Transcript

  1. Lambdaカスタムランタイムで
    PHPでもサーバーレス︕
    JAWS-UG TOHOKU フリーテーマでAWSを語る会@2019/07/19
    @taiko19xx / ⽊村 俊彦

    View Slide

  2. いきなりですが
    Lambda好きな⽅︖

    View Slide

  3. PHP好きな⽅︖

    View Slide

  4. 今⽇は
    LambdaとPHPを組み合わせて
    使おうという話です

    View Slide

  5. もくじ
    • Lambdaのおさらい
    • Lambdaカスタムランタイムについて
    • カスタムランタイムの構築について
    • ローカル実⾏について
    • まとめ

    View Slide

  6. Lambdaのおさらい
    • とても便利で使いやすいサーバーレス実⾏環境
    • 実⾏できる⾔語(ランタイム)に限りがあるのが難点・・・︖
    • Node.js/Python/Ruby/Java/Go
    • .NET Core利⽤のC#/PowerShell
    • 少しずつ増えてきている
    • 書き慣れていない⾔語で書く場合は学習コストがかかる
    • Lambdaカスタムランタイムで解決できるかも︖

    View Slide

  7. Lambdaカスタムランタイムとは
    • Lambda関数を好きな⾔語で実⾏できる
    • Linux(Amazon Linux/Amazon Linux 2)で実⾏できるものなら実⾏可
    • 使い勝⼿は普通のLambda関数と同様
    • X-Rayとかも使える
    • https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/runtimes-
    custom.html

    View Slide

  8. カスタムランタイムの動作の流れ
    • ランタイム設定が「provided」に設定されている必要がある
    • 関数を実⾏すると「bootstrap」のファイルが実⾏される
    • 「$ ./bootstrap」 的な感じで実⾏されるイメージ
    • ファイルが無いとエラー
    • bootstrap内で各種バイナリを呼び出したり実⾏する
    • ハンドラの名前や各種設定は環境変数で渡される

    View Slide

  9. カスタムランタイムの構築

    View Slide

  10. 実⾏環境の作成
    • 実⾏バイナリやライブラリをzipで固めなければならない
    • かつ、Amazon Linux上でコンパイルされている必要がある
    • 取得する⼿段
    • EC2インスタンスで取得
    • インスタンスを⽴ち上げる必要がある
    • Amazon LinuxのDockerコンテナを起動して取得
    • ローカルで完結
    • Dockerを実⾏できる環境が必要
    • Dockerの知識も必要

    View Slide

  11. View Slide

  12. View Slide

  13. View Slide

  14. View Slide

  15. 実⾏環境のデプロイ
    • 関数スクリプトと共にデプロイ
    • ⼀緒にデプロイできるので楽
    • 実⾏環境に変更がある度にデプロイする必要がある
    • Layerとしてデプロイ
    • スクリプトパッケージサイズが⼩さくできる

    View Slide

  16. Layerとは
    • 既存のコードとは別に、追加のコードやコンテンツをアーカイブとし
    て設定できるもの
    • 1つの関数に最⼤5つ設定できる
    • 関数と、関数に設定したLayerが全てマージされた上で実⾏されると
    いうイメージ
    • メリット
    • 関数のデプロイパッケージを⼩さくする事ができる
    • 複数の関数間でライブラリを共有できる
    • https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-
    layers.html

    View Slide

  17. ローカルで実⾏

    View Slide

  18. カスタムランタイムをローカルで実⾏
    • もちろん可能
    • AWS CLIとSAM CLIが必要
    • Dockerも必要
    • LambdaのDockerイメージを利⽤して実⾏するため
    • Layerを設定している場合は、実⾏時にAWSからダウンロードして
    くる
    • Windows 10+Docker DesktopだとSAM CLIのバグがあり動かない
    • https://github.com/awslabs/aws-sam-cli/issues/1014

    View Slide

  19. SAM(Serverless Application Model)とは
    • AWS上でサーバーレスアプリケーションを構築するためのフレー
    ムワーク
    • CloudFormationを拡張したYAML/JSONで記述
    • 関数の作成に加え、API Gateway/DynamoDBの設定も簡単にできる
    • 複雑な設定をする場合は結局CloudFormationっぽくなってしまう

    View Slide

  20. DEMO

    View Slide

  21. まとめ
    • 良いところ
    • 使い慣れた⾔語で関数を記述できる
    • ≒メンテナンスが楽になる
    • 悪いところ
    • 環境構築が少し⼤変
    • Lambda以外の知識がそれなりに必要
    • DockerとかLinuxとか

    View Slide

  22. ⾃⼰紹介
    • ⽊村俊彦(@taiko19xx)
    • 株式会社SRIA 制作部 リーダー
    • PHP/Node.jsを使ったバックエンド構築
    • AWS/Azure/GCPの設計構築
    • 技術同⼈誌サークル「杜の都の開発室」主宰
    • 技術書典で2冊本を出しています
    • 次も出す予定

    View Slide

  23. ありがとうございました

    View Slide