Amazon Chime SDKをEC2を使ってサクッと動かしてみる

# この記事の概要

- Amazon Chime SDKに興味があって、とりあえずデモアプリを動かしたいが、「公式の手順がいきなりコマンドが羅列されていて何をどうしたらいいかわからない・・・」という人向けに、とりあえずEC2を使って動かしてみたときのメモ
- 本手順に沿ってEC2を構築＆コマンドを打っていけば、Amazonが提供するデモアプリを立ち上げられます。

# 準備するもの
- AWSアカウント×1

# 手順

- EC2サーバを一つ立てる。筆者は以下の通り構築
    - OS：Amazon Linux2
    - スペック：t2.small
    - SG：SSH/HTTP/HTTPSを0.0.0.0/0で許可
        - 今回は、ありものを流用したが、SSHだけでよいはず
    - その他は案内通りにクリック

- 以下の通り、EC2にソフトウェアをインストールする

- Gitコマンドをインストールする

```
$ yum -y install git
```
- node.js（12.x）をインストールする
    - バージョンが古いとエラーが出るので注意（後述）

```
$ curl -sL https://rpm.nodesource.com/setup_12.x | sudo bash -
$ sudo yum install --enablerepo=nodesource nodejs
$ npm version
```

- AWS CLI/AWS SAM CLIをインストールする
    - デモアプリでは、S3のバケットやCloudgFormationのstackを新規に作成する手順となっているため、これらのツールをインストールして、自分のAWSアカウントに紐づけておく
    - AWSの公式手順にのっとって作業すること推奨

```
$ pip3 install --upgrade --user awscli
$ export PATH=$HOME/.local/bin:$PATH
$ source ~/.bash_profile
$ aws --version
$ aws configure
AWS Access Key ID [********************]: ★IAMのアクセスキーを入力
AWS Secret Access Key [********************]: ★IAMのシークレットアクセスキーを入力
Default region name [None]:★そのままEnterでよい
Default output format [None]:★そのままEnterでよい
```

```
$ sudo amazon-linux-extras install docker
$ sudo service docker start
$ sudo usermod -a -G docker ec2-user
$ sudo docker ps
$ wget https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-x86_64.zip
$ unzip aws-sam-cli-linux-x86_64.zip -d sam-installation
$ sudo ./sam-installation/install
$ sam --version
$ sudo ./sam-installation/install --update
```


- Amazon-ChimeのSDKをダウンロード/インストールする
    - ```npm run deploy～```で入力するリージョンは現状対応している「us-east-1」にすること。また、```my-bucket```や```my-stack```は新規に作成されるため、分かりやすい名前にすること推奨

```
$ git clone https://github.com/aws/amazon-chime-sdk-js.git
$ cd amazon-chime-sdk-js/demos/serverless/
$ npm install
$ npm run deploy -- -r us-east-1 -b <my-bucket> -s <my-stack> -a meeting
```

- ```npm run deploy～```が成功すると、最後にデモURLが出される
    - 途中、リソースを作成する間、5-6分ほど時間がかかりました

```
> amazon-chime-sdk-js-serverless-demos@0.1.0 deploy /home/ec2-user/amazon-chime-sdk-js/demos/serverless
> node ./deploy.js "-r" "us-east-1" "-b" "my-bucket" "-s" "my-stack" "-a" "meeting"
aws-cli/1.19.95 Python/3.7.9 Linux/4.14.232-176.381.amzn2.x86_64 botocore/1.20.95
SAM CLI, version 1.24.1
（中略）
Deploying serverless application　★ここで5～6分ぐらい画面が止まります
（中略）

Successfully created/updated stack - test-stack in us-east-1

Amazon Chime SDK Meeting Demo URL:
https://XXXXXXXXXXXXXXXX.execute-api.us-east-1.amazonaws.com/Prod/　★ここが表示されればOK
```

- 後はブラウザからURLにアクセスすれば直感的に進められます
    - この先は、クラメソさんのブログがわかりやすいです
    - https://dev.classmethod.jp/articles/what-does-the-amazon-chime-sdk-enable/


# 環境を消す場合
- 「us-east-1」リージョンに、CloudFormation「my-stack」ができているので、それを削除すればきれいに消える
    - **ただし、本EC2は消されないので、手動で消すように**

# うまくいかないときのポイント
- ```npm run deploy～```がうまくいかない場合は、以下のポイントを見直す

**NodeJSのバージョンが古くないか**

- ネットにある手順の一部では、「8.x」を落とすようになっている。README.mdに「Node 10 or higher」とある通り、10.x以上が推奨なので注意

**Rubyがインストールされているか**

- 筆者が初めて試した時も、以下のようにエラーログが出た。
   
```
（中略）
Command npm failed with exit code 1 signal null
sh: ruby: command not found　★
npm ERR! code ELIFECYCLE
npm ERR! syscall spawn
（中略）
```
- その場合は、手動でRubyをインストール（https://qiita.com/Ekodhikodhi/items/01eab1b2b5785163e684）
- Rubyのバージョンは、今回はリンク先と同じ「2.7.0」で問題なかった 

```
（中略）
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
$ rbenv -v
$ git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ cd ~/.rbenv/plugins/ruby-build
$ sudo ./install.sh
$ rbenv install -l
$ sudo yum -y install gcc-c++ glibc-headers openssl-devel readline libyaml-devel readline-devel zlib zlib-devel libffi-devel libxml2 libxslt libxml2-devel libxslt-devel sqlite-devel
$ rbenv install 2.7.0
$ rbenv global 2.7.0
$ ruby -v
```

**AWSの認証情報が入っているか**

- 「aws configure」で認証していないとエラーが出るので注意

```
（中略）
Using region us-east-1, bucket my-bucket, stack my-stack, endpoint https://service.chime.aws.amazon.com, enable-termination-protection false, disable-printing-logs false
Creating S3 bucket my-bucket
Failed to create bucket: 1
make_bucket failed: s3://my-bucket Unable to locate credentials★

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! amazon-chime-sdk-js-serverless-demos@0.1.0 deploy: `node ./deploy.js "-r" "us-east-1" "-b" "my-bucket" "-s" "my-stack" "-a" "meeting"`
npm ERR! Exit status 1
npm ERR!
（中略）
``