type
status
date
slug
summary
tags
category
icon
password

理論

ハンズオン前の前提知識整理

AWSを利用してAPIの高可用性と災害復旧(DR)を実現するためには、いくつかのサービスや概念を理解しておく必要があります。本記事では、その基礎知識を整理します。
高可用性イメージ図
notion image

1. フェイルオーバーとは

フェイルオーバーとは、システム障害が発生した際に別のリソースに切り替えるプロセスです。AWSでは、複数のリージョン(地理的エリア)を活用してフェイルオーバー構成を構築します。
これにより、災害や障害時にもサービスを継続的に提供できます。

2. Amazon API Gateway

概要

Amazon API Gatewayは、RESTやWebSocket APIをホストするためのマネージドサービスです。サーバーを管理する必要がなく、バックエンドをLambda関数やDynamoDBなどに接続できます。
notion image

フェイルオーバーでの活用

  • 複数リージョンにデプロイ:API Gatewayを各リージョンに展開することで、障害時の切り替えを容易にします。
  • エンドポイントの種類
    • リージョン API (エンドポイント):特定のリージョンに固定されたエンドポイント。
    • エッジ最適化 API (エンドポイント):グローバル配信に適したエンドポイント。
    • プライベート API:プライベート API には VPC からのみアクセスできます。
    • notion image

3. AWS Lambda

概要

AWS Lambdaは、イベント駆動型でコードを実行するサーバーレスコンピューティングサービスです。
notion image

応用例

notion image

ライフサイクル

notion image

フェイルオーバーでの活用

  • 各リージョンで同じLambda関数をデプロイし、API Gatewayから呼び出します。
  • バックエンドロジックを柔軟に構築可能。

4. Amazon DynamoDB

概要

DynamoDBは、NoSQL型のフルマネージドデータベースサービスです。

notion image

notion image

notion image

LSIとGSIの違い:
  1. LSI(ローカルセカンダリインデックス)
      • Partition Key は元のテーブルと同じ。
      • Sort Key のみをカスタマイズ可能。
      • クエリ時は必ず元の Partition Key を指定する必要がある。
      • パーティション内のデータに対する補助的な検索に使用される。
  1. GSI(グローバルセカンダリインデックス)
      • Partition KeySort Key の両方を元のテーブルと独立して設定可能。
      • クエリ時に独自の Partition Key で検索可能。
      • テーブル全体のデータに対する広範囲な検索に適している。
例え:
  • LSI は「ファイルキャビネットの中の引き出し(Partition Key)」内で「異なる仕切り(Sort Key)」を使って整理するイメージ。
  • GSI は「キャビネットとは別の場所に、自由に整理された新しいキャビネット」を設置するようなもの。

notion image

notion image

グローバルテーブル

  • DynamoDBのグローバルテーブルを利用すると、データを複数のリージョン間で自動的に同期できます。
  • 高可用性を実現するために必要な設定。

5. Amazon Route 53

概要

Route 53は、DNS(ドメイン名システム)のマネージドサービスで、トラフィックのルーティングを制御します。

重要な設定

  • フェイルオーバーレコード
    • プライマリとセカンダリのエンドポイントを定義し、プライマリが障害を検出した際にセカンダリへ切り替え。
  • ターゲットヘルスモニタリング
    • エンドポイントの稼働状況を監視し、障害検出をサポート。

6. 高可用性API構築の基本ステップ

  1. 複数リージョンへのデプロイ
      • API GatewayとLambda関数を各リージョンにデプロイする。
  1. DynamoDBのグローバルテーブル化
      • データの一貫性と可用性を確保するために設定。
  1. Route 53でフェイルオーバー設定
      • フェイルオーバーレコードを利用して、障害発生時の自動切り替えを構築。
  1. 監視とテスト
      • 障害時の切り替えが正常に動作するか、定期的にテストを実施。

まとめ

AWSのAPI Gateway、Lambda、DynamoDB、Route 53を組み合わせることで、フェイルオーバー対応の高可用性APIを設計できます。これらのサービスの特性を理解し、正しく設定することで、災害時にも信頼性の高いシステムを維持することが可能です。
次に、この知識を使って実際の構築に挑戦してみましょう!
 

実践

 
AWS サーバーレスアーキテクチャで高可用性APIを構築する
 
このハンズオンでは、AWSのサーバーレス技術を活用し、フェイルオーバー機能を持つ高可用性のAPIを構築します。具体的には、API Gateway、AWS Lambda、DynamoDB、およびRoute 53を使用して、2つのリージョンに跨る冗長化されたシステムを作成します。サーバーレスアーキテクチャの特性とその中核を成すAWSサービスの概要を学びながら、実際に手を動かしてその理解を深めることができます。

目標

  • API Gateway を使用して、サーバーレスREST APIを作成し、2つのAWSリージョンで冗長化。
  • AWS Lambda を使用して、APIのバックエンドロジックを実装。
  • Amazon DynamoDB のグローバルテーブルを使って、データの高可用性を確保。
  • Amazon Route 53 を利用し、DNSフェイルオーバー機能を実装。

使用するAWSサービス

  • AWS Lambda: サーバーレスコンピューティングサービス。バックエンドロジックをLambda関数で処理します。
  • Amazon API Gateway: REST APIを作成・管理するサービス。リクエストをLambda関数に転送します。
  • Amazon DynamoDB: NoSQLデータベース。データを格納し、グローバルテーブルでデータの冗長化を実現します。
  • Amazon Route 53: DNSサービス。フェイルオーバー機能を使用して、異常が発生した際に他のリージョンへ切り替えます。

ステップ 1: API GatewayでのREST API作成

基本的な使い方をおさらいください

notion image

notion image

notion image

notion image

notion image

notion image

notion image

手順概要
  1. API Gateway操作画面でREST APIを作成
      • 新規に下記のREST APIを作成する。
      • バックエンドはまだ用意されていないため、モック設定を使用。
      notion image
  1. マッピングテンプレートを設定
      • マッピングテンプレートに以下のコードを設定してモックレスポンスを返すようにする:
      マッピングテンプレートとは、API Gatewayでリクエストやレスポンスのデータ形式を変換するための設定です。APIとクライアント(フロントエンド)やバックエンド間のデータのやり取りをカスタマイズするために使います。
  1. APIをデプロイ
      • APIをステージにデプロイする(例: devステージ)。
  1. デプロイしたエンドポイントにアクセス
      • ブラウザやPostmanなどのツールでAPIエンドポイントにリクエストを送信してレスポンスを確認。
      notion image

これでモックAPIの基本的な構築と動作確認が完了します。

ステップ 2: Lambda関数の作成

基本的な使い方をおさらいください

notion image

手順概要
このスクリプトは、AWS Lambda関数をハンズオン形式で学習する際の説明動画の内容をもとにしていますね。以下に、話されている内容を整理しつつ、要点をまとめます:

実際の操作手順:

  1. Lambdaサービスの選択
    1. サービス検索バーで「Lambda」と入力して選択。
  1. 新しい関数の作成
      • 一から作成するオプションを選択。
      • 関数名(例: translater-function)を設定。
      • ランタイムはPython 3.9を選択。
      • IAMロールは自動生成を選択。
      notion image
  1. メモリやタイムアウトの設定変更
      • メモリを256MBに変更。
      • タイムアウトを5秒に設定。
      • 保存ボタンを忘れずにクリック。
      notion image
  1. ログ設定の追加
      • ソースコードにloggingライブラリをインポート。
      • ロガーを設定し、イベント内容をログに出力。
      • 保存してからテストを実行。
      notion image
  1. テストの実行と確認
      • サンプルイベントを作成。
      • 実行結果を確認し、ログにイベントの中身が正しく出力されていることを確認。
      notion image

notion image

ステップ 3: DynamoDBの設定

手順概要
1. DynamoDBテーブルの作成
notion image
  • テーブル名: TranslaterLogs
  • プライマリキー:
    • パーティションキー: Timestamp(ユニークな値として指定。例: APIが呼び出された時刻)。
    • Sort Keyは使用しない。
  • キャパシティ設定:
    • リード/ライトキャパシティを「1」に指定(オンデマンドは使用しない)。
    • セカンダリインデックスは設定しない。

2. データの手動追加
  1. テーブル作成後、「項目の作成」ボタンをクリック。
  1. データ項目: API呼び出し時の以下の情報を保存:
      • 呼び出し時間
      • 日本語の入力テキスト(Input Text)
      • 翻訳結果の英語テキスト(Output Text)
  1. 以下の情報を入力:
      • Timestamp: 例: 202412051720
      • input_text: 例: ★こんにちは
      • output_text: 例: ★Hello
  1. 「保存」をクリックするとデータが追加される。
notion image
 

3. 注意点

  • Timestampはプライマリキーとしてユニークである必要がある。
  • 環境によってテーブル作成に少し時間がかかる場合がある。

次回はLambdaを使ってDynamoDBにデータを挿入する処理を解説します。

ステップ 4: API GatewayとLambdaとDynamoDB 統合

notion image
1. 目的
Web API が呼び出された際に、その履歴情報を DynamoDB テーブルに保存するように Lambda Function を修正します。
2. 事前準備
既に作成した Lambda Function に対して修正を加え、DynamoDB テーブルにデータを追加する設定を行います。
3. 手順
  • Lambda Function の修正:
    • DynamoDB へのデータ追加には、AWS SDK を利用します。
    • DynamoDB テーブルを操作するために、PutItem メソッドを使用します。
    • PutItem では、API 呼び出し履歴として以下の情報をテーブルに保存します:
      • 入力テキスト (inputText): API 呼び出し時の入力データ
      • 出力テキスト (outputText): API 呼び出し結果
      • タイムスタンプ: 呼び出し時刻
      以下のコードを Lambda Function に追加します:
  • 修正したらdeployをしてください
notion image
4. IAM ロール設定
  • Lambda 関数に DynamoDB へのアクセス権限を付与します。DynamoDBFullAccess TranslateFullAccess ポリシーを IAM ロールに追加します。
notion image
  • ALambdaとDynamoDB の統合テスト
  • Lambda Function を修正後、テストイベント実行し、DynamoDB テーブルにアイテムが追加されているかを確認します。
テストイベント例
  • API Gatewayと統合
    • API GatewayのメソッドをMockからLambda 統合に変更する
      notion image
notion image

統合テスト

URLでAPIにアクセス、翻訳の返答とDynamoDBにログが記録されたかを確認する
notion image
notion image

この手順で、Web API が呼び出されるたびにその履歴を DynamoDB に保存することができます。

拡張オプション

ステップ 5: 両リージョンでの高可用性構築

Aリージョンで作成済みの API GatewayLambdaDynamoDB を Bリージョンに同じ構成で作成します。

1. API Gateway、Lambda、DynamoDB の複製

  • Aリージョンで設定済みのリソースを、Bリージョンにもデプロイします。
    • API Gateway: 同じエンドポイント構成で作成。
    • Lambda: 同じコードと設定をデプロイ。
    • DynamoDB: 必要に応じてグローバルテーブルを利用し、データの同期を自動化。

2. Route 53でフェイルオーバー設定を構築

  • Route 53コンソールで新しいホストゾーンを作成します(例: weather.example.com)。
  • DNSレコードを設定
    • プライマリレコード: Aリージョンの API Gateway エンドポイントを設定。
    • セカンダリレコード: Bリージョンの API Gateway エンドポイントを設定。

3. ヘルスチェックの有効化

  • ヘルスチェックを設定して、各 API Gateway エンドポイントの稼働状況を監視。
    • プライマリリージョンのエンドポイントがダウンした場合、自動的にセカンダリリージョンのエンドポイントにリクエストを切り替えます。
これにより、両リージョンでの高可用性が確保され、システムの冗長性と耐障害性が向上します。
notion image

ステップ 5: テスト

  1. Postmancurlを使って、weather.example.com にリクエストを送信します。
      • リージョン 1が正常な場合、そのエンドポイントから応答が返ります。
  1. リージョン 1を意図的に停止し、Route 53がフェイルオーバーして、リージョン 2から応答が返ることを確認します。
notion image

ハンズオンの成果

  • 高可用性を持つサーバーレスREST APIの構築。
  • リージョン間のフェイルオーバー機能を実装。
  • DynamoDBグローバルテーブルによるデータの冗長化。

参照元:
こちらのリンクで確認できます。

一門道場

 
ある会社がRESTベースのAPIを通じて複数の顧客に天気データを提供しています。このAPIはAmazon API Gatewayでホストされており、各API操作ごとに異なるAWS Lambda関数と統合されています。会社はDNSにAmazon Route 53を使用しており、
というリソースレコードを作成しています。また、このAPIのデータはAmazon DynamoDBテーブルに保存されています。
会社は、このAPIを別のAWSリージョンにフェイルオーバーする能力を持たせる必要があります。
以下のどのソリューションがこの要件を満たしますか?

選択肢

A.

  • 新しいリージョンにLambda関数をデプロイ。
  • API Gatewayをエッジ最適化エンドポイントに更新し、両リージョンのLambda関数をターゲットとして設定。
  • DynamoDBをグローバルテーブル化。

B.

  • 新しいリージョンにAPI GatewayとLambda関数をデプロイ。
  • Route 53のDNSレコードをマルチバリューアンサーに変更し、両API Gatewayをアンサーに追加。マルチバリューアンサー (Multi-Value Answer) とは、AWS Route 53 のルーティングポリシーの一つで、DNS クエリに対して複数の値 (IP アドレスやエンドポイント) を返す仕組みを指します。
  • ターゲットヘルスモニタリングを有効化。
  • DynamoDBをグローバルテーブル化。

C.

  • 新しいリージョンにAPI GatewayとLambda関数をデプロイ。
  • Route 53のDNSレコードをフェイルオーバーレコードに変更。
  • ターゲットヘルスモニタリングを有効化。
  • DynamoDBをグローバルテーブル化。

D.

  • 新しいリージョンにAPI Gatewayをデプロイ。
  • Lambda関数をグローバル関数に変更。
  • Route 53のDNSレコードをマルチバリューアンサーに変更し、両API Gatewayをアンサーに追加。
  • ターゲットヘルスモニタリングを有効化。
  • DynamoDBをグローバルテーブル化。

解説:正解はC

1. 新しいリージョンにAPI GatewayとLambda関数をデプロイ

  • API GatewayとLambda関数を新しいリージョンに複製して冗長構成を確立。
  • 高可用性を実現する基盤を構築。

2. Route 53のDNSレコードをフェイルオーバーレコードに変更

  • フェイルオーバーレコードを利用することで、プライマリリージョンに障害が発生した場合、自動的にセカンダリリージョンへトラフィックを切り替え可能。

3. ターゲットヘルスモニタリングを有効化

  • Route 53がプライマリリージョンのAPI Gatewayの状態を監視。
  • 障害検知時に迅速な切り替えを実現。

4. DynamoDBをグローバルテーブル化

  • 複数リージョンでのデータ同期を自動化し、一貫性を確保。
  • プライマリリージョンで書き込まれたデータがセカンダリリージョンでも即座に反映。

他の選択肢が不適切な理由

A. エッジ最適化エンドポイントを利用

  • 問題点:フェイルオーバーを保証する仕組みがない。

B. マルチバリューアンサーを使用

  • 問題点:フェイルオーバーではなく負荷分散向け。障害発生時に特定のリージョンを無効化できない。

D. Lambda関数をグローバル関数に変更

  • 問題点:Lambdaに「グローバル関数」という設定は存在しない。

結論

選択肢Cが最適
  • フェイルオーバー構成をAWSベストプラクティスに基づいて実現。
  • 高可用性、データ一貫性、自動切り替えを確保でき、要件を満たします。
相关文章
クラウド技術の共有 | AWS Site-to-Site
Lazy loaded image
EKSでのWordPressデプロイ:KCNA-JP試験対策 (Kubernetes実践編)
Lazy loaded image
初心者向け!コンテナ化WordPressサイト構築ガイド(超詳細版)
Lazy loaded image
EFSを活用!AWS EC2でDockerを使ったWordPressサイト構築
Lazy loaded image
529-AWS SAP AWS 「理論・実践・一問道場」VPCエンドポイント
Lazy loaded image
528-AWS SAP AWS 「理論・実践・一問道場」Migration Evaluator
Lazy loaded image
003-AWS SAP AWS 「理論・実践・一問道場」 OrganizationsとSCP001-AWS SAP 「理論・実践・一問道場」ハイブリッドDNSソリューション
Loading...
みなみ
みなみ
一个普通的干饭人🍚
最新发布
02-生成AIパスポート試験対策:第2章「生成AI」
2025-2-1
01-生成AIパスポート試験対策:第1章「人口知能」
2025-2-1
究極のAWS認定 AI 実践者 AIF-C01 - 学習メモ
2025-1-27
不要再傻傻的直接买NISA啦
2025-1-27
Kubernetes、仮想マシンとコンテナの概念を超簡単に解説!
2025-1-24
529-AWS SAP AWS 「理論・実践・一問道場」VPCエンドポイント
2025-1-22
公告
🎉欢迎访问我的博客🎉
- 感谢您的支持 --
本站点于2024/09/01建立
👏主要分享IT相关主题👏
系统管理:
Redhat…
容器和编排:
Kubernetes、Openshift…
云计算:
AWS、IBM…
AI入门
以及技术笔记和考证经验
定期更新,欢迎互动。
感谢访问!
快速浏览相关标签