Amazon DynamoDB
開発者ガイド (API バージョン 2012-08-10)

ステップ 3: DynamoDB サービスを使用して本稼働環境でデプロイする

前のセクションでは、DynamoDB Local を使用してコンピュータでローカルに Tic-Tac-Toe アプリケーションをデプロイし、テストしました。ここでは、次のようにして本稼働環境でアプリケーションをデプロイします。

  • ウェブアプリケーションやサービスをデプロイ、スケーリングするための使いやすいサービスである Elastic Beanstalk を使用して、アプリケーションをデプロイします。詳細については、「AWS Elastic Beanstalk への Flask アプリケーションのデプロイ」を参照してください。

    Elastic Beanstalk は 1 つ以上の Amazon Elastic Compute Cloud(Amazon EC2)インスタンスを起動します。これは、Tic-Tac-Toe アプリケーションが実行される Elastic Beanstalk を通じて設定します。

  • Amazon DynamoDB サービスを使用して、コンピュータにローカルに存在するのではなく、AWS に存在する Games テーブルを作成します。

さらに、アクセス許可も設定する必要があります。DynamoDB の Games テーブルなど、作成する AWS リソースは、デフォルトでプライベートになります。リソース所有者(Games テーブルを作成した AWS アカウント)のみが、このテーブルにアクセスできます。したがって、デフォルトでは Tic-Tac-Toe アプリケーションは Games テーブルを更新することはできません。

必要なアクセス許可を付与するには、AWS Identity and Access Management(IAM)のロールを作成し、Games テーブルへのアクセス許可をこのロールに付与します。Amazon EC2 インスタンスは最初にこのロールを引き受けます。AWS は、その応答として Tic-Tac-Toe アプリケーションに代わって Amazon EC2 インスタンスが Games テーブルを更新するために使用できる一時的なセキュリティ認証情報を返します。Elastic Beanstalk アプリケーションを設定するときは、Amazon EC2 インスタンスが引き受けることができる IAM ロールを指定します。IAM ロールの詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイドの「Amazon EC2 向けの IAM ロール」を参照してください。

注記

Tic-Tac-Toe 用の Amazon EC2 インスタンスを作成する前に、Elastic Beanstalk がインスタンスを作成する AWS リージョンを最初に決定する必要があります。Elastic Beanstalk アプリケーションを作成したら、設定ファイルで同じリージョン名とエンドポイントを指定します。Tic-Tac-Toe アプリケーションはこのファイルの情報を使用して Games テーブルを作成し、それ以降のリクエストを特定の AWS リージョンに送信します。DynamoDB Games テーブルと Elastic Beanstalk が起動する Amazon EC2 インスタンスの両方は、同じ AWS リージョンにある必要があります。使用可能なリージョンのリストについては、アマゾン ウェブ サービス全般のリファレンスの「Amazon DynamoDB 」を参照してください。

要約すると、Tic-Tac-Toe アプリケーションを本稼働環境にデプロイするには、以下の作業を行います。

  1. AWS IAM サービスを使用して IAM ロールを作成します。DynamoDB アクションが Games テーブルにアクセスするためのアクセス許可を付与するポリシーを、このロールにアタッチします。

  2. Tic-Tac-Toe アプリケーションコードおよび設定ファイルをバンドルし、.zip ファイルを作成します。この .zip ファイルを使用して、サーバーに配置する Tic-Tac-Toe アプリケーションコードを Elastic Beanstalk に渡します。バンドル作成の詳細については、AWS Elastic Beanstalk 開発者ガイドの「アプリケーションソースバンドルを作成する」を参照してください。

    設定ファイル(beanstalk.config)で、AWS リージョンおよびエンドポイント情報を指定します。Tic-Tac-Toe アプリケーションは、この情報を使用して、通信する DynamoDB リージョンを決定します。

  3. Elastic Beanstalk 環境をセットアップします。Elastic Beanstalk は 1 つ以上の Amazon EC2 インスタンスを起動して、Tic-Tac-Toe アプリケーションバンドルをそれらのインスタンス上でデプロイします。Elastic Beanstalk 環境の準備が整ったら、CONFIG_FILE 環境変数を追加して設定ファイル名を指定します。

  4. DynamoDB テーブルを作成します。Amazon DynamoDB サービスを使用して、コンピュータ上にローカルにではなく AWS 上に Games テーブルを作成します。このテーブルは、文字列型の GameId パーティションキーで構成されたシンプルなプライマリキーを持ちます。

  5. 本稼働環境でゲームをテストします。

3.1: Amazon EC2 向けの IAM ロールを作成する

Amazon EC2 型の IAM ロールを作成すると、Tic-Tac-Toe アプリケーションを実行中の Amazon EC2 インスタンスは正しい IAM ロールを引き受け、Games テーブルにアクセスするアプリケーションリクエストを行えるようになります。ロールを作成するときに、[Custom Policy (カスタムポリシー)] オプションを選択し、次のポリシーをコピーして貼り付けます。

{ "Version":"2012-10-17", "Statement":[ { "Action":[ "dynamodb:ListTables" ], "Effect":"Allow", "Resource":"*" }, { "Action":[ "dynamodb:*" ], "Effect":"Allow", "Resource":[ "arn:aws:dynamodb:us-west-2:922852403271:table/Games", "arn:aws:dynamodb:us-west-2:922852403271:table/Games/index/*" ] } ] }

詳細な手順については、IAM ユーザーガイドの「AWS サービス用のロールを作成する (AWS マネジメントコンソール)」を参照してください。

3.2: Amazon DynamoDB での Games テーブルの作成

DynamoDB の Games テーブルはゲームデータを格納します。テーブルが存在しない場合、アプリケーションによって自動的にテーブルが作成されます。この例では、アプリケーションで Games テーブルを作成します。

3.3: Tic-Tac-Toe アプリケーションコードのバンドルとデプロイ

この例のステップを実行した場合、既に Tic-Tac-Toe アプリケーションをダウンロードしています。そうでない場合は、アプリケーションをダウンロードし、すべてのファイルをローカルコンピュータ上のフォルダに展開します。手順については、「ステップ 1: ローカルにデプロイおよびテストを実行する」を参照してください。

すべてのファイルを展開すると、code フォルダが作成されます。このフォルダを Electric Beanstalk に渡すには、このフォルダのコンテンツを .zip ファイルとしてバンドルします。最初に、そのフォルダに設定ファイルを追加する必要があります。アプリケーションは、リージョンとエンドポイント情報を使用して、指定されたリージョンで DynamoDB テーブルを作成し、指定されたエンドポイントを使用して、それ以降のテーブルオペレーションのリクエストを行います。

  1. Tic-Tac-Toe アプリケーションをダウンロードしたフォルダに切り替えます。

  2. アプリケーションのルートフォルダで、次のコンテンツを使用して beanstalk.config という名前のテキストファイルを作成します。

    [dynamodb] region=<AWS region> endpoint=<DynamoDB endpoint>

    たとえば、次のコンテンツを使用します。

    [dynamodb] region=us-west-2 endpoint=dynamodb.us-west-2.amazonaws.com

    利用可能なリージョンのリストについては、アマゾン ウェブ サービス全般のリファレンスの「Amazon DynamoDB」を参照してください。

    重要

    設定ファイルで指定されたリージョンは、Tic-Tac-Toe アプリケーションが DynamoDB で Games テーブルを作成する場所です。次のセクションで説明する Elastic Beanstalk アプリケーションを、同じリージョンで作成する必要があります。

    注記

    Elastic Beanstalk アプリケーションを作成するときは、環境タイプを選択できる環境を起動するようにリクエストします。Tic-Tac-Toe サンプルアプリケーションをテストするには、[Single Instance (単一インスタンス)] 環境タイプを選択し、それ以降をスキップして、次のステップに進みます。

    ただし、[Load balancing, autoscaling (ロードバランシングでオートスケーリング)] 環境タイプでは、高可用性でスケーラブルな環境が提供されます。これは、他のアプリケーションを作成、デプロイする場合に検討してください。この環境タイプを選択する場合、UUID を生成し、次に示すように設定ファイルに追加する必要があります。

    [dynamodb] region=us-west-2 endpoint=dynamodb.us-west-2.amazonaws.com [flask] secret_key= 284e784d-1a25-4a19-92bf-8eeb7a9example

    クライアント/サーバー通信でサーバーが応答を送信するときは、セキュリティのため、サーバーは、クライアントが次のリクエストでサーバーに送り返す署名済み Cookie を送信します。サーバーが 1 台のみの場合、サーバーは、起動時にローカルに暗号化キーを生成できます。多くのサーバーがある場合、それらのサーバーはすべて同じ暗号化キーを知る必要があります。そうしない場合、ピアサーバーによって設定された Cookie を読み取ることができません。secret_key を設定ファイルに追加することで、この暗号化キーを使用するようにすべてのサーバーに伝えます。

  3. アプリケーションのルートフォルダのコンテンツ (beanstalk.config ファイルを含む) を zip ファイルとしてバンドルします。たとえば、TicTacToe.zip

  4. Amazon Simple Storage Service (Amazon S3) バケットに .zip ファイルをアップロードします。次のセクションでは、この .zip ファイルを、1 つ以上のサーバーにアップロードするために Elastic Beanstalk に渡します。

    Amazon S3 バケットにアップロードする方法の手順については、Amazon Simple Storage Service 入門ガイドの「バケットの作成」および「バケットへのオブジェクトの追加」トピックを参照してください。

3.4: AWS Elastic Beanstalk 環境のセットアップ

このステップでは、環境を含むコンポーネントの集合である Elastic Beanstalk アプリケーションを作成します。この例では、1 つの Amazon EC2 インスタンスを起動して、Tic-Tac-Toe アプリケーションをデプロイ、実行します。

  1. 環境をセットアップするには、次のカスタム URL を入力して Elastic Beanstalk コンソールをセットアップします。

    https://console.aws.amazon.com/elasticbeanstalk/?region=<AWS-Region>#/newApplication ?applicationName=TicTacToeyour-name &solutionStackName=Python &sourceBundleUrl=https://s3.amazonaws.com/<bucket-name>/TicTacToe.zip &environmentType=SingleInstance &instanceType=t1.micro

    カスタム URL の詳細については、AWS Elastic Beanstalk 開発者ガイドの「Launch Now URL の作成」を参照してください。URL については、次の点に注意してください。

    • (設定ファイルで指定したものと同じ)AWS リージョン名、Amazon S3 バケット名、およびオブジェクト名を指定する必要があります。

    • テストでは、URL は SingleInstance 環境タイプ、および t1.micro をインスタンスタイプとしてリクエストします。

    • アプリケーション名は一意である必要があります。そのため、前の URL では、applicationName の前に名前を追加することをお勧めします。

    この操作を行うと、Elastic Beanstalk コンソールが開きます。場合によっては、サインインが必要にあることがあります。

  2. Elastic Beanstalk コンソールで、[Review and Launch (確認して起動)] を選択し、[Launch (起動)] を選択します。

  3. 今後の参照用に URL を書き留めてください。この URL により、Tic-Tac-Toe アプリケーションのホームページが開きます。

  4. Tic-Tac-Toe アプリケーションを設定し、設定ファイルの場所を指定します。

    Elastic Beanstalk がアプリケーションを作成したら、[Configuration (設定)] を選択します。

    1. 次のスクリーンショットに示すように、[Software Configuration (ソフトウェア設定)] の横にある歯車のボックスを選択します。

    2. [Environment Properties (環境プロパティ)] セクションの最後で、「CONFIG_FILE」とその値「beanstalk.config」を入力し、[保存] を選択します。

      この環境の更新が完了するには数分かかる場合があります。

    更新が完了したら、ゲームをプレイできます。

  5. ブラウザで、前のステップでコピーした URL を、以下の例に示すように入力します。

    http://<pen-name>.elasticbeanstalk.com

    これにより、アプリケーションのホームページが開きます。

  6. testuser1 としてログインし、[作成] を選択して新しい Tic-Tac-Toe ゲームを開始します。

  7. [Choose an Opponent (対戦相手の選択)] ボックスに「testuser2」と入力します。

  8. 別のブラウザウィンドウを開きます。

    ブラウザウィンドウのすべての Cookie を消去し、同じユーザーとしてログインしないようにします。

  9. 以下の例に示すように、同じ URL を入力してアプリケーションのホームページを開きます。

    http://<env-name>.elasticbeanstalk.com
  10. testuser2 としてログインします。

  11. 保留中の招待のリストで、testuser1 からの招待に対して [accept (受け入れる)] を選択します。

  12. ゲームページが表示されます。

    testuser1 と testuser2 の両者がゲームをプレイできます。動きがあるごとに、アプリケーションは Games テーブルの対応する項目に動きを保存します。