AWSビギナーハンズオンノート ~サーバーレス編~

Created: Jun 22, 2025 | Lastmod: Jun 22, 2025 min read

何を作るか

  • 翻訳API
    • サーバーレスで実施
      • API Gatewayでリクエストを受け付け、Lambdaを呼び出す
      • Lambdaの中でTranslateを呼び出して翻訳結果を取得
      • 翻訳結果をAPI Gatewayに返し、レスポンスとする
      • 翻訳履歴をDynamoDBに保存

なぜサーバーレスなのか

  • ビジネスに直接はつながらないけどやらないといけないことを楽にする
    • インフラのプロビジョニングや管理が不要
    • 自動でスケール
    • 高い可用性
    • 価値に対する支払い
      • サーバーを起動した時間ではなく、リクエストされた分だけ課金
  • 自由度を取るならEC2、管理の手間の少なさを取るならLambda、中間を取るならContainer Services

AWS Lambdaの概要

AWS Lambdaとは

  • サーバーのプロビジョニング/管理なしでプログラムを実行可能
  • 開発者はコードを書くことにより集中できる
  • リクエストベースの料金体系
    • 実行回数 + 実行時間
  • 「ハンドラ」で呼び出す関数を指定する
    • デフォルトではlambda_function_lambda_handler
  • AWS Lambdaで設定できる項目
    • 確保するメモリの量
      • 128MB ~ 3008MB
      • CPU能力は確保するメモリの量に比例
    • タイムアウト値
      • 最大900秒
    • 実行IAMロール

イベントソースを呼び出しタイプ

  • 非同期/同期呼び出し
    • 呼び出し元のリソースによって変わる
        • S3からLambdaを呼び出す場合、Lambdaへのリクエストが正常に受け付けられたかのみ返却
        • API GatewayからLambdaを呼び出す場合、Lambdaの実行完了時にレスポンス返却

ライフサイクル

  • Lambdaは呼び出されるとコンテナ上でプログラムが実行される
  • コールドスタートとウォームスタート
    • 利用可能なコンテナがない場合(初めて呼び出された時など)はコールドスタート = コンテナ生成処理
    • コンテナを再利用できる場合はウォームスタート
  • 1つのコンテナで同時に実行できるのは1つのリクエストまで

Lambdaを実際に触ってみる(単体)

  • テンプレートもたくさん用意されている
  • 他サービスへの送信先や他サービスからのトリガー元も追加できる
  • メモリやタイムアウトの変更方法
    • 設定→一般設定
  • ロールについてはデフォルトにするとLogの権限が付いてくる
  • テスト方法
    • テスト
    • イベントJSONからテストデータを指定可
  • ログの記録方法
  • 注意点
    • コードを保存したら、「Deploy」を押下すること
      • そうしないとコードを実行しても以前のものが反映される
        • これで時間を溶かしたので戒め

Lambdaを実際に触ってみる(他サービスと連携)

API Gatewayの概要

API Gatewayとは

  • サーバーをプロビジョニング/管理することなくAPIを作成・管理できるマネージドサービス
    • 可用性、スケーリング、APIキー管理等を任せられる
    • REST APIとWebSocketに対応
    • リクエストベースの料金体験
      • 実行回数 + キャッシュメモリ量 + データ転送量
  • まず、リソース(URLパス)×メソッド(GET、POST、DELETE…)を定める
    • それぞれに対して、APIのフローを定義する
      • フロー一覧
        • メソッドリクエスト
          • リクエストを受けたときに何をするか定義
            • 認証設定
            • 受け付けるクエリパラメーター
            • 必須とするHTTPヘッダの設定
        • 統合リクエスト
          • バックエンドに渡す際どう変換するか
            • XMLをJSONに変えたり
            • プロキシ統合 = 変換せずにパススルーすることも可能
          • バックエンドの種別を選択する
            • Lambda
            • HTTP
            • Mock
              • バックエンドとしてコンピューティングリソースを動かすのではなく、決まった値を返せるようにできる
            • AWSサービス
            • VPCリンク
        • 統合バックエンド
          • 裏側で処理を行うコンピューティングリソース
        • 統合レスポンス
        • メソッドレスポンス
  • その他の機能
    • バージョニング
    • APIキーと使用料プラン
    • ログとモニタリング

モックデータを返すAPIを作ってみる

  • APIエンドポイントタイプのエッジ最適化を選ぶと、世界中で呼び出す要件を満たせる
  • モックで固定データを返すときは「統合レスポンス」からマッピングテンプレートを選ぶ
  • ステージした後、作成したAPIのパスのメソッドをクリックすると、URLが表示される
  • API Gatewayで統合レスポンスを設定する方法
  • Lambdaのテストのテンプレートで「API Gateway AWS Proxy」を選ぶと、どのようなヘッダーでリクエストをすればよいかがわかる

DynamoDBの概要

DynamoDBとは

  • フルマネージド型のNoSQLデータサービス
    • インストール作業不要
  • 3つのAZに保存されるので信頼性高
  • 性能要件に応じて、スループットキャパシティを定義する
    • AutoScalingやオンデマンドキャパシティと言った設定も可能
  • ストレージの容量制限なし
  • 料金体系
    • 設定したR/Wキャパシティユニット + ストレージ利用料 + オプション機能料金

DynamoDBの用語

  • 主キー = Partition Key (+ Sort Key)
  • アイテム(レコード)を登録していく
  • 各アイテムはアトリビュート(カラム)を持つ
    • 主キー以外のアトリビュートは不揃いであっても問題ない
  • 2種類のSecondary Indexを利用できる
    • Local Secondary Index
      • Sort Key以外に絞り込み検索するKeyを持てる
    • Global Secondary Index
      • Partition Key属性の代わりとなる、Partition Keyをまたいで検索するためのインデックス
  • キャパシティユニット
    • Read
      • 1ユニットにつき、最大4KBのデータを1秒に1回読み込み可能
    • Write
      • 1ユニットにつき、最大1KBのデータを1秒に1回書き込み可能
    • 余裕をもって設定すべし
      • 例:ピーク時は1KB以下のデータが秒間80回書き込まれる
        • →Writeキャパシティは100にする

Dynamo DBにおけるデータの操作方法

  • HTTPベースのAPIで操作
    • データ作成
      • PutItem
      • BatchWriteItem
    • 更新
      • UpdateItem
        • 対象ItemのKeyを指定
    • 単一データの取得
      • GetItem
        • 対象ItemのKeyを指定
    • 複数データの取得
      • Query
        • 対象ItemのKeyを指定
      • Scan
        • テーブルまたはセカンダリインデックスの全てのアイテムを取得

テーブルを作ってみる

その他重要事項

  • Lambdaにコードを書く際、グローバルスコープに記述すると、コンテナが再利用された際(=ウォームスタート)に再利用される
    • ローカルスコープの場合は再利用されない
  • 例外処理も大事
comments powered by Disqus