AWS ECS を使って
batchを動かそう!
株式会社NOVASTO 近藤大翔
まず自己紹介
• 大阪大学基礎工学部三回生
• 株式会社NOVASTOにjoin
• 本が好き
ある日言われたこと
『外部のAPIからデーター取ってきて。定期的に実行
したいからバッチで、サーバーはawsでドッカーでコ
ンテナ立ち上げよう。最近awsがシーエルアイでイー
シーエス設定できるようになったからそれも使ってみ
て。』
単語の意味がわからない
• バッチ
• ドッカー
• イーシーエス
勝手に動くやつ
仮想環境?
意味不明単語
今日のゴール
1. 呪文を言われた時の自分(参加者)が理解できる
ように説明する
2. batch実行方法
今日のゴール
1. 呪文を言われた時の自分(参加者)が理解できる
ように説明する
2. batch実行方法
呪文の解説
1. Batch
2. Docker
3. Ecs
Batch
大量のデータを一括で処理する
Batch
語源:batch - 1束、1群、1団
短時間で処理をしたいもの
(スループット)
すぐに実行したいもの
(応答性)
バッチ処理
オンライン処理
-Docker-
超軽い仮想コンテナ技術
-Docker-
メリット1 - 軽量
『Docker実戦活用ガイド」p7より
コンテナの仕組みにより、仮想マシンやゲストOSは存在しない
起動停止が非常に早い
-Docker-
メリット2 - アプリの再利用が容易
作成した環境をimageとしてパッケージ化可能
他者のimageもDockerHubから利用できる
-Docker-
メリット3 - 開発環境の更新に強い
(http://www.itmedia.co.jp/enterprise/articles/1701/23/news036.html)
Ecs(Elastic Container Service)
Docker を AWS上で超簡単に使うためのサービス
Ecs(Elastic Container Service)
オーケストレーション
コンテナをどう運用するか?
Ecs(Elastic Container Service)
コンテナ運用全般を任せる
(https://thinkit.co.jp/article/9701)
Ecs(Elastic Container Service)
オーケストレーションツールがあれば、、、
——全て設定通りに行ってくれる
1. プロビジョニング
2. 構成スクリプト
3. 監視
4. …
冒頭の依頼を翻訳
『スクレイピングして商品データ取ってきて。定期的に実行したいからバッ
チで、サーバーはawsでドッカーでコンテナ立ち上げよう。最近aws
イーシーエスで実行のがいいと思う。』
定期的にまとめてデータを処理、実行
コンテナを サーバーを意識せずに管理するサービス
シンプルな仮想環境
一つの仮想環境
今日のゴール
1. 呪文を言われた時の自分(参加者)が理解できる
ように説明する
2. batch実行方法
コンテナのライフサイクル
Docker Engine Docker Engine
コンテナ
Docker Engine
コンテナ
Docker Engine
コンテナ起動 コンテナ消去batch実行
Batch
全体のイメージ
(https://stackoverflow.com/questions/23735149/what-is-the-difference-between-a-docker-image-and-a-container)
全体のイメージ
Docker-Compose.yml
Batchfile(~~.rb)
DockerFile
imageの保存
Taskの起動
imageの提供
Ecsの実行方法
Dockerコンテナを作成
Docker-file
FROM ruby:2.5.1
RUN mkdir -p $APP_DIR
WORKDIR $APP_DIR
COPY src/Gemfile $APP_DIR
RUN gem install bundler & bundle install
RUN git clone git@github.com:novasto/~~~
WORKDIR /usr/share/batch/
RUN git checkout $branch
Dockerfileにコンテナ
に必要な情報を記載
Batchfileを
コンテナ内に入れる方法
Docker-file
FROM ruby:2.5.1
RUN mkdir -p $APP_DIR
WORKDIR $APP_DIR
COPY src/Gemfile $APP_DIR
RUN gem install bundler & bundle install
RUN git clone git@github.com:novasto/~~~
WORKDIR /usr/share/batch/
RUN git checkout $branch Git cloneでリポジトリから
batchプログラムをコンテナ内に
DockerHubへプッシュ
VERSION=1.0
MINOR_VERSION=1
# ローカルにコンテナイメージの作成
docker build -t novasto/leaves.batch:$VERSION.$MINOR_VERSION
# VERSIONにlatestタグ追加
docker tag novasto/leaves.batch:$VERSION.$MINOR_VERSION novasto/
leaves.batch:latest
# DockerHubにpush VERSION指定
docker push novasto/leaves.batch:$VERSION.$MINOR_VERSION
Docker-compose.ymlの作成
Docker-compose.yml
version: '3'
services:
ruby:
image: novasto/batch
container_name: scraping_batch
tty: true
command: ruby /usr/share/batch/app/batch/run.rb
env_file:
- ./ruby/app.env
DockerHubからプル
ECSで実行させるコマンドの設定
(batch開始)
タスクの登録
# ecs-cli compose --file docker-compose.yml --ecs-params ecs-params.yml
--project-name ruby create --launch-type EC2
# ecs-cli compose --file docker-compose.yml --ecs-params ecs-params.yml --project-name
ruby create --launch-type version: 1
task_definition:
ecs_network_mode: awsvpc
task_execution_role: secretsTaskExecutionRole3
task_size:
cpu_limit: 256
mem_limit: 512
services:
fluentd:
essential: true
- sg-0d7a8b34dd3cfee84
ecs-params
タスクの実行
ecs-cli compose --file ./$VERSION/docker-compose.yml --task-role-arn
secretsTaskExecutionRole3 --ecs-params ./$VERSION/ecs-params.yml --project-name ruby
start --launch-type EC2 -c leaves-batch
ecs-params
OK!!!
ecs-params
Cloud Watch
ecs-params
アプリをリアルタイムでモニタリング
Cloud Watchを用いて定期実行
ecs-params
月 日 時間
1 11 16 24
2 12 1 24
詰まったところ1
ecs-params
ECS 特有の単語が多い
• クラスター
• タスク
• タスク定義
詰まったところ2
ecs-params
ECSはAWSの知識が必要
• Subnet
• VPC
• SecurityGroup
• I AM Role
感想
ecs-params
• まだまだ機能の勉強が必要
• 勉強のコスパは良さそう(他でも使う知識)
• あまりコードがWebに転がっていない
• 他のソリューションと比べてどう優れているのかは不明
終わり

勉強会1