Edited at

AWS ECSを使って五目並べを作った


はじめに

dockerの勉強にawsのコンテナオーケストレーションツールの一つであるECSecs-cliを使って触ってみました。ECSには Task Definitions という複数のコンテナの定義を行うところがあり、いってみればdocker-compose.ymlみたいなものです。

ecs-cliを使えば、docker-compose.ymlの情報から Task Definitions の定義を勝手に作ってくれます。なので、ecsのタスク定義の書き方が全くわからなくても(僕自身も書き方知らない)、docker-compose.ymlが書けさえすれば、ECSを使って何か作れます。

便利そうなので試してみました。


作ったもの

五目並べを作りました。

ログイン不要で遊べます。別タブで開くと別ユーザー扱いになるので、タブを二つ開けば一人でも遊べます(楽しくはない)。

https://gomoku-narabe-xwtvajjeus.now.sh/

使った技術としては、フロントはnext、websocketを使ってデプロイにnowを利用。

サーバー側はexpress、redisを使ってデプロイにecsを利用しました。

アプリケーション自体の説明は特にせず、ecs周りの作業の流れを中心に書いていきます。

※一人で遊んでいる様子

gomoku.gif


サーバー側のアプリケーションのイメージをdocker hubにpush

※実際にECSを本番環境で使う場合はdocker hubに上げるのではなくECRにイメージをあげるのが普通のよう。

FROM node:11-alpine

COPY ./ /var/work

# イメージの作成

$ docker build ./ -t pokotyan/redis-express

# イメージのpush
$ docker push pokotyan/redis-express:latest


docker-compose.ymlの準備

redis:

image: redis
ports:
- 6379:6379
app:
image: pokotyan/redis-express:latest # pushしたdocker hubのイメージ
working_dir: '/var/work'
ports:
- 8999:8999
links:
- redis
environment:
- PORT=8999
command:
sh -c 'npm i && node index.js'


ecs-cliのインストール

https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/ECS_CLI_installation.html

$ sudo curl -o /usr/local/bin/ecs-cli https://s3.amazonaws.com/amazon-ecs-cli/ecs-cli-darwin-amd64-latest

Password:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 37.6M 100 37.6M 0 0 190k 0 0:03:22 0:03:22 --:--:-- 206k
$ sudo chmod +x /usr/local/bin/ecs-cli
$
$ ecs-cli --version
ecs-cli version 1.14.0 (1327575)
$


ecs-cliで利用するアカウントの設定

https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/cmd-ecs-cli-configure-profile.html

$ ecs-cli configure profile --profile-name default --access-key hoge --secret-key huga

INFO[0000] Saved ECS CLI profile configuration default.
$

~/.ecs/credentials にこんな感じで設定されます。

$ vim ~/.ecs/credentials

version: v1
default: default
ecs_profiles:
default:
aws_access_key_id: hoge
aws_secret_access_key: huga


awsコンソール上でキーペアを作成

https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/get-set-up-for-amazon-ecs.html#create-a-key-pair

キーペア名は ecs1 で作成しました。

スクリーンショット 2019-04-21 21.15.19.png


クラスタの作成

$ ecs-cli configure --region ap-northeast-1 --cluster gomoku-narabe-cluster

INFO[0000] Saved ECS CLI cluster configuration default.
$

~/.ecs/config が生成されます。

$ cat ~/.ecs/config

version: v1
default: default
clusters:
default:
cluster: gomoku-narabe-cluster
region: ap-northeast-1
default_launch_type: ""
$


クラスタの起動

--keypair には作成したキーペアのキーペア名 ecs1 を入れます

$ ecs-cli up --keypair ecs1 --capability-iam --instance-type t2.micro

INFO[0000] Using recommended Amazon Linux 2 AMI with ECS Agent 1.28.0 and Docker version 18.06.1-ce
INFO[0001] Created cluster cluster=gomoku-narabe-cluster region=ap-northeast-1
INFO[0001] Waiting for your cluster resources to be created...
INFO[0002] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS
INFO[0062] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS
INFO[0123] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS
VPC created: vpc-0b43bf1e36fbc01b1
Security Group created: sg-080d991cce3df9220
Subnet created: subnet-04a85d1e7691360de
Subnet created: subnet-06fab8574826ab488
Cluster creation succeeded.
$


composeを使ってタスクを動かす

ecs-cli compose up はdocker-compose.ymlがあるdirに移動してから実行

実行したところ、reason="RESOURCE:MEMORY" でメモリが足りず失敗しました。

$ ecs-cli compose up

WARN[0000] Skipping unsupported YAML option for service... option name=networks service name=app
WARN[0000] Skipping unsupported YAML option for service... option name=networks service name=redis
INFO[0003] Using ECS task definition TaskDefinition="kurohige-server:1"
INFO[0004] Couldn't run containers reason="RESOURCE:MEMORY"
INFO[0004] Couldn't run containers reason="RESOURCE:MEMORY"
$

docker-compose.ymlにmem_limitを追加し、

  mem_limit: 268435456

再度実行。起動できました。

$ ecs-cli compose up

WARN[0000] Skipping unsupported YAML option for service... option name=networks service name=redis
WARN[0000] Skipping unsupported YAML option for service... option name=networks service name=app
INFO[0000] Using ECS task definition TaskDefinition="kurohige-server:5"
INFO[0000] Starting container... container=4ccea8db-e34b-4729-b85e-9e400993bdb4/redis
INFO[0000] Starting container... container=4ccea8db-e34b-4729-b85e-9e400993bdb4/app
INFO[0000] Describe ECS container status container=4ccea8db-e34b-4729-b85e-9e400993bdb4/app desiredStatus=RUNNING lastStatus=PENDING taskDefinition="kurohige-server:5"
INFO[0000] Describe ECS container status container=4ccea8db-e34b-4729-b85e-9e400993bdb4/redis desiredStatus=RUNNING lastStatus=PENDING taskDefinition="kurohige-server:5"
INFO[0013] Describe ECS container status container=4ccea8db-e34b-4729-b85e-9e400993bdb4/app desiredStatus=RUNNING lastStatus=PENDING taskDefinition="kurohige-server:5"
INFO[0013] Describe ECS container status container=4ccea8db-e34b-4729-b85e-9e400993bdb4/redis desiredStatus=RUNNING lastStatus=PENDING taskDefinition="kurohige-server:5"
INFO[0020] Started container... container=4ccea8db-e34b-4729-b85e-9e400993bdb4/app desiredStatus=RUNNING lastStatus=RUNNING taskDefinition="kurohige-server:5"
INFO[0020] Started container... container=4ccea8db-e34b-4729-b85e-9e400993bdb4/redis desiredStatus=RUNNING lastStatus=RUNNING taskDefinition="kurohige-server:5"
$ ecs-cli ps
Name State Ports TaskDefinition Health
4ccea8db-e34b-4729-b85e-9e400993bdb4/app RUNNING 13.231.51.240:8999->8999/tcp kurohige-server:5 UNKNOWN
4ccea8db-e34b-4729-b85e-9e400993bdb4/redis RUNNING 13.231.51.240:6379->6379/tcp kurohige-server:5 UNKNOWN
$

ただ、サーバーの起動はしているみたいですがフロントからサーバーに接続できてない感じに。

起動しているコンテナインスタンスにssh接続して(事前にセキュリティグループにmyIPを穴あけしておく)

docker logsを見たところ起動はしていそうでした。

$ ssh -i ~/.ssh/ecs1.pem ec2-user@13.231.51.240

The authenticity of host '13.231.51.240 (13.231.51.240)' can't be established.
ECDSA key fingerprint is SHA256:59y2Px6+eBZcyemqy5vIMuU7wE8nVU1MWATN+Jc6AHQ.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '13.231.51.240' (ECDSA) to the list of known hosts.
Received disconnect from 13.231.51.240 port 22:2: Too many authentication failures
Disconnected from 13.231.51.240 port 22
$
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2a7d4643a69c pokotyan/redis-express:latest "sh -c 'npm i && nod…" About an hour ago Up About an hour 0.0.0.0:8999->8999/tcp kurohige-server_app_1
713c6af50434 redis "docker-entrypoint.s…" 34 hours ago Up About an hour 0.0.0.0:6379->6379/tcp kurohige-server_redis_1
$
$ docker logs 2a7d4643a69c
npm WARN kurohige-server@1.0.0 No description
npm WARN kurohige-server@1.0.0 No repository field.

up to date in 2.461s
Server started on port 8999 :)
$
$ docker logs 713c6af50434
1:C 21 Apr 2019 12:35:57.692 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 21 Apr 2019 12:35:57.692 # Redis version=5.0.4, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 21 Apr 2019 12:35:57.692 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
1:M 21 Apr 2019 12:35:57.694 * Running mode=standalone, port=6379.
1:M 21 Apr 2019 12:35:57.694 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
1:M 21 Apr 2019 12:35:57.694 # Server initialized
1:M 21 Apr 2019 12:35:57.694 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
1:M 21 Apr 2019 12:35:57.694 * DB loaded from disk: 0.000 seconds
1:M 21 Apr 2019 12:35:57.694 * Ready to accept connections
1:C 21 Apr 2019 12:41:23.767 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 21 Apr 2019 12:41:23.767 # Redis version=5.0.4, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 21 Apr 2019 12:41:23.767 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
1:M 21 Apr 2019 12:41:23.768 * Running mode=standalone, port=6379.
1:M 21 Apr 2019 12:41:23.768 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
1:M 21 Apr 2019 12:41:23.768 # Server initialized
1:M 21 Apr 2019 12:41:23.769 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
1:M 21 Apr 2019 12:41:23.769 * DB loaded from disk: 0.000 seconds
1:M 21 Apr 2019 12:41:23.769 * Ready to accept connections
1:C 21 Apr 2019 13:14:13.476 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 21 Apr 2019 13:14:13.476 # Redis version=5.0.4, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 21 Apr 2019 13:14:13.476 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
1:M 21 Apr 2019 13:14:13.477 * Running mode=standalone, port=6379.
1:M 21 Apr 2019 13:14:13.477 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
1:M 21 Apr 2019 13:14:13.477 # Server initialized
1:M 21 Apr 2019 13:14:13.477 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
1:M 21 Apr 2019 13:14:13.477 * DB loaded from disk: 0.000 seconds
1:M 21 Apr 2019 13:14:13.477 * Ready to accept connections
1:C 21 Apr 2019 13:34:15.934 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 21 Apr 2019 13:34:15.934 # Redis version=5.0.4, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 21 Apr 2019 13:34:15.934 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
1:M 21 Apr 2019 13:34:15.935 * Running mode=standalone, port=6379.
1:M 21 Apr 2019 13:34:15.935 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
1:M 21 Apr 2019 13:34:15.935 # Server initialized
1:M 21 Apr 2019 13:34:15.935 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
1:M 21 Apr 2019 13:34:15.935 * DB loaded from disk: 0.000 seconds
1:M 21 Apr 2019 13:34:15.935 * Ready to accept connections
1:C 22 Apr 2019 21:12:00.435 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 22 Apr 2019 21:12:00.435 # Redis version=5.0.4, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 22 Apr 2019 21:12:00.435 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
1:M 22 Apr 2019 21:12:00.444 * Running mode=standalone, port=6379.
1:M 22 Apr 2019 21:12:00.444 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
1:M 22 Apr 2019 21:12:00.445 # Server initialized
1:M 22 Apr 2019 21:12:00.445 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
1:M 22 Apr 2019 21:12:00.446 * DB loaded from disk: 0.001 seconds
1:M 22 Apr 2019 21:12:00.446 * Ready to accept connections
$


原因

8999のポートを公開していたが、8999をセキュリティグループで穴あけしていないことが原因でした。

以下のように修正。

redis:

image: redis
ports:
- 6379:6379
mem_limit: 268435456
app:
image: pokotyan/redis-express:latest
mem_limit: 268435456
working_dir: '/var/work'
ports:
- 80:8999 # 8999:8999から変更
links:
- redis
environment:
- PORT=8999
command:
sh -c 'npm i && node index.js'

80のポートなら ecs-cli compose up で作成されるセキュリティグループでデフォルトで穴あけされている。なので、フロント側では以下で接続できます。


import io from 'socket.io-client';

// const socket = io('http://54.178.145.131:8999'); // 修正前はこうなってた。
const socket = io('http://54.178.145.131'); // 修正後はポート番号80でアクセス

うまくいった作業ログ



$ ecs-cli up --keypair ecs1 --capability-iam --instance-type t2.micro
INFO[0000] Using recommended Amazon Linux 2 AMI with ECS Agent 1.28.0 and Docker version 18.06.1-ce
INFO[0001] Created cluster cluster=gomoku-narabe-cluster region=ap-northeast-1
INFO[0001] Waiting for your cluster resources to be created...
INFO[0002] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS
INFO[0062] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS
INFO[0123] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS
VPC created: vpc-0b43bf1e36fbc01b1
Security Group created: sg-080d991cce3df9220
Subnet created: subnet-04a85d1e7691360de
Subnet created: subnet-06fab8574826ab488
Cluster creation succeeded.
$
$ ecs-cli compose up
WARN[0000] Skipping unsupported YAML option for service... option name=networks service name=app
WARN[0000] Skipping unsupported YAML option for service... option name=networks service name=redis
INFO[0000] Using ECS task definition TaskDefinition="kurohige-server:7"
INFO[0001] Starting container... container=635174f8-b35c-453a-a157-ba0adb565209/app
INFO[0001] Starting container... container=635174f8-b35c-453a-a157-ba0adb565209/redis
INFO[0001] Describe ECS container status container=635174f8-b35c-453a-a157-ba0adb565209/app desiredStatus=RUNNING lastStatus=PENDING taskDefinition="kurohige-server:7"
INFO[0001] Describe ECS container status container=635174f8-b35c-453a-a157-ba0adb565209/redis desiredStatus=RUNNING lastStatus=PENDING taskDefinition="kurohige-server:7"
INFO[0013] Describe ECS container status container=635174f8-b35c-453a-a157-ba0adb565209/app desiredStatus=RUNNING lastStatus=PENDING taskDefinition="kurohige-server:7"
INFO[0013] Describe ECS container status container=635174f8-b35c-453a-a157-ba0adb565209/redis desiredStatus=RUNNING lastStatus=PENDING taskDefinition="kurohige-server:7"
INFO[0019] Started container... container=635174f8-b35c-453a-a157-ba0adb565209/app desiredStatus=RUNNING lastStatus=RUNNING taskDefinition="kurohige-server:7"
INFO[0019] Started container... container=635174f8-b35c-453a-a157-ba0adb565209/redis desiredStatus=RUNNING lastStatus=RUNNING taskDefinition="kurohige-server:7"
$ecs-cli ps
Name State Ports TaskDefinition Health
635174f8-b35c-453a-a157-ba0adb565209/app RUNNING 54.95.78.71:80->8999/tcp kurohige-server:7 UNKNOWN
635174f8-b35c-453a-a157-ba0adb565209/redis RUNNING 54.95.78.71:6379->6379/tcp kurohige-server:7 UNKNOWN
$
$
$
$ curl http://54.95.78.71:80/status
OK
$


フロントのデプロイ

ここまでの手順で、ローカルのSSRからECSで立てたEC2のIPに直接接続すれば五目並べが動く状態にはなります。

しかし、ローカルだけで動くアプリケーションではなんとも寂しいですよね。これをwebに公開するためには、フロントの環境のデプロイをしておく必要があります。

SSR環境のデプロイにはnowを使うことにしました。フロントはnextを使って構築しました。nextをnowを使ってデプロイする時にはまったところは別記事を書いています。

https://qiita.com/pokotyan/items/283a4ff1ba195585ba2a

これでフロント環境のデプロイ環境は整いました。


サーバーのhttps化

nowでデプロイしたSSRのサーバーは自動でhttps化がされています。なので、サーバー側もhttpsにしていないと Mixed Content のエラーが出てフロントからサーバーに接続できません。

Mixed Content: The page at '<URL>' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint '<URL>'. This request has been blocked; the content must be served over HTTPS.

スクリーンショット 2019-05-02 16.34.02.png

なので、サーバー側もhttpsにしていきます。

流れとしては

alb作成 => ドメイン購入、DNS設定 => 証明書の作成 => albに証明書を設定

みたいな感じです。


albのヘルスチェック用のapiを作る

albを作成する前にalbのヘルスチェックを通すための簡易的なapiを作っておきます。

/status でアクセスしたら200 OKを返すようなAPIを用意しました。


albを作成する

リスナーは一旦、httpのみで作成します。(あとでhttpsのリスナーを追加する)

スクリーンショット 2019-05-18 21.30.46.png

vpcを選択する際には、 ecs で作成したec2が存在するvpcを選びます。

ecs-cli up を実行した際のログをよく見ると以下のようにVPCを作成している

VPC created: vpc-0b43bf1e36fbc01b1

スクリーンショット 2019-05-18 21.31.21.png

セキュリティグループはecsで作成したやつを選びます。

ecs-cli up を実行した際のログをよく見ると以下のようにセキュリティグループを作成している

Security Group created: sg-080d991cce3df9220

スクリーンショット 2019-05-18 21.31.48.png

ターゲットグループを作成します。

ヘルスチェックのurlは事前に作っておいた /status を指定します。

スクリーンショット 2019-05-18 21.32.12.png

ターゲットグループにecsが自動で作成したec2を追加します。

スクリーンショット 2019-05-18 21.33.43.png

ALBを作成し終えたら、ターゲットグループにec2がひもづいてstatusが healthy になるのを待ちます。

スクリーンショット 2019-05-18 21.37.00.png

ここまでの手順でフロント側からsocketサーバーにALBのurlで接続できるようになります。

import io from 'socket.io-client';

const socket = io(
'http://gomoku-narabe-lb-1337428841.ap-northeast-1.elb.amazonaws.com'
);


ドメインを取得、DNSの設定する。

お名前.comから適当なドメインを購入。(gomoku.xyzを購入しました)

また、本筋からそれますが、お名前.comでドメインを購入すると、自動更新設定がONになっているのでOFFにしておきましょう。

DNSの設定は以下を参考にやりました。

https://qiita.com/sadayuki-matsuno/items/4c371ba984d9b22b3737#3%E3%81%8A%E5%90%8D%E5%89%8Dcom%E3%81%AE%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AB%E7%9B%B4%E6%8E%A5aws%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AEfqdn%E3%82%92cname%E3%81%A7%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B

お名前.comのDNS設定のところで CNAMEレコード を追加。 VALUE にはALBのurlを入れます。

スクリーンショット 2019-05-19 0.57.52.png

しばらく(30分以上くらい)待つと設定が反映されます。



$ dig CNAME www.gomoku.xyz

; <<>> DiG 9.10.6 <<>> CNAME www.gomoku.xyz
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57860
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.gomoku.xyz. IN CNAME

;; ANSWER SECTION:
www.gomoku.xyz. 3570 IN CNAME gomoku-narabe-lb-1337428841.ap-northeast-1.elb.amazonaws.com.

;; Query time: 36 msec
;; SERVER: 103.246.80.40#53(103.246.80.40)
;; WHEN: Sun May 19 01:40:36 JST 2019
;; MSG SIZE rcvd: 117

$

これで http://www.gomoku.xyz/status にアクセスするとOKがちゃんと返ってきます。

$ curl http://www.gomoku.xyz/status

OK


証明書の発行

ドメインの準備はできたので、証明書の発行を行います。

手順は以下を参考にしました。

https://qiita.com/at-946/items/1e8acea19cc0b9f31b98#5-1-acm%E3%81%A7ssl%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%82%92%E7%99%BA%E8%A1%8C%E3%81%99%E3%82%8B

AWSの Certificate Manager からパブリック証明書のリクエストを行います。

ドメイン名はお名前.comで設定した値を入れます。

スクリーンショット 2019-05-19 1.45.00.png

AWSによるドメインの検証はDNSを使うようにします。すると この CNAMEレコード をDNSサーバーに設定してくれ!という画面になるので、お名前.com上で設定します。

このCNAMEレコードを、

スクリーンショット_2019-05-19_1_49_07.png

お名前.comのDNS設定で追加します。

スクリーンショット_2019-05-19_1_54_54.png

しばらく待つと証明書が発行されます。

スクリーンショット 2019-05-19 2.30.19.png


証明書をALBに設定する

前の手順で作成したALBにHTTPSのリスナーを追加します。

デフォルトアクションを追加し、転送先にALB作成時に作成したターゲットグループを指定します。

スクリーンショット 2019-05-19 2.35.49.png

証明書は作成したものを指定します。

スクリーンショット 2019-05-19 2.36.02.png

これで、ALBにHTTPSのリスナーが追加されました。

スクリーンショット 2019-05-19 2.49.00.png

$ curl https://www.gomoku.xyz/status

OK
$

これでフロントからは以下のようにしてサーバーへ接続できます。

import io from 'socket.io-client';

const socket = io('https://www.gomoku.xyz');

これで、晴れてフロント、サーバー共にhttpsにできたので、web上にアプリケーションを公開できる状態になりました。


ecsのサービスを作成する

あとで書く


参考

https://dev.classmethod.jp/cloud/aws/using-ecs-cl/

https://anorlondo448.hatenablog.com/entry/2018/02/27/022103

https://hawksnowlog.blogspot.com/2017/01/startup-multiple-containers-with-ecs-cli.html

https://qiita.com/KoichiSugimoto/items/474580938548c4d18e4e

https://qiita.com/toshihirock/items/824a86da51015350a051

https://qiita.com/uchihara/items/8647c94f7af607a9a236

https://sil.hatenablog.com/entry/rails-ecs-cli-deploy