
第7話 ── so that 構文と仲直りする
おや、、
なんか元気ないね。
そうなんだよー。
最近、物凄くストレスが溜まっていて、そろそろ耐えられない。
そっか……。
じゃあ現実逃避に英語でもやろうか。
なぜそうなるwww
おや、、
なんか元気ないね。
そうなんだよー。
最近、物凄くストレスが溜まっていて、そろそろ耐えられない。
そっか……。
じゃあ現実逃避に英語でもやろうか。
なぜそうなるwww
今日は、インプレストップギアシリーズの最新刊『AWS Lambda実践ガイド 第2版 (impress top gear)』を手に入れました。 わーい。
そんなわけで、今回はこの本を全力でご紹介するコーナーにしたいと思います!
こんにちのアプリケーションの実行環境は、物理サーバ → 仮想サーバ → コンテナ → サーバレス と進化を遂げてきました。
その中でもサーバレスは最も抽象度の高い概念で、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のバージョン周りで書籍と読者の環境に差異があるかも知れない点が挙げられます。 これらもコラムでフォローしています。
2版における最大のアップデートは、「はじめに」にもある通り、AWS SAM (Serverless Application Model) を利用した IaC (Infrastructure as Code) への対応です。
もちろん、マネジメントコンソールを用いた初歩的な開発手法の解説も残っており、ほぼ全ての題材において、GUI と CUI 両方の開発方式に対応していますので、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 の仕様をまとめた表についても細部に亘って徹底的に再調査・更新されています。
などなど、最新仕様をキャッチアップする意味でも資料的価値は非常に高いといえます。
ついつい読み飛ばしがちですが、本編の中にもいろんな大ネタ・小ネタが詰まっています。
§5-8 「SAMを使って既存S3バケットに対してLambda関数のトリガーを設定する」 は、どこかの誰かがマネコンから手作りしてしまったリソースをSAMテンプレートの管理下に置きたい場合や、ドリフトを解消したい場合にも使える実用度の高いテクニックです。
とりわけ SAMの場合、このリソースインポートの手順が(通常のCloudFormationと比較して)少々テクニカルなので、これが収録されたのは正直嬉しいことです。
本書のトリを飾る X-Ray は、Lambda のパフォーマンス調査やトラブルシュートのための必須知識です。 マイクロサービスの可観測性を高める大変強力な道具で、X-Ray を知ればLambdaの運用レベルが一段階アップすることでしょう。
── 無理を承知で欲を言えば、FSx 接続(これにより、一時領域512MBという制限がなくなる)や、Step Functions による SAGA パターン実装、moto を使ったユニットテストの技法なども、ぜひ著者の平易な解説で読みたかったところです。
今日は、お待ちかねの WebSocket ネタです。
ご存知ない方のために説明しますと、複数のクライアントとサーバ間でリアルタイムに情報が同期される仕組みを Web で実現するプロトコルです。 わくわくしますね。
続きを読むNode.js と React の再学習。
— たーせる (@tercel_s) September 8, 2017
React + Express + Socket.IO で「リアルタイム『いいね』ボタン」を作って、AWS Elastic Beanstalk 環境にデプロイしてみた。 pic.twitter.com/GiYci2Glb9
ぉ……
今日も Lambda ネタだ。
はい。 今日の記事は、第6話「Excel ファイルをダウンロード」の続きです。
なのでもし未読の場合は、先に6話目を読んでいただけると有難いです。
あれ1話完結じゃなかったの……。
一応ちゃんと動いたじゃん。
今日は、6話目で作ったマイクロサービスを改良して、HTTP API化とarm64対応をやります。
どちらも、処理のパフォーマンスが上がったり課金を節約したり、いいことが多いので、ぜひ!
■ 今日の目次
なぜか一部の読者に大人気の(?)Lambda 解説コーナー。
なんだかんだで6話目に突入しました。バックナンバーはこちらです。
lambdaのブログ読ませていただきました!
— RUI@mtg (@mtg_rui) November 18, 2021
めちゃくちゃわかりやすくて感動しました、、
今日は、S3 も DynamoDB も SQS も使いません。 その代わり、少しハイレベルなことをやります。
通常、Lambda で作る Web API といえば、送受信ともに JSON データを利用する仕様が一般的です。
しかし、実際の Web アプリケーションとなると、画像や PDF(帳票)などバイナリ形式のファイルを動的に生成してダウンロードできる仕掛けをよく目にします。
これを Lambda でも実現しよう! というのが本日のテーマです。
Copyright (c) 2012 @tercel_s, @iTercel, @pi_cro_s.