トピック
前のセクションでは、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 ユーザーガイド」の「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 アプリケーションを本稼働環境にデプロイするには、以下の作業を行います。
-
IAM サービスを使用して、IAM ロールを作成します。DynamoDB アクションが
Games
テーブルにアクセスするためのアクセス許可を付与するポリシーを、このロールにアタッチします。 -
Tic-Tac-Toe アプリケーションコードおよび設定ファイルをバンドルし、
.zip
ファイルを作成します。この.zip
ファイルを使用して、サーバーに配置する Tic-Tac-Toe アプリケーションコードを Elastic Beanstalk に渡します。バンドルの作成に関する詳細については、「AWS Elastic Beanstalk デベロッパーガイド」の「アプリケーションソースバンドルを作成する」を参照してください。設定ファイル (
beanstalk.config
) で、AWS リージョンおよびエンドポイント情報を指定します。Tic-Tac-Toe アプリケーションは、この情報を使用して、通信の対象となる DynamoDB リージョンを決定します。 -
Elastic Beanstalk 環境をセットアップします。Elastic Beanstalk により、Amazon EC2 インスタンス、もしくは他のインスタンスが起動され、それらの上で Tic-Tac-Toe アプリケーションバンドルがデプロイされます。Elastic Beanstalk 環境の準備が整ったら、
CONFIG_FILE
環境変数を追加して設定ファイル名を指定します。 -
DynamoDB テーブルを作成します。Amazon DynamoDB サービスを使用して、ローカルコンピュータ上にではなく
Games
上に AWS テーブルを作成します。このテーブルは、文字列型のGameId
パーティションキーで構成されたシンプルなプライマリキーを持ちます。 -
本稼働環境でゲームをテストします。
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 テーブルを作成します。さらに、指定されたエンドポイントを使用しながら、それ以降のテーブルオペレーションをリクエストします。
-
Tic-Tac-Toe アプリケーションをダウンロードしたフォルダに切り替えます。
-
アプリケーションのルートフォルダで、次のコンテンツを使用して
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
を設定ファイルに追加することで、この暗号化キーを使用するようにすべてのサーバーに伝えます。 -
アプリケーションのルートフォルダのコンテンツを、(
beanstalk.config
ファイルも含めながら) Zip で圧縮します。たとえばTicTacToe.zip
などとします。 -
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 アプリケーションをデプロイし実行します。
-
環境をセットアップするには、次のカスタム 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 コンソールが開きます。場合によっては、サインインが必要にあることがあります。
-
-
Elastic Beanstalk コンソールで、[Review and Launch] (確認して起動) を選択し、[Launch] (起動) を選択します。
-
今後の参照用に URL を書き留めてください。この URL により、Tic-Tac-Toe アプリケーションのホームページが開きます。
-
Tic-Tac-Toe アプリケーションを設定し、設定ファイルの場所を指定します。
Elastic Beanstalk によりアプリケーションが作成されたら、[Configuration] (設定) を選択します。
-
次のスクリーンショットに示すように、[Software Configuration (ソフトウェア設定)] の横にある歯車のアイコンを選択します。
-
[Environment Properties (環境プロパティ)] セクションの最後で、
CONFIG_FILE
とその値beanstalk.config
を入力し、[Save (保存)] を選択します。この環境の更新が完了するには数分かかる場合があります。
更新が完了したら、ゲームをプレイできます。
-
-
ブラウザで、前のステップでコピーした URL を、以下の例に示すように入力します。
http://
<pen-name>
.elasticbeanstalk.comこれにより、アプリケーションのホームページが開きます。
-
testuser1 としてログインし、[作成] を選択して新しい Tic-Tac-Toe ゲームを開始します。
-
[Choose an Opponent] (対戦相手を選択する) ボックスに
testuser2
を入力します。 -
別のブラウザウィンドウを開きます。
ブラウザウィンドウのすべての Cookie を消去し、同じユーザーとしてログインしないようにします。
-
以下の例に示すように、同じ URL を入力してアプリケーションのホームページを開きます。
http://
<env-name>
.elasticbeanstalk.com -
testuser2 としてログインします。
-
保留中の招待のリストで、testuser1 からの招待に対して [accept (受け入れる)] を選択します。
-
これで、ゲームページが表示されます。
testuser1 と testuser2 の両者がゲームをプレイできます。動きがあるごとに、アプリケーションは
Games
テーブルの対応する項目に動きを保存します。