東京生まれHOUSE MUSIC育ち

悪そうな奴はだいたい友達なの?

自宅Wifiが切れやすい。もしものため、AWSのEC2でサーバを作った


スポンサードリンク

f:id:padobure:20211231195905j:plain

Photo by Markus Spiske on Unsplash

この記事は?

久しぶりにEC2でサーバを構築しました。この記事は構築時のメモです。

背景

NHKのラジオを録音したくて、急遽自宅の録画サーバに環境を作りました。

nomusicnolife.hatenablog.com

ただ、自宅はWifiが不安定で途中で通信が切れてしまう可能性があります。そこで、AWSを利用して環境を作りました。

ECSは稼働時間が長いと高額になると考えたため、EC2で構築しました。

構築手順

以下のような手順で構築しました。と、あっさり書いてますが、うまくログインできなかったりしたので、EC2インスタンスを作って、壊してを3回ぐらい繰り返しました。

sshでログインする前まで

課金されるからVPCとか諸々を消していたんですよねー。sshできるまでググりまくりました。

  • VPC作成(10.0.0.0/16)
  • サブネット作成(10.0.0.0/24)
  • インターネットGWを作成
  • ルートテーブルを作成、(0.0.0.0をインターネットに向ける)
  • Amazon LinuxでEC2インスタンスを作成。自分で作ったVPC,サブネットを割り当てる
  • キーペアを使ってログインする(ssh -i ~/Downloads/xxxxxx.pem ec2-user@ip address)

Linuxのバージョン

$ cat /etc/os-release
NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"

パッケージ設定

各パッケージのインストール

まずは、パッケージのアップデート。

$ sudo yum update -y

必要なdockerとgitをインストール

$ sudo yum install -y docker
$ sudo yum install -y git

Dockerの設定

dockerのバージョン確認

$ docker version
Client:
 Version:           20.10.7
 API version:       1.41
 Go version:        go1.15.14
 Git commit:        f0df350
 Built:             Wed Nov 17 03:05:36 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

dockerのサービス設定

yumでインストールした直後はdockerが動いていない。

$ sudo service docker status
Redirecting to /bin/systemctl status docker.service
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: https://docs.docker.com

dockerのサービスを起動する。

$ sudo service docker start
Redirecting to /bin/systemctl start docker.service

dockerの状態を確認する。以下のように動いている。

$ sudo service docker status
Redirecting to /bin/systemctl status docker.service
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2021-12-31 05:52:46 UTC; 1s ago
     Docs: https://docs.docker.com
  Process: 6697 ExecStartPre=/usr/libexec/docker/docker-setup-runtimes.sh (code=exited, status=0/SUCCESS)
  Process: 6696 ExecStartPre=/bin/mkdir -p /run/docker (code=exited, status=0/SUCCESS)
 Main PID: 6700 (dockerd)
    Tasks: 7
   Memory: 37.6M
   CGroup: /system.slice/docker.service
           └─6700 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.s...

OS起動時にもdockerデーモンを起動する設定

以下のコマンドでOS起動時にdockerが起動するようにする。上のコマンドもsystemctlを使うのが正しかったのかも。。。

sudo systemctl enable docker

今のユーザでdockerをsudo無しで使用できるように

これをやらないと、dockerコマンドの使用でsudoが必要になる。sudoを省略するために、dockerというユーザグループにログインしているユーザを追加する。

ユーザグループdockerに今のユーザを登録する。

$ sudo gpasswd -a $USER docker
Adding user ec2-user to group docker

dockerの再起動

$ sudo systemctl restart docker

このままだと登録が有効になっていないようなので、exitして再ログインする。

時効設定

時刻がおかしいので(UST時刻になっている)、ちゃんとJSTに変更する。

時刻の確認

$ date
Fri Dec 31 06:02:26 UTC 2021

以下のようにchronyをインストールする。(chronyは念のため入れている。)

chronyインストール

sudo yum erase 'ntp*'
sudo yum install chrony
sudo service chronyd restart

タイムゾーンの変更

タイムゾーンの確認。以下のようにUTCが入っている。

$ strings /etc/localtime
TZif2
TZif2
UTC0

シンボリックリンクを作る。

$ sudo ln -sf  /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

シンボリックリンクの確認

ll /etc/localtime
lrwxrwxrwx 1 root root 30 Dec 31 15:06 /etc/localtime -> /usr/share/zoneinfo/Asia/Tokyo

タイムゾーンの確認。ちゃんとJSTになっている。

$ date
Fri Dec 31 19:38:39 JST 2021

作成したファイルをs3に置くための設定

作成した録音ファイルをs3に置くための設定。awsコマンドは何もしなくても使える。

AWS Access Key IDとAWS Secret Access KeyはブラウザのIAMから設定して、貼り付ける。

$ aws configure
AWS Access Key ID [None]: XXXXXXXXXXXXXX
AWS Secret Access Key [None]: xxxxxxxxx123456
Default region name [None]: ap-northeast-1
Default output format [None]: text

以前から作っていたs3ディレクトリにmp3ファイルを格納する。

aws s3 cp game_test_2021-12-31-15_20.mp3 s3://radio-transcribe

格納できたか確認する。

aws s3 ls s3://radio-transcribe

cronの設定

以下で設定。

# NHK-FM
00 11 * * * /home/ec2-user/docker_rec_radiko/radiko_docker_run.sh JOAK-FM 900 /home/ec2-user/docker_rec_radiko/ game
00 * * * * /home/ec2-user/docker_rec_radiko/radiko_docker_run.sh JOAK-FM 10 /home/ec2-user/docker_rec_radiko/ game_test