Amazon Web Services ブログ

大規模なゲームサーバを最大90%安いコストで運用する方法

Fortnite: Battle Royale, Warframe, そしてApex Legendsなど成功している多くのビデオゲームでは、プレイヤーがゲームの一部に無料でアクセスできる”Free-to-Play”モデルを採用しています。このようなゲームは、もはや低品質なものではなく、プレミアムな品質を必要とします。ビジネスモデルはコストの制約を受けていますが、そのような状況に対してAmazon EC2 スポットインスタンスは実行可能な低コストのコンピューティングオプションを提供します。カジュアルなマルチプレイヤーゲームはもちろん、マルチプレイヤーゲームサーバのワークロードを実行するAmazon EKSコンテナのオーケストレーションではプレイヤーへの影響を最小限に抑え、コストを最適化するメカニズムが必要となりますが、そのような場合にはスポットインスタンスの利用がフィットします。 スポットインスタンスはAWSクラウドの利用可能な予備のコンピュートキャパシティを提供することで、オンデマンドに比べて大幅な割引価格でご利用が可能です。スポットインスタンスによるコストを最適化によって、これまでと同じ予算でアプリーケーションのスループットを最大10倍にまでスケールできます。スポットインスタンスはフォールトトレラント(障害許容)なワークロードに最適です。マルチプレイヤーゲームサーバも例外ではありません。ゲームサーバの状態は、リアルタイムなプレイヤーの入力によって更新され、サーバは一時的な状態を保持します。ゲームサーバのワークロードは使い捨てになることが多く、スポットインスタンスを利用することでコンピュートにかかるコストを最大90%削減できます。このブログでは、スポットインスタンスを効果的に使用するためのゲームサーバワークロードの設計方法について説明します。 ゲームサーバワークロードの特徴 簡単に言えば、マルチプレイヤーゲームサーバは現在のキャラクターの位置と状態(主にアニメーション)を更新するためにほとんどの時間を費やします。残りの時間は、戦闘に関するアクションや移動、その他ゲームイベントに関連する画像の更新に費やされます。具体的にゲームサーバのCPUは、クライアントの位置情報を受信し、ゲームステートを計算し、その情報を特定の複数のクライアントに送信するという処理のためにネットワークI/Oを利用します。以上のことから、ゲームサーバのワークロードはカジュアルなマルチプレイヤーゲームには汎用インスタンスタイプ、ハードコアなマルチプレイヤーゲームにはコンピューティング最適化インスタンスタイプが適しています。 AWSはコンピューティング最適化(C4およびC5)や汎用(M5)をはじめとした多種多様なインスタンスタイプにおいてスポットインスタンスを提供しています。キャパシティはアベイラビリティゾーン内のインスタンスタイプごとに別々に変動するため、幅広いインスタンスタイプを使用することで同じ価格でより多くのコンピューティング能力を得ることができます。スポットインスタンスのベストプラクティスに関する情報はAmazon EC2 Spot Instancesの開始方法をご覧ください。 専用のゲームサーバを実行するためのソリューションの1つとして、Amazon GameLiftがあります。GameLiftはAWSの各リージョンでAmazon GameLift FleetIQやスポットインスタンスをデプロイします。FleetIQはプレイヤーのレイテンシ、インスタンス料金、そしてスポットインスタンスの中断(※)を気にしなくてもいいように中断レート(Interuption Rate)をベースとして新しいセッションをゲームサーバに振り分けます。より詳細な情報はAWS Game Techブログに掲載されている”Reduce Cost by up to 90% with Amazon GameLift FleetIQ and Spot Instances“をご覧ください。 (※)スポットインスタンスは空きリソースを提供している特性上、インスタンス需要に応じて中断されることがあります。詳しくはスポットインスタンスの中断をご覧ください。 その他のケースとして、マルチプレイヤーゲームサーバの展開にKubernetesやSwarm, Amazon ECSなどのコンテナベースのオーケストレーションによるゲームサーバのデプロイメントパターンを利用することができます。これらのシステムは大量のゲームサーバとしてデプロイされた複数のリージョンにまたがるDockerコンテナを管理します。本ブログの残りのパートではコンテナ化されたゲームサーバソリューションにフォーカスします。コンテナは軽量で、高速に起動し、ベースとなるインスタンスの使用率が向上するという特性があるため、ゲームサーバのワークロードに適しています。 なぜAmazon EC2 スポットインスタンスを利用するのか? スポットインスタンスは、使い捨てのゲームサーバワークロードを実行するための選択肢のひとつです。中断2分前に通知を受け取ることで、中断に備えることができます。インスタンスメタデータとAmazon CloudWatchによる通知処理の例を2つご紹介します。詳しくはこのブログの後半の「中断のハンドリング」および「ゲームサーバを冗長化するためには?」を参照してください。 スポットインスタンスは汎用およびコンピューティング最適化(C4およびC5)などゲームサーバのワークロードに適合するさまざまなEC2インスタンスタイプを提供します。また、スポットインスタンスは低い中断レートを提供します。スポットインスタンスアドバイザーは過去の履歴に基づいて、中断レートの低いインスタンスタイプを選択するのに役立ちます。 中断のハンドリング スポットインスタンスを使用する場合、中断によるプレイヤーへの影響を回避することが重要です。ここでは、GitHub上の”Spotable Game Server“で公開されているリファレンスアーキテクチャとサンプルコードによって、プレイヤー影響を避けるための戦略についてご紹介します。具体的には、Amazon EKSにおける、”kubectl drain”コマンドによるNode Drainageを例として挙げます。これにより、ノードのアンスケジューリング(解除)が可能となり、プレイヤーエクスペリエンスに影響を及ぼす可能性がある終了期間(terminationGracePeriodSeconds)にあるノード上で実行されているpodを削除します。その結果、podは正常に終了するシグナルがゲーム内に送信されている間も可動を続けます。 Node Drainage(ノードのドレイニング) Node […]

Read More

Amazon QuickSight が ML Insights の一般提供を開始

re:Invent 2018 で、そのまま使える機械学習と自然言語機能をセットにしたML Insightsのプレビューを発表しました。これは、Amazon QuickSight ユーザーにビジュアライゼーションをを超えるビジネスインサイトを提供するものです。そして本日、ML インサイトの一般提供を開始しました。 お客様が生成するデータの量は日々増え続けるにつれ、ビジネスのインサイトのためにデータを活用することはますます大変になっています。こうした背景から機械学習がお役に立てるようになりました。Amazon は機械学習を使用して、ビジネス分析でのさまざまな側面を自動化および拡張してきた草分け的企業です。 新しい ML Insights機能により、Amazon QuickSight は、隠れたデータの傾向を発見し、ビジネスを左右する重要な要因を見つけ、将来の結果を予測したり、データを要約して理解しやすい自然言語で表現したりできます。また、手作業による分析と調査の時間の節約に役立ちます。すぐに使える 機械学習と Amazon QuickSight の豊富な分析機能を統合する包括的な BI ソリューションを構築することで、組織の全員にインタラクティブなダッシュボードを配布できます。ML インサイトを使用すると、機械学習が容易となり、技術や ML スキルセットに関わらず、誰でも簡単に数週間ではなくわずか数分でデータからインサイトを得ることができます。ML によるインサイト機能は次のとおりです。 ML を活用した異常検知は、何十億ものデータポイントを継続的に分析することによって、隠れたインサイトを発見するのに役立ちます。 ポイントアンドクリックで簡単に成長とビジネストレンドを予想するML を活用した予測 ダッシュボードの内容をやさしい言葉で伝えるのに役立つ自動ナラティブ。 ML Insightsの簡単な概要については、こちらのビデオをご覧ください。 ML Insightsをご使用いただくために、このブログ記事では ML を活用した新しい機能について説明します。 お客様のユースケース 過去 3 か月間にわたる ML Insightsのプレビュー期間中、電気通信、エンターテインメント、マーケティング、小売、エネルギー、金融サービス、ヘルスケアなどの幅広い業界のお客様が、ML Insightsを使用して、増え続ける AWS のデータとオンプレミスでのビジネスインサイトを活用してきました。以下では、ML Insightsで行っている素晴らしい例をご紹介します。 エクスペディア・グループは、世界最大級の旅行プラットフォームであり、世界中の旅を簡単にすることを目指しています。 「エクスペディア・グループでは、2 つの重要な戦略的課題があります。顧客中心であること、そしてグローバルをローカルにすることです。だからこそ、Amazon QuickSight などのツールが非常に役立っており、当社のビジネスメトリクスの測定、報告、行動を容易になることで、お客様が行う旅行に関する検索で最適な回答を得るお手伝いができるのです。Amazon QuickSight が提供するそのまま使える ML Insightsは、ビジネスの異常の発生を継続的に監視し、異常値が発生すると関係者に警告し、ビジネスプロジェクトの将来の傾向予測を支援してくれます。このため、これらの機能をゼロから構築する必要がなくなり、チームは他の優先事項に集中することができます。」 エクスペディア・グループでフライトのデータと解析を行うテクノロジーディレクターの […]

Read More

Amazon DynamoDB グローバルセカンダリインデックスを設計する方法

大学時代、私はリレーショナルデータベースのシステム要件をモデル化するために、エンティティ関係図を作成しました。このプロセスでは、ソフトウェアシステムのすべてのエンティティを検索し、それらのエンティティ間の関係を定義しました。次に、データベースがどのクエリをサポートする必要があるかを判断する前に、関係とエンティティをデータベーステーブルにモデル化しました。データベーススキーマを設計するこの方法は、スケーラビリティとより一貫したパフォーマンスを利用するために非リレーショナルデータベースを使い始めるまではうまく機能しました。 非リレーショナルデータベースでは、スキーマ設計のアプローチは逆になります。データベーススキーマを設計する前に、アプリケーションが必要とするクエリを特定するために「クエリ優先」アプローチを使用するのです。そのため、データはアプリケーションが使用する必要がある方法で明示的に保存され、クエリの効率が向上します。 また、クエリに柔軟性を追加したい場合は、Amazon DynamoDB でグローバルセカンダリインデックスを使用することができます。DynamoDB テーブルでグローバルセカンダリインデックスを使用すると、非キー属性を使用して他のディメンションでデータを柔軟に照会できます。 ただし、効率的なクエリパフォーマンスを維持するには、DynamoDB テーブルのスキーマを設計したのと同じ方法で、グローバルセカンダリインデックスのスキーマを慎重に設計する必要があります。このブログ記事では、グローバルセカンダリインデックスのスキーマを設計するためのアプローチを示し、設計プロセスにおける一般的な落とし穴を回避する方法を説明し、コストを削減するためのヒントを提供します。 グローバルセカンダリインデックスのスキーマ設計プロセス 次の図は、グローバルセカンダリインデックスのスキーマを設計する方法について、この記事で説明しているアプローチをまとめたものです。 クエリパターンを特定する アプリケーション固有のクエリパターン (テーブルがサポートするクエリの種類) が、グローバルセカンダリインデックスの設計を推進します。設計を推進する中心的な質問は、「グローバルセカンダリインデックスが回答する、どのような質問が必要であるか?」ということです。 回答が必要な質問が決まったら、質問をテーブルデータのクエリにマッピングします。「より大きい」、「より小さい」、「の間」、「で始まる」などの範囲クエリに基づくデータフィルターを使用します。 アクセスしなければならないがフィルタリングやソートを必要としない他のデータについても考慮する必要があります。たとえば、オンラインショッピングのウェブサイトに商品情報を表示するには、商品の ProductId でデータをフィルター処理します。ただし、クエリでアクセスする必要があるその他のデータには、製品の説明、価格、重量、製品の色などがあります。できるだけ多くのクエリを事前に特定します。スキーマ設計でクエリを考慮に入れると、グローバルセカンダリインデックスのコストとパフォーマンスを最適化するのに役立ちます。 それでは例を見て、アプリケーション固有のクエリがテーブルクエリにどのように変換されるのかを確認しましょう。たとえば、オンラインショッピングのウェブサイトが、顧客の注文をすべて OrderId をパーティションキーとして Orders テーブルに保存しているとします。また、このテーブルには、OrderDate、CustomerId、Status など、注文に関するその他のデータも保存されています。次の表は、アプリケーション固有の一般的な質問とそれに対応するテーブルクエリの一部を示しています。 アプリケーション固有の質問 テーブルクエリ 注文日順に並べ替えられた顧客のすべての注文を検索する Orders テーブルのすべての注文を CustomerId でフィルター処理してから、OrderDate で並べ替える 特定の日付範囲内の特定の顧客の注文を取得する Orders テーブルのすべての注文を CustomerId でフィルター処理してから、OrderDate での範囲照会でフィルター処理する 顧客の保留中の注文をすべて探す Orders テーブルのすべての注文を CustomerId でフィルター処理してから、Status を「Pending」としてフィルター処理する 5 日以上経過している顧客の保留中の注文をすべて探す Orders テーブルのすべての注文を CustomerId でフィルター処理してから、Status を「Pending」とし、OrderDate < CurrentDate-5 の範囲照会でフィルター処理する 顧客のすべての注文の OrderId、OrderDate、Status […]

Read More

Amazon Connectインスタンスへの迷惑電話を特定し対処する

我々はAmazon Connectによって強化されたコンタクトセンターを展開してきました。 あなたは今、顧客から電話で問い合わせを受けています。 素晴らしいことです。 ただし、迷惑電話が増えてきていることにも気付いています。 それはあまり素晴らしいことではありません。 このブログでは、発信者の番号に基づいてこの不要な着信通話の発信者を識別するソリューションを構築する方法をご紹介します。 着信を識別して対処するステップ まず、Amazon DynamoDBに電話番号のリストを作成し、Amazon Connectにすべての着信呼び出しについてこのリストをチェックさせます。 Amazon Connectがこのリストにアクセスするために、AWS LambdaをAmazon Connect問い合わせフローと統合します。 その後、すべての着信呼び出しに対してそのLambda関数を実行します。 AWS Lambdaは、着信呼び出しの番号についてデータベースを検索します。 一致したレコードが見つかった場合に問い合わせフロー内で別のパスへルーティングできるようにするために、AWS Lambdaはレコードの一致を示す値を返します。 このプロセスの4つのステップは以下のとおりです: Amazon DynamoDBにテーブルを作成する AWS Lambdaを使用して番号データベースを検索する 問い合わせフローでAWS Lambdaを使用するようにAmazon Connectを設定する Amazon Connectに返される値を確認する ステップ1:Amazon DynamoDBにテーブルを作成する Amazon DynamoDBコンソールを開きます。 テーブル作成を選択します。 [テーブル名]に、filteredNumbersと入力します。 プライマリキーにphoneNumberと入力します。 デフォルト設定を使用をチェックしたままにして、作成を選択します。 テーブルを作成したら、ブロックする電話番号を追加します。filteredNumbersを選択し、項目タブを選択し、「項目の作成」を選択します。 国際的に認められたE.164形式で電話番号を入力してください。 たとえば、北米の場合は+ 15551234567などです。 ブロックする番号を入力してから、保存を選択します。 ブロックするすべての番号について手順6を繰り返します。 注意 電話番号を入力するこれらの手順では、番号を個別に入力する必要があります。 電話番号をまとめて追加する方法については、DynamoDB CLIリファレンスを参照してください。 ステップ2:AWS Lambdaを使用して番号リストを検索する AWS Lambdaは、Amazon ConnectとAmazon DynamoDBテーブルをつなぐパイプの役割を果たします。 Amazon […]

Read More

Amazon ConnectとSalesforce Service Cloudによる自動化されたAIエクスペリエンスの構築

昨年我々 は Salesforce のAmazon Connect CTIアダプタの最初のリリースを発表しました。我々 は、多くの企業のお客様が革新的な顧客体験を提供するこのインテグレーションを活用するのを見てきました。お客様からのフィードバックに基づいて、以下の追加機能を備えた CTI アダプタのバージョン 2(訳注)もすでにリリースされています: 訳注)本日時点で最新のCTIアダプタのバージョンは3.1です。 Salesforce 画面ポップアップの機能追加:Caller IDに加え、Amazon Connectの問い合わせフローで設定したコンタクト属性に基づいてポップアップさせる機能をサポート。 Salesforce オムニチャネルのサポート:Amazon Connectの音声チャネルをSalesforceチャット、電子メール、SMS チャネルと連携させることが可能に。 ロギングと録音のサポート:自動的にAmazon Connectの通話をログに記録し、Salesforce の通話記録に表示します。 Lambdaによるデータ活用:事前に構築済みのLambdaファンクションを使うことによってSalesforceの顧客データをカスタマーエクスペリエンスの向上のために活用することが出来ます。 SSO/SAML サポート:シームレスなシングル サインオンをAmazon Connectと Salesforce で有効に出来ます。 Aamzon Connectをはじめてセットアップする場合は、こちらのgetting started guideをご覧ください。また、CTIアダプタインストールガイド ではSalesforce AppExchangeのCTIアダプタの設定方法についてご案内しております。本ブログでは、作成済みのAamzon Connectインスタンスに対して設定済みのCTIアダプタがSalesforceインスタンスにセットアップされていることを前提にしております。また、Amazon Lex ボットのセットアップについての一定の知識も前提にしております。 CRMエージェントルーティングによる自動化されたAIエクスペリエンスの構築 あなたは小規模な再生可能エネルギー関連企業におけるコンタクトセンターの責任者だとしましょう。そのコンタクトセンターでは、エージェントはセールスについてとサービスについての両方の問い合わせを受けることとします。両方の問い合わせを受けるため、エージェントは顧客が問い合わせをしている理由を知る必要があり、また、ケースや連絡先情報のようなキーとなる情報がスクリーンにポップアップする必要があります。 Amazon Connectインスタンスでは、Amazon Lex ボットを活用したシンプルな問い合わせフローを設定します。この問い合わせフローは、顧客が問い合わせをしている理由、つまりインテントとしてAmazon Lexに定義するもの、が何かを尋ねるためのものです。顧客の言葉に応じて、Amazon Lexはその言葉を定義済みのインテントの一つにマッチさせます。セールスについての問い合わせか、サービスについての問い合わせかが確定したら、ケース番号を尋ねてそれをスロットに格納します。ボットがデータを収集したら、Amazon Connectはそれをその顧客の既知の何らかの情報とともにスクリーンにポップアップし、エージェントに伝えます。 初めのステップは二つのAmazon Lexボットの作成です:GetCustomerCallReasonとGetCaseNumberです。GetCustomerCallReasonは二つのインテントを持っています:SalesCallとSupportCallです。いずれのインテントについても、それぞれの問い合わせの理由についての発話をこれらのインテントにあてはめたいと思うでしょう。以下のスクリーンショットはそれぞれのインテントについての作り方を示すものです。 SalesCall インテント   SupportCall インテント これらのボットとインテントの名前は問い合わせフローの中で参照しますので、上の図と同じ名前で作成するようにしましょう。つぎに、Amazon LexボットGetCustomerCallReasonを作成し、発行します。ここで、prodというエイリアスを使用しました。 […]

Read More

Amazon FSx for Lustre / Amazon FSx for Windows が東京リージョンに対応しました

みなさん、こんにちは。アマゾン ウェブ サービス  プロダクトマーケティング エバンジェリストの亀田です。 re:Invent 2018で発表となったマネージド型ファイルストレージである、Amazon FSx for Lustre / Amazon FSx for Windows が東京リージョンに対応しました。 Amazon FSx for Lustre 完全マネージド型のファイルシステムで、1 秒間に最大数百ギガバイトのスループット、百万単位の IOPS、ミリ秒未満のレイテンシーで大量のデータセットを処理できる Lustre ファイルシステムを実行することができます。Amazon S3 とシームレスに統合されているため、長期のデータセットを高パフォーマンスのファイルシステムと簡単に結び付けて、コンピューティング集約型ワークロードを実行できます。データを自動的に S3 から FSx for Lustre にコピーしてワークロードを実行し、結果を S3 に書き込むことができます。 Amazon FSx for Windows Lustreと同様に完全マネージド型のファイルサーバであり、ネイティブ Microsoft Windows ファイルシステムを提供しています。共有のファイルストレージとして利用することが可能で、SMB プロトコルと Windows NTFS、Active Directory (AD) 統合、Distributed File System (DFS) も完全サポートしており、複数のEC2からアクセスが可能な共有ストレージ環境を構築することができます。 従来Linux環境では、Amazon Elasitc […]

Read More

Amazon EMR で Amazon EC2 スポットインスタンスを使用して、Apache Spark アプリケーションを実行するベストプラクティス

 Apache Spark は、分析ジョブの実行に使用する最も一般的なツールの 1 つになりました。その使いやすさ、速いパフォーマンス、メモリとディスクの使用率、および組み込みのフォールト トレランスが人気の理由です。これらの機能は、インスタンスが使い捨てや一時的に使用できる状態になっているクラウド コンピューティングの概念と強く関連付けられます。 Amazon EC2 スポットインスタンスは、オンデマンド料金に比べて大幅な割引料金で、AWS クラウドで利用可能な予備コンピューティング容量を提供します。 EC2 が容量を元に戻す必要がある場合、EC2 は 2 分間の通知でスポットインスタンスを中断できます。スポットインスタンスは、さまざまなフォールト トレラントで柔軟なアプリケーションに使用できます。例としては、分析、コンテナー化されたワークロード、ハイパフォーマンス コンピューティング (HPC)、ステートレス ウェブサーバー、レンダリング、CI/CD、その他のテストと開発ワークロードがあります。 Amazon EMR は、EC2 インスタンスを使用して膨大な量のデータ処理を簡単かつ高速で、そして費用対効果の高い方法で行う、マネージド Hadoop フレームワークを提供します。Amazon EMR を使用するときは、Spark ソフトウェア (または Hadoop フレームワークの他のツール) のインストール、アップグレード、およびメンテナンスについて心配する必要はありません。基となるハードウェアやオペレーティング システムのインストールとメンテナンスについても、ご心配は要りません。代わりに、ビジネス アプリケーションに集中し、Amazon EMR を使用して、区別されていない手間がかかる処理を取り除くことができます。 このブログ記事では、スポットインスタンスを使用してコストを最適化し、Amazon EMR で Spark アプリケーションを効率的に実行することに焦点を当てます。Spark アプリケーションのフォールト トレランスを高め、スポットインスタンスを使用するベストプラクティスをいくつかお勧めします。これらは、可用性を犠牲にしたり、パフォーマンスやジョブの長さに大きな影響を与えたりすることなく機能します。

Read More