ステップ 3: DynamoDB サービスを使用して実稼働環境のデプロイを行います - Amazon DynamoDB

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ステップ 3: DynamoDB サービスを使用して実稼働環境のデプロイを行います

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

  • ウェブアプリケーションやサービスをデプロイ、スケーリングするための使いやすいサービスである AWS 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 は、Amazon EC2 インスタンスが Tic-Tac-Toe アプリケーションに代わって Games テーブルを更新するために使用できる、一時的なセキュリティ認証情報を返します。ユーザーが Elastic Beanstalk アプリケーションを設定する際には、Amazon EC2 インスタンス、もしくは他のインスタンスが引き受けることができるIAM ロールを指定します。IAM ロールの詳細については、「Amazon EC2 Linux インスタンス用ユーザーガイド」の「Amazon EC2 の IAM ロール」を参照してください。

注記

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

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

  1. 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 により、Amazon EC2 インスタンス、もしくは他のインスタンスが起動され、それらの上で Tic-Tac-Toe アプリケーションバンドルがデプロイされます。Elastic Beanstalk 環境の準備が整ったら、CONFIG_FILE 環境変数を追加して設定ファイル名を指定します。

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

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

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

Amazon EC2 型の IAM ロールを作成すると、Tic-Tac-Toe アプリケーションを実行している Amazon EC2 インスタンスが適切なロールを引き受け、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 Management Console)」を参照してください。

3.2: Amazon DynamoDB でゲームテーブルを作成します

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

3.3: tic-tac-toe アプリケーションコードのバンドルとデプロイ

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

すべてのファイルを展開すると、code フォルダが作成されます。このフォルダを Elastic 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 Web Services 全般リファレンスの「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 (ソフトウェア設定)] の横にある歯車のアイコンを選択します。

      
                                    ソフトウェア設定の横に歯車アイコンを表示する Tic-Tac-Toe アプリケーションのスクリーンショット。
    2. [Environment Properties (環境プロパティ)] セクションの最後で、CONFIG_FILE とその値 beanstalk.config を入力し、[Save (保存)] を選択します。

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

      
                                    環境プロパティセクションを表示するアプリケーションのスクリーンショット。

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

  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 (受け入れる)] を選択します。

    
                            招待リストに testuser1 の招待を表示するアプリケーションのスクリーンショット。
  12. これで、ゲームページが表示されます。

    
                            空の Tic-Tac-Toe グリッドを表示するアプリケーションのスクリーンショット。

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