ステップ1:API基盤の構築 - サーバーレスAPIとLambda関数の実装
今回のステップの概要とモバイルアプリとの関連について
このステップでは、モバイルアプリのバックエンドシステムの基盤となるAPI基盤を構築します。具体的には、Amazon API Gateway、AWS Lambda、サーバーレスアーキテクチャを使用してモバイルアプリからのリクエストを処理するシステムを構築します。
モバイルアプリにとって、API基盤は「電話交換手」のような役割を果たします。モバイルアプリからの様々なリクエスト(ユーザー情報の取得、データの保存、検索など)を受け取り、適切な担当者(Lambda関数)に振り分けて処理を行い、結果をアプリに返すシステムです。
このステップで学ぶこと
- Amazon API GatewayのREST API作成とCORS設定
- AWS Lambdaの関数作成とPython/Node.jsでの実装
- サーバーレスアーキテクチャの基本概念と実装
- Amazon CloudWatchを使ったログ監視とデバッグ
リソースの関わりと構成説明
ステップ1で作成するリソースは、モバイルアプリケーションの基盤となるAPI層を構築するものです。それぞれのリソースがモバイルアプリにどのように関わるのかを説明します。
Amazon API Gatewayとモバイルアプリの関わり
Amazon API Gateway「モバイルアプリAPI」は、モバイルアプリケーションの「受付窓口」のような役割を果たします。スマートフォンアプリからのHTTPSリクエストを受け取り、適切なLambda関数に振り分けて処理結果を返します。これにより、モバイルアプリは安全で高速なデータ通信が可能になります。
AWS Lambdaとモバイルアプリの関わり
AWS Lambda「ビジネスロジック処理関数」は、モバイルアプリケーションの「専門スタッフ」のような役割を果たします。ユーザー認証、データ取得、位置情報処理など、それぞれの機能に特化した処理を実行します。これにより、サーバー管理不要で高いスケーラビリティを実現できます。
Amazon CloudWatchとモバイルアプリの関わり
Amazon CloudWatch「監視システム」は、モバイルアプリケーションの「監視カメラ」のような役割を果たします。APIの応答時間、エラー発生状況、Lambda関数の実行状況を常時監視し、問題発生時には即座にアラートを送信します。これにより、ユーザーに安定したサービスを提供できます。
実際の手順
実際の手順では、たくさんの設定値を入力することになります。 本文中に設定値が指定されていない場合は、デフォルト値のまま作業を進めてください。
1. Amazon API Gatewayの作成
モバイルアプリからのリクエストを受け付けるREST APIを作成します。
1-1. REST APIの作成
- AWSマネジメントコンソールにログインし、API Gatewayサービスを開きます
- 「APIを作成」ボタンをクリックします
- 「REST API」を選択し、「構築」をクリックします
- API名に「mobile-app-api」と入力します
- 説明に「モバイルアプリ用のバックエンドAPI」と入力します
- エンドポイントタイプは「リージョン」を選択します
- 「APIの作成」をクリックします
【解説】REST APIとWebSocket APIの違い
API Gatewayには主にREST APIとWebSocket APIの2つのタイプがあります。REST APIは一般的なHTTPリクエスト・レスポンス型の通信に使用され、WebSocket APIはリアルタイムな双方向通信に使用されます。
モバイルアプリの基本的なデータ取得や更新処理にはREST APIが適しており、チャット機能やリアルタイム位置共有にはWebSocket APIが適しています。
このステップではまず基盤となるREST APIを構築し、後のステップでWebSocket APIを追加する構成になっています。
1-2. CORS設定の有効化
- 作成したAPIのルートリソース(/)を選択します
- 「アクション」メニューから「CORSの有効化」を選択します
- Access-Control-Allow-Originに「*」を入力します
- Access-Control-Allow-Headersに「Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token」を入力します
- Access-Control-Allow-Methodsで「GET,POST,PUT,DELETE,OPTIONS」を選択します
- 「CORSを有効にして既存のCORSヘッダーを置換」をクリックします
2. AWS Lambda関数の作成
API Gatewayから呼び出されるLambda関数を作成します。
2-1. Lambda関数の基本設定
- AWSマネジメントコンソールでLambdaサービスを開きます
- 「関数の作成」ボタンをクリックします
- 「一から作成」を選択します
- 関数名に「mobile-app-handler」と入力します
- ランタイムで「Python 3.9」を選択します
- アーキテクチャは「x86_64」を選択します
- 「関数の作成」をクリックします
2-2. Lambda関数のコード実装
- 関数のコードエディタで以下のPythonコードを入力します:
import json
import logging
# ログ設定
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def lambda_handler(event, context):
"""
モバイルアプリからのAPIリクエストを処理する関数
"""
try:
# リクエスト情報をログに記録
logger.info(f"受信したイベント: {json.dumps(event)}")
# HTTPメソッドを取得
http_method = event.get('httpMethod', 'GET')
path = event.get('path', '/')
# レスポンスデータを準備
response_data = {
'message': 'モバイルアプリAPIが正常に動作しています',
'method': http_method,
'path': path,
'timestamp': context.aws_request_id
}
# 成功レスポンス
return {
'statusCode': 200,
'headers': {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'GET,POST,PUT,DELETE,OPTIONS',
'Access-Control-Allow-Headers': 'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'
},
'body': json.dumps(response_data, ensure_ascii=False)
}
except Exception as e:
# エラーログを記録
logger.error(f"エラーが発生しました: {str(e)}")
# エラーレスポンス
return {
'statusCode': 500,
'headers': {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*'
},
'body': json.dumps({
'error': 'サーバー内部エラーが発生しました',
'message': str(e)
}, ensure_ascii=False)
}
- 「Deploy」ボタンをクリックしてコードをデプロイします
3. API GatewayとLambdaの連携設定
作成したAPI GatewayとLambda関数を連携させます。
3-1. リソースとメソッドの作成
- API Gatewayのコンソールに戻ります
- 「アクション」メニューから「リソースの作成」を選択します
- リソース名に「users」と入力します
- 「リソースの作成」をクリックします
- 作成した「users」リソースを選択します
- 「アクション」メニューから「メソッドの作成」を選択します
- プルダウンで「GET」を選択し、チェックマークをクリックします
3-2. Lambda関数との統合設定
- 統合タイプで「Lambda関数」を選択します
- 「Lambdaプロキシ統合の使用」にチェックを入れます
- Lambda関数で「mobile-app-handler」を選択します
- 「保存」をクリックします
- 「Lambda関数に権限を追加しますか?」のダイアログで「OK」をクリックします
このステップで何をしたのか
このステップでは、モバイルアプリケーション向けのサーバーレスAPI基盤を構築しました。具体的には、Amazon API GatewayでREST APIを作成し、AWS Lambdaで処理ロジックを実装し、両者を連携させました。また、CORS設定により異なるドメインからのアクセスを許可し、CloudWatchでログ監視環境を整備しました。
モバイルアプリでどのような影響があるのか
この構成により、モバイルアプリは安全で高速なデータ通信が可能になります。サーバーレス構成により、ユーザー数の急激な変動にも自動的にスケールし、コストは実際の使用量に応じて課金されます。また、マネージドサービスを使用することで、サーバー管理やメンテナンスの負荷が大幅に軽減されます。これは、必要な時に必要な分だけリソースが提供される「電気や水道」のようなインフラに相当します。
技術比較まとめ表
技術領域 | AWS | オンプレミス |
---|---|---|
API管理 | Amazon API Gateway マネージドサービス、自動スケーリング | Nginx + Kong/Zuul 手動設定、スケーリング管理が必要 |
処理実行 | AWS Lambda サーバーレス、従量課金 | アプリケーションサーバー 常時稼働、固定費用 |
監視・ログ | Amazon CloudWatch 統合監視、自動アラート | ELK Stack等 構築・運用が必要 |
学習において重要な技術的違い
1. サーバー管理の有無
- AWS:サーバーレス構成でインフラ管理が不要
- オンプレミス:物理サーバーやVMの管理が必要
2. スケーラビリティ
- AWS:リクエスト数に応じた自動スケーリング
- オンプレミス:事前のキャパシティプランニングが必要
3. 課金体系
- AWS:実際の使用量に基づく従量課金
- オンプレミス:ハードウェア・ソフトウェアの固定費用
4. 開発・運用速度
- AWS:マネージドサービスによる高速な開発・デプロイ
- オンプレミス:インフラ構築から始める必要があり時間がかかる
実践チェック:画面キャプチャで証明しよう
下記のチェック項目について、実際にAWSマネジメントコンソールで設定ができていることを確認し、各項目ごとに該当画面のスクリーンショットを撮影して提出してください。
-
API Gatewayで「mobile-app-api」が作成されていること
-
API GatewayでCORS設定が有効化されていること
-
Lambda関数「mobile-app-handler」が作成されていること
-
Lambda関数のコードが正しく実装されていること
-
API Gatewayの「users」リソースでGETメソッドが作成されていること
-
API GatewayとLambda関数が正しく統合されていること
提出方法: 各項目ごとにスクリーンショットを撮影し、まとめて提出してください。 ファイル名やコメントで「どの項目か」が分かるようにしてください。
構成図による理解度チェック
このステップで作成したAPI基盤の構成図を作成して、サーバーレスアーキテクチャの理解を深めましょう。
なぜ構成図を更新するのか?
サーバーレスアーキテクチャは従来のサーバーベース構成と大きく異なるため、視覚的に理解することが重要です。モバイルアプリからのリクエストフローを図示することで、各サービスの役割と連携方法を明確にできます。また、今後のステップで追加する機能との関係性も理解しやすくなります。
- リクエストフロー: モバイルアプリ → API Gateway → Lambda → レスポンスの流れ
- サービス間連携: 各AWSサービスがどのように連携しているか
- セキュリティ境界: CORS設定やIAM権限の適用範囲
構成図の書き方
以下の要素を含む構成図を作成してみましょう。
- モバイルアプリ: 左側にスマートフォンのアイコンで配置
- Amazon API Gateway: 中央にAPI Gatewayのアイコンで配置
- AWS Lambda: 右側にLambdaのアイコンで配置
- 通信経路: HTTPS通信とLambda呼び出しの矢印で表現
💡 ヒント: モバイルアプリから見たデータの流れを意識して、左から右への流れで描くと理解しやすくなります
理解度チェック:なぜ?を考えてみよう
AWSの各リソースや設計には、必ず”理由”や”目的”があります。 下記の「なぜ?」という問いに自分なりの言葉で答えてみましょう。 仕組みや設計意図を自分で説明できることが、真の理解につながります。 ぜひ、単なる暗記ではなく「なぜそうなっているのか?」を意識して考えてみてください。
Q. なぜモバイルアプリのバックエンドにサーバーレス構成を選択するのか?従来のEC2ベースの構成と比較してどのようなメリットがあるか?
Q. なぜAPI GatewayでCORS設定を有効化する必要があるのか?CORS設定がない場合、モバイルアプリからのアクセスにどのような問題が発生するか?
Q. なぜLambda関数でエラーハンドリングとログ出力を実装するのか?これらがない場合、システム運用にどのような問題が発生するか?
今回のステップで利用したAWSサービス名一覧
- Amazon API Gateway:RESTful APIの作成・管理・デプロイを行うマネージドサービス
- AWS Lambda:サーバーレスでコードを実行するコンピューティングサービス
- Amazon CloudWatch:AWSリソースの監視・ログ管理・アラート機能を提供するサービス
- AWS IAM:AWSサービス間のアクセス権限を管理するサービス