GameLift RealTimeServerで遊んでみよう for Unity（AWS設定編）

# はじめに

### GameLiftとは
>Amazon GameLift は、クラウド内でセッションベースのマルチプレイヤーゲームサーバーをデプロイ、操作、スケーリングする完全マネージド型サービスです。

とのこと。ここでは説明を割愛するので詳しくは[こちらを参照](https://docs.aws.amazon.com/ja_jp/gamelift/latest/developerguide/gamelift-intro.html)してください。
イメージは掴んでおいてください。

簡単にオンラインマルチプレイが実装できるのなら嬉しい。

### 対象者
* AWSのアカウントを持っている方
* GameLiftでとりあえず遊んでみたいと考えているUnityエンジニアの方
* AWSの無料利用枠がまだある方、**もしくは使用金額を払ってでもやりたい方（この辺りは自己責任で）**
* 今回作成するものをきちんとクリーンアップできる方

###このページで行うこと
主にAWSの設定周りになります。

**GameLiftでの設定**

* スクリプトの作成
* フリートの作成
* エイリアスの作成

***IAMでの設定***

* アクセスするユーザーの作成


##スクリプトの作成

* [こちらのドキュメント](https://docs.aws.amazon.com/ja_jp/gamelift/latest/developerguide/realtime-script-callbacks.html)を参考にしコードを作成。

```javascript:server.js
'use strict';

var session;
var logger;

function init(rtSession) {
}

function onProcessStarted(args) {
	return true;
}

function onStartGameSession(gameSession) {
}

function onProcessTerminate() {
}

function onPlayerConnect(connectMsg) {
	return true;
}

function onPlayerAccepted(player) {
}

function onPlayerDisconnect(peerId) {
}

function onPlayerJoinGroup(groupId, peerId) {
	return true;
}

function onPlayerLeaveGroup(groupId, peerId) {
	return true;
}

function onSendToPlayer(gameMessage) {
	return true;
}

function onSendToGroup(gameMessage) {
	return true;
}

function onMessage(gameMessage) {
}

function onHealthCheck() {
	return true;
}

exports.ssExports = {
	init: init,
	onProcessStarted: onProcessStarted,
	onStartGameSession: onStartGameSession,
	onProcessTerminate: onProcessTerminate,
	onPlayerConnect: onPlayerConnect,
	onPlayerAccepted: onPlayerAccepted,
	onPlayerDisconnect: onPlayerDisconnect,
	onPlayerJoinGroup: onPlayerJoinGroup,
	onPlayerLeaveGroup: onPlayerLeaveGroup,
	onSendToPlayer: onSendToPlayer,
	onSendToGroup: onSendToGroup,
	onMessage: onMessage,
	onHealthCheck: onHealthCheck
};
```
* 作成したスクリプトをGameLiftにアップロードしていきます

* メニューから「スクリプトを作成」を選択

![スクリーンショット 2019-12-02 1.15.43のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532557/aa15697b-c9a7-9c7c-e90d-745a99bee0da.png)

* **スクリプト設定**
 名前 : 任意で
 バージョン : 0.1.0とか

* **スクリプトコード**
スクリプトタイプ : Zipファイル
Zipファイル : 作成したファイルを設定(zipに圧縮して)

* 上記を設定し「送信」を押下、アップロードしていく

![スクリーンショット 2019-12-02 1.35.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532557/08385d12-7e6a-2a2a-ab7f-a8a419e49e15.png)

##フリートの作成
* メニューから「フリートの作成」を選択
![スクリーンショット 2019-12-02 1.15.43のコピー2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532557/9d0968d7-c980-3706-0097-4a30dd057bfb.png)

* フリートの詳細に設定する
* 名前 : 任意の名前
* スクリプト : 先ほど作ったスクリプト
![スクリーンショット 2019-12-02 1.29.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532557/3be1d007-9514-36c6-8056-5c4f0ec3d280.png)

* インスタンスタイプはデフォルトのc5.large（その時の安いやつ選んでね）

* 起動パス : 今回作成したスクリプトのパス
* 同時プロセス数 : 任意（今回は10を指定）
![スクリーンショット 2019-12-02 1.33.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532557/a4471434-1102-c2f9-511f-fe19a8aad22d.png)

* 「フリートの初期化」を押下し、作成する
※少し時間がかかる。

##エイリアスの作成
* メニューから「エイリアスの作成」を選択
![スクリーンショット 2019-12-02 1.15.43のコピー4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532557/8cf60efe-b560-646f-56da-34db24d34f6c.png)

* フリートは先ほど作成したものを設定し、「エイリアスを設定」を押下
（選択できない場合は作成に時間がかかってる場合があり、しばし待つ）

![スクリーンショット 2019-12-04 11.46.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532557/4806ecc2-4b69-5e25-c26b-2145a8a01323.png)


##アクセスするユーザーを作成

* サービスからIAMを選択

* まずはポリシーを作成する

* ポリシーを選択し、「ポリシーの作成」を押下
<img width="151" alt="スクリーンショット 2019-12-02 17.50.52のコピー2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532557/103ebe41-73de-e46d-2f7d-d2b4ed0a72b0.png">

* JSONを選択、下記の内容をポリシーに追加し「ポリシーの確認」を押下

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "gamelift:CreateGameSession",
                "gamelift:DescribeGameSessionDetails",
                "gamelift:CreatePlayerSession",
                "gamelift:SearchGameSessions"
            ],
            "Resource": "*"
        }
    ]
}
```

* 名前 : 任意で
*  「ポリシーを作成」を押下
<img width="1269" alt="スクリーンショット 2019-12-02 18.13.48.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532557/eb9faaa2-f7d7-fe6c-9969-28b135589d82.png">

* GameLiftにアクセスするユーザーを作成していく

<img width="151" alt="スクリーンショット 2019-12-02 17.50.52のコピー.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532557/72606a1c-335a-4c5d-5a8e-106b8fe50352.png">

* ユーザー名 : 任意
* アクセスの種類 : プログラムによるアクセスを選択
* 次のステップへ進んでいく
![スクリーンショット 2019-12-04 12.16.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532557/bae02c22-2157-5518-26e3-c23e86c1913e.png)

* 「既存のポリシーを直接アタッチ」を押下
* 先ほどのポリシーを検索しチェック、アタッチする

![スクリーンショット 2019-12-02 18.21.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532557/49e67dda-2edf-c492-d298-ede340ecec74.png)

* そのまま進み情報を確認し作成する
* ユーザーを作成したらcsvをダウンロード
![スクリーンショット 2019-12-02 18.22.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532557/23767331-9fa4-20fa-8dec-4e40bf3c4ac6.png)


本日はここまで。次回につづく。

##注意点
作成した

* スクリプト
* フリート
* エイリアス

に関して使わないときは削除するようにしてください。
でないと***お金がかかっちゃう***ので。

##おわりに
明日は @e73ryo さんの
「MonKey - Productivity Commands」のカスタムコマンドでさらにUnity上の作業を効率化する」です！