AWS Lambda で遊ぼう(第10話: WebSocket篇③ - リアルタイムチャット完成篇)

夢のリアルタイム Web を完成させるため、超大作 (?) の Lambda を少しずつ作り上げていくお話です。 最初から読まないとワケが解らないかもです。

tercel-tech.hatenablog.com

tercel-tech.hatenablog.com

本日の導入

AWS SAM でつくる WebSocket アプリケーションもいよいよ大詰めを迎えました。

前回からだいぶ間が空いてしまい、かなりモチベーションが下がってしまっているので、ここで先に完成品のイメージを見てみましょう。

youtu.be

おぉ…

リアルタイムチャットだ…

今日という今日はコレを完成させます!

続きを読む

書評: AWS Lambda 実践ガイド 第2版

今日は、インプレストップギアシリーズの最新刊『AWS Lambda実践ガイド 第2版 (impress top gear)』を手に入れました。 わーい。

f:id:tercel_s:20220303204026p:plain

そんなわけで、今回はこの本を全力でご紹介するコーナーにしたいと思います!

この本のあらまし

こんにちのアプリケーションの実行環境は、物理サーバ → 仮想サーバ → コンテナ → サーバレス と進化を遂げてきました。

その中でもサーバレスは最も抽象度の高い概念で、AWS のサービスでは Fargateファーゲート や App Runner、そして僕の大好きな Lambda が該当します。

Lambda については、2017年頃にいくつか専門書が発売されたものの、近年は新刊が発行される機会も減ってしまいました。 こんにちのクラウド系新規案件の多くがコンテナかサーバレスだというのに、初心者は日本語の書籍から最新情報を得ることができないという状況が長く続いていました。

本書は、AWS Lambdaを使ったサーバレスアプリケーション開発の入門書の第2版です。 ほぼ全章に亘って大幅な増補・改訂がなされており、それに伴い読了時の最終到達目標も初版からワンランク上になっています。

今日は、本書をすみずみまで読み込んだ僕が、この本のスゴイところを徹底的に紹介していきます。

ポイント①: この本は誰のための本か

この本のメインターゲットは、AWS Lambda を使ってマイクロサービスの設計・開発を行うことになってしまったプログラマです。

2022年3月現在、日本語で読める Lambda の書籍としては最も新しく、そしておそらく最も分かりやすくて詳しい本ではないかと思います。

一方、裏ターゲットとしては、AWS SAM という入口から CloudFormation に挑戦したい人です。

ポイント②: 開発環境の構築で挫折しない

開発環境の準備は、プログラマの第一関門とされています。 もともとPCに入っているツールとの相性が悪いとか、バージョンが競合したりとか、なかなか手順通りにいかずに右往左往することも珍しくありません。

第2版では、開発環境にAWS Cloud9を使用します。ボタン一つで起動する即席の環境でありながら、開発に必要なひととおりのツールが初めから全て揃っており、これにより、開発環境の準備がほぼ一瞬で終わるようになっています。

ただ、注意点が2点ほど。 Cloud9の初期ディスクの空き領域が少なく、sam build --use-containerに失敗する可能性がある点と、AWS SAM CLIのバージョン周りで書籍と読者の環境に差異があるかも知れない点が挙げられます。 これらもコラムでフォローしています。

ポイント③: AWS SAMに本格的に対応

2版における最大のアップデートは、「はじめに」にもある通り、AWS SAM (Serverless Application Model) を利用した IaC (Infrastructure as Code) への対応です。

もちろん、マネジメントコンソールを用いた初歩的な開発手法の解説も残っており、ほぼ全ての題材において、GUICUI 両方の開発方式に対応していますので、1冊で2度おいしい内容となっています。

従来の方式は、Lambda関数やAWSリソース(S3バケットやDynamoDBテーブルなど)を作成したりチューニングしたりするたびに、マネジメントコンソールをあちこち行ったり来たりせねばならず、操作の手数が煩雑化するという難点がありました。

また、どのLambda関数とどのAWSリソースが関連付いているのかを一目で確認できないという課題もありました。 いっときの開発だけならまだしも、中長期的な保守・運用を考えた場合、こうした手作業に頼るオペレーションはなまなかのものではありません。

今回の第2版では、これらの課題がSAMによって解決され、先々の運用にも耐えうる手法の解説が充実しました。

ただし、SAMの元となっているCloudFormation自体がそれなりに高度なトピックということもあり、SAMの解説に突入した途端に難易度が上がったように感じてしまう人もいるかも知れません。

一方で、初版を読破済みという方は、2版の実践編の各章の後半 ── SAM のパートを楽しむと、きっと新たな開発体験ができるはずです。

ポイント④: 初版の誤り訂正

2版では、初版にあった既知の誤りが訂正されています。

たとえば、§6-7 の署名付きURLの有効期限の時間設定が48時間 → 8時間に修正されました(実は、初版の時間設定では意図した動きにならないのです。 ここは2版のコラムで詳しい補足説明があります)。

また、一部のてい(BACKET など)も訂正されています。

§6-2 で作る Web アプリケーションのサンプルコードも、初版ではLambdaからHTMLを直接返却する(一昔前のCGIのような)方式が採られていましたが、2版では非同期通信でJSON電文を送受信するという、より現代的な方式に修正されています。

これなら、フロントエンドエンジニアも、React や Angular など好みのライブラリやフレームワークでの読み替えが容易になるでしょう。

そのほか AWS リソースのアイコンの変更に合わせて図版も最新のものに差し替わっています。

ポイント⑤: 最新仕様のキャッチアップ

初版の刊行当時は正しかった事柄も、AWS のアップデートによって情報が古くなってしまっていました。

たとえば、Lambdaの実行時間の上限が5分から15分に延びたり、Lambda Layersが登場したり、armベースのアーキテクチャに対応したりと様々なアップデートがありました。

そのほか、SQS のFIFO先入先出キューが高スループットモードをサポートしたり、DynamoDBがイニシャルのスループット見積もりをスキップできるオンデマンドに対応したりしています。

また、AWS の仕様をまとめた表についても細部にわたって徹底的に再調査・更新されています。

  • 表3-2 定義済み環境変数
  • 表6-2 API Gatewayから渡されるイベント引数のうち、よく使う項目

などなど、最新仕様をキャッチアップする意味でも資料的価値は非常に高いといえます。

ポイント⑥: いつか役立つ実用テクニック満載

ついつい読み飛ばしがちですが、本編の中にもいろんな大ネタ・小ネタが詰まっています。

§5-8 「SAMを使って既存S3バケットに対してLambda関数のトリガーを設定する」 は、どこかの誰かがマネコンから手作りしてしまったリソースをSAMテンプレートの管理下に置きたい場合や、ドリフトを解消したい場合にも使える実用度の高いテクニックです。

とりわけ SAMの場合、このリソースインポートの手順が(通常のCloudFormationと比較して)少々テクニカルなので、これが収録されたのは正直嬉しいことです。

本書のトリを飾る X-Ray は、Lambda のパフォーマンス調査やトラブルシュートのための必須知識です。 マイクロサービスの可観測性を高める大変強力な道具で、X-Ray を知ればLambdaの運用レベルが一段階アップすることでしょう。

── 無理を承知で欲を言えば、FSx 接続(これにより、一時領域512MBという制限がなくなる)や、Step Functions による SAGA パターン実装、moto を使ったユニットテストの技法なども、ぜひ著者の平易な解説で読みたかったところです。

総評

AWS Lambda を使ってシステム開発に従事するプログラマは、ぜひ一読をオススメします。 前述のとおり「大増補」「全面改訂」となっていますので、初版を持っている人も買い直す価値は十分にあると思います。

AWS Lambda で遊ぼう(第9話: WebSocket篇② - 切断篇)

今日は、AWS Lambda で WebSocket に挑戦する企画の続きです。

前回の記事が未読の場合は、先にそちらをお読みいただければ幸いです。

tercel-tech.hatenablog.com

前回がんばった分、今日はだいぶ構築がラクになっていますので、ぜひ!

続きを読む

AWS Lambda で遊ぼう(第8話: WebSocket篇① - 接続篇)

今日は、お待ちかねの WebSocket ネタです。

ご存知ない方のために説明しますと、複数のクライアントとサーバ間でリアルタイムに情報が同期される仕組みを Web で実現するプロトコルです。 わくわくしますね。

続きを読む

AWS Lambdaで遊ぼう(第7話: HTTP API と arm64)

ぉ…

今日も Lambda ネタだ。

はい。 今日の記事は、第6話「Excel ファイルをダウンロード」の続きです。

なのでもし未読の場合は、先に6話目を読んでいただけると有難いです。

tercel-tech.hatenablog.com

あれ1話完結じゃなかったの……。

一応ちゃんと動いたじゃん。

今日は、6話目で作ったマイクロサービスを改良して、HTTP APIarm64対応をやります。

どちらも、処理のパフォーマンスが上がったり課金を節約したり、いいことが多いので、ぜひ!

AWS Lambda 関連のバックナンバーはこちら

■ 今日の目次

続きを読む

AWS Lambdaで遊ぼう(第6話: Excelをダウンロード)

なぜか一部の読者に大人気の(?)Lambda 解説コーナー。

なんだかんだで6話目に突入しました。バックナンバーはこちらです。


ナイスな導入

AWS Lambda で作った REST API って、JSON のようなテキストデータしか返せないの?

いや、そんなことはないよ。

今日は、Excel ファイルのダウンロード API を Lambda で作ってみよう。


今日は、S3 も DynamoDB も SQS も使いません。 その代わり、少しハイレベルなことをやります。

通常、Lambda で作る Web API といえば、送受信ともに JSON データを利用する仕様が一般的です。

しかし、実際の Web アプリケーションとなると、画像や PDF(帳票)などバイナリ形式のファイルを動的に生成してダウンロードできる仕掛けをよく目にします。

これを Lambda でも実現しよう! というのが本日のテーマです。

続きを読む

Copyright (c) 2012 @tercel_s, @iTercel, @pi_cro_s.