LoginSignup
1
1

More than 3 years have passed since last update.

EC2についてまとめる(EC2内の設定のみ)

Posted at

1.1. やろうとしていること

EC2ではlambdaからきたpostを受取り、推論サーバーに渡して推論を行った後結果を返す。

EC2内の動きで必要になるポイントは、
1. サーバーを立ち上げた後自動的にアプリケーションが実行されてほしい
2. 簡単に環境を整えたい

の2つである。これに対して私は、
1. Systemdを用いてサーバ起動時の動作を設定する。
2. Dockerを用いて環境を設定する。

1.2. サービスの説明

1. Systemdについて[1]

Systemd : Linuxの起動処理やシステム管理を行う仕組み

Systemdファイルの基本構成要素は Unit, Service, Install の3つ。
Unit, Install にユニットファイルの共通的な設定内容を書き、Service で自ユニットファイルの実行内容の設定を行う。

ファイルの書き方について

Unit
  • Description : ユニットの説明を書く
  • After/Before : 指定したユニットの実行順番の依存関係を設定
  • Requires/Wants : ユニットの依存関係の定義
    2つのコマンドの違いは、依存関係のユニットが失敗したときの処理
    • Wantsの場合、依存ユニットが失敗したときでも自ユニットは失敗にならない。
Service
  • Type : 5種類存在する。デフォルトはsimple
    • simple
    • forking
    • oneshot
    • notify
    • dbus
  • ExecStart : 実行するコマンドラインを書く
Install
  • WantedBy/RequiredBy : ”systemctl enable ~~" でユニットをenableしたときに、.wants, .requires にシンボリックリンクを作る。 動作としては"Wants=", "Requires="と同じような感じになる。

2. Dockerについて

Docker : Linuxのコンテナ機能を使ったアプリケーションの実行環境を構築/運用するためのプラットフォーム[2]

今回は、pythonをベースに
1. WebフレームワークであるBottleでpostに対するレスポンスを設定した。
2. DLフレームワークであるchainerで推論部分の動作を作成した。

そしてこれをdockerにいれて動作するような環境を作成した。

1.3. サービスの設定方法

1. Systemd

コード
dl_app.service
[Unit]
Description=start_dl_app
Requires=docker.service
After=docker.service

[Service]
Type=simple
ExecStartPre=-/usr/bin/docker container rm dl_app
ExecStart=-/usr/bin/docker container run -i -v /home/ec2-user/document/server:/myvol -p 8080:8080 --name dl_app dl_app
[Install]
WantedBy=multi-user.target
  1. Systemdファイル作成
  2. /etc/systemd/system/の下にファイルを置く
  3. SystemdファイルがServiceとして認識されたか確認する systemctl list-unit-files --type=serviceの出力に現れれば正しく認識されているということ。
  4. enableして起動する systemctl enable ~~で認識され、systemctl start ~~で起動。

2. Docker

コード
Dockerfile
FROM python:3

RUN pip install bottle chainer matplotlib pillow

WORKDIR /myvol
CMD python index.py

dockerコンテナ内に入り、コマンドを入力
+ docker image build -t dl_app ./ Dockerfile
+ docker container run -it -p 8080:8080 -v [マウントするパス]:./myvol --name dl_app dl_app

(注意)EC2サーバーの設定[3][4]

まず、dockerをinstallする必要あり
また、各ファイルをEC2内に入れるためにS3とマウントする。
最後にマウントしてあるディレクトリから推論サーバー作成に必要なファイルを移して終了

参考サイト

[1] systemdの*.serviceファイルの書き方
[2] いまさらDockerに入門したので分かりやすくまとめます
[3]EC2インスタンスにS3をマウントする
[4]s3fs を使って EC2 に S3 の Bucket をマウントする

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1