ecsにおけるunicronのgraceful shutdown

コンテナのライフサイクル

タスクが停止すると、各コンテナのエントリプロセス (通常は PID 1) に SIGTERM シグナルを送信します。
タイムアウトが経過すると、今度は SIGKILL シグナルをプロセスに送信します。
デフォルトでは、SIGTERM シグナルの送信後 30 秒のタイムアウトで SIGKILL シグナルを送信します。

ECS のアプリケーションを正常にシャットダウンする方法 | Amazon Web Services ブログ

SIGKILLされるまでの時間はデフォルトで30秒でMAXで120秒のようだ。
そんな重い処理はないので今回は考える必要はないがSidekiqやResqueなどでそれなりに重い非同期処理をしたい場合は何か必要。
バッチ化するとかキューを積み直すとか???

 

unicornの挙動

unicornにSIGTERMを送った場合は即シャットダウンでgraceful shutdownしたい場合はSIGQUITを送る必要がありそう

Signal handling

 

unicornでSIGTERMを受け取ったらSIGQUITする処理を実装する

unicorn.config

before_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
    Process.kill 'QUIT', Process.pid
  end
end

after_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn worker intercepting TERM and doing nothing.'
  end
end

 

実際にgraceful shutdownするか確認

1. sleepを入れたapiを作成する

class TestController < ActionController::API
  def test
    sleep(10)
    render text: 'OK'
  end
end

2. apiをコールしてsleep中にunicornにsigtermを送る

root@06b4da6d0c07:/app# ps aux | grep unicorn
root         1  0.4  1.2  90216 24964 pts/0    Ss+  11:03   0:00 unicorn master -p 3100 -c /app/config/unicorn/development.rb
root         8  2.0  5.3 661524 109292 pts/0   Sl+  11:03   0:02 unicorn worker[0] -p 3100 -c /app/config/unicorn/development.rb
root         9  2.0  5.3 661524 109168 pts/0   Sl+  11:03   0:02 unicorn worker[1] -p 3100 -c /app/config/unicorn/development.rb
root        10  2.0  5.3 661536 109280 pts/0   Sl+  11:03   0:02 unicorn worker[2] -p 3100 -c /app/config/unicorn/development.rb
root        11  2.0  5.3 661520 109176 pts/0   Sl+  11:03   0:02 unicorn worker[3] -p 3100 -c /app/config/unicorn/development.rb
root        12  2.0  5.3 661540 109188 pts/0   Sl+  11:03   0:02 unicorn worker[4] -p 3100 -c /app/config/unicorn/development.rb
root        13  2.0  5.3 661528 109280 pts/0   Sl+  11:03   0:02 unicorn worker[5] -p 3100 -c /app/config/unicorn/development.rb
root        14  2.0  5.3 661548 109200 pts/0   Sl+  11:03   0:02 unicorn worker[6] -p 3100 -c /app/config/unicorn/development.rb
root        15  2.0  5.3 661544 109188 pts/0   Sl+  11:03   0:02 unicorn worker[7] -p 3100 -c /app/config/unicorn/development.rb
root       128  0.0  0.0   4840   856 pts/1    S+   11:05   0:00 grep unicorn
root@06b4da6d0c07:/app# kill -TERM 1

3. OKレスポンスが返ってくることとlogが出ていることを確認する

unicorn.stdout.log

Unicorn worker intercepting TERM and doing nothing.
Unicorn master intercepting TERM and sending myself QUIT instead

お金をかけないでwebサイトを作ってみた

1.何をつくったか

webで使えるタスク管理ツール。

本当に忙しいときはやるべきタスクが全然終わらずにあっという間に一日が過ぎてしまう。

本当はタスクが溢れたら、誰かに任せるなり、期日を調整するなり、上司に相談するなり。。。遅れそうになった時点で様々な対策をする必要がある。

頭では分かっているが、気づけばお昼ご飯を食べるのも忘れて夜になるなんてことも結構ある(ToT)

そのため、1時間ごとに予実を管理できる且つ1時間ごとにアラートで知らせてくれるものを作りたいと思った。そうすれば早めに遅延に気づいて様々な対策ができると考え下記のサービスを作った。

epic-elion-4c311e.netlify.com

2.使った技術

特にNetlifyは助けられました。ドメイン代もサーバー代もかからずに無料でサイトを簡単に公開できました。サイト登録から公開まで15分くらいでできました。

githubと連携しているのでmasterにpushしたら自動でデプロイして公開してくれます。

3.苦労したところ

デザイン

Bootstrapがあったからまだよかった。それでもかっこよく使いやすくつくるのは難しい。webデザインしてる人を見る目が変わった。

同じようなTODO管理ツールやWEBサイトをみてとりあえずまねした。

ランディングページの作成

New Ageっていうサイトのランディングページの無料テンプレートをベースに作成しました。最初はテンプレートを使うという発想がなかったため自力で作ろうとしてました。

startbootstrap.com

 

4.まとめ

 作成期間は1か月くらいでした。Netlifyのおかげでプログラムを書くことに集中することができました。サーバー周りはあまり強くないので本当に助かりました。

マネタイズは考えてないので次に何か作るときはそこまで考えて作ってみようかなと思いました。

AIジョブカレの機械学習講座に通ってみての感想

1.AIジョブカレとは

人工知能技術を専門としたプログラミングスクール。

私が通った機械学習講座以外にディープラーニング講座やR講座などがある。

 

AI技術専門スクールの人工知能講座一覧 | AI技術専門スクールのAIジョブカレ

 

2.AIジョブカレに行こうと思った理由と特徴

下記でも書いた通りに、流行りの機械学習をオフライン(通学)で学びたかったため。

値段は決め手ではなかったが、8回の講座で10万円と安いのもよかった。

 

機械学習のスクールの比較 - ibufukuのブログ

 

3.カリキュラム内容

f:id:ibufuku:20191103164155p:plain

 

人工知能専門の教育と仕事紹介のワンストップスクール | AIジョブカレ より引用

※2019年11月時点での内容です。

 

4.良かったところ

・講師の人がバリバリのデータサイエンティストをやっている方だったのでビジネス目線の話がたくさん聞けてためになった。

こういう生の声はネットで検索などでは得ずらいのでよかった

 

・安い。コスパはよかったと思う。

 

・講義を動画で見られる。

 毎回、講義を動画でとっているので業務都合で行けなくても、見られるし復習にも使えるので、よかった。

 

・卒業生のスラックコミュティに入れる

 AIジョブカレの告知情報もあるが勉強会の情報だったり新年会の誘いだったり有益な情報も流れてくる

5.悪かったところ

・グループワークをもっとやってほしかった

 グループワークは1回しかなかったので他の人の意見とか聞きたかった。

 講師の話を黙々と聞く形式だったので教室でわざわざ集まってやっているメリットをあまり生かせていなかった気がする

 

6.率直な感想

行ってよかった思います。やっぱり通いだったのでモチベーションが落ちることなく学び続けれたと思います。

そして、結構大変だった。私は学生時代は統計学を学び、社会人ではシステムエンジニアをやっていてある程度ベースはあったがついていくのでやっとでした。。。

ごりごりコーティングするというよりはコーティングもしつつ統計的な話もしつつビジネス目線の話もしつつという感じで浅く広く学べました。

AIジョブカレを出たからと言って即ビジネスで通用するレベルではないですが、スタートラインには立てた気がします。

機械学習のスクールの比較

1.機械学習を学びたいと思った理由

単純に流行ってるので、SEとして今後必要になってくると思ったのと、学生時代に統計学を少し学んだので興味があった。

2.機械学習をスクールで学ぼうと思った理由

機械学習の本読んだり動画をみたが難しすぎて独学だと挫折しそうだと思った。

SEをやってるので何か新しいプログラミングを学ぶくらいだったら勝手がわかっているのである程度は自力でできる。

しかし、機械学習統計学がからんできて理論を学ぶ必要があったため。きちんと学びたいと思った。

3.機械学習のスクールで何を重視したのか

下記の2点を重視して機械学習のスクールを探しました。

・集団での講義形式であること

周りに人がいると高いモチベーションで最後まで保って学習できると思った。

そして、どんな人が学びに来ているかに興味があり、ここで知り合いができたらいいなと思った。

 

・ある程度、機械学習の高いレベルのことが学べる

SEであるためある程度はプログラムは書ける。そして、学生時代は統計学を少し学んでいたため、基礎の基礎は不要だと思った。

 

4.機械学習が学べるスクールの比較

とりあえずネットで調べた限りは下記の6つに絞りました。

実際はまだまだあるんだろうけど候補が多すぎても調べきれないのでこのくらいにしました。

NO 名前 料金 期間 コース 調べて思ったこと
1

tech boost


月額
社会人
¥29,800
入学金
社会人
¥219,800
1ヶ月 Aiコース
Pythonとライブラリを用いて、
自然言語処理」「機械学習」「ディープランニング」 の基礎を演習を通じて学んでいきます。
教材が与えられそれを自分で解いていきながらカリキュラムを進めていき、わからない点や理解が追いつかない点をメンターに質問するという形式だとのこと。集団での受講形式ではないため却下
2

Aidemy

480,000円 3ヶ月 AIアプリ開発コース
画像認識を利用した機械学習を用いたWebサービスを作成するコースです。データの取得から、機械学習アルゴリズム、Webアプリの実装までの流れを学ぶことができます。
オンラインで基本的にはコースを選択して受け放題のようだ。
自分が学びたいものを選択して学べるのはいいと思った。しかし、オンラインなので却下。
3 Tech Academy 139,000 1ヶ月 AIコース
機械学習のライブラリを使って実装を行います。
実務に近い形で学習し、社会でも通用するスキルが身につきます。
回数無制限の課題レビューしてくれるよう。
できるまでみてくれるので、課題が難しいと思っても最後まで完結できそう。しかしオンラインのため却下
4 侍エンジニア塾 980,000円 6ヶ月 AIコース
Pythonの基礎学習
チャットボットやスマートスピーカーなどを土台にAIを実装
機械学習 / 深層学習 / 自然言語処理 / 画像 / 動画解析 / ブロックチェーン / データサイエンスなどの基礎学習とAIを基盤としたオリジナルサービス開発
完全オーダーメイドカリキュラムで自分のスキルに合わせてカリキュラムを決めてくれてるとのこと。
授業形式は専属マンツーマン指導(対面またはオンライン)。マンツーマンなので却下。
5 .Pro 432,000円 6ヶ月 Pythonコース
人工知能機械学習を学ぶ、プログラミング特化コース

プログラミングによる数値演算や機械学習を学び、プログラマーとしてさらなる飛躍を目指します。Pythonは「youtube」「Instagram」の開発にも用いられているほど、世界的に人気のあるプログラミング言語です。日本だけにとどまらず、グローバルに活躍する人材を目指します。
少人数のグループ制で講義を行うっぽいので探していた形式。しかし、情報が少ない。何が学べるかがホームページを見てもわからなかったので却下。
6 AIジョブカレ  100,000円 4ヶ月 機械学習講座
AIジョブカレ機械学習講座を修了すると、AI(人工知能)を実務で活用できるようになります。
具体的には、データの前処理、計算ロジックやモデルの設定、Pythonライブラリを使った人工知能の実装・評価、チューニングまでを一人でできるようになります。

集団の授業形式でコース名が機械学習講座となっているところから分かるように、機械学習に特化して学べそう。

 

6.結論(どこの機械学習スクールにしたのか)

色々調べた結果「AIジョブカレ」さんにしました。

そもそも集団形式講義のスクールがない。確かによくよく考えたら、集まってみんなで受ける形式はビジネスモデル的にも難しいのかも。オンライだと全国の人相手に商売できるしね....ということでオンライ講義のスクールが多い中、オフライン講義をやってる、「AIジョブカレ」さんにしました。「.Pro」さんもオフライン講義やってたけど、情報がなさ過ぎて今回は見送りました。

「AIジョブカレ」さんに通ってみての感想は近々書きます。

機械学習入門

機械学習とは

明示的にプログラムを書くのではなく膨大なデータよりコンピューター自身で学習させる技術である。

機械学習は「教師あり学習」、「教師なし学習」、「強化学習」の3つに分類される。

教師あり学習

結果と原因の関係性を学習するもの。

あらかじめに決められた正解ラベルに従って学習していくもの

分類と回帰がある

分類(Classification)

あるなしなどの分類を行う。

例:解約する会員予測など

回帰(Regression)

数値の予測

例:物件の価格予測じなど

 

教師なし学習

膨大のデータから規則性を見つけ出しデータのパターン化を行う

 

例:購買情報からユーザーをグルーピングする

 

強化学習

プログラム自身で与えられた報酬を最大化するように学習していく

 

例:AlphaGO(囲碁プログラム)

はてなブログで使う便利なショートカットキー一覧

はてなブログを書くときに使えるショートカットキーの一覧

  • 大見出し

    shift + alt + 3

  • 中見出し

    shift + alt + 4

  • 小見出し

    shift + alt + 5
  • アンダーバー
    ctrl + u

  • 太字
    ctrl + b

基本的なSQL文

下記の記事書いているときに少し怪しかったのでここに改めてメモしとく。

特にINSERTとUPDATEが怪しかった....

 

ibufuku.hatenablog.com

 

データ抽出

どこのテーブルから何の情報(条件)を参照するか。
下記の例でいくとuserテーブルからidが1の情報を参照する。
「*」は全てのカラム情報を参照するという意味。
nameの情報だけほしい場合は「*」のところを「name」に変える。
nameとageの情報が欲しい場合はカンマ区切りで「name,age」にする。

実行SQL
SELECT * FROM user WHERE id = 1;

 

データ登録

どのテーブルに何の情報(登録する値)を登録するか。
下記の例でいくとuserテーブルにid(1)とname(hoge)とage(12)を登録する。
(id,name,age)の部分は省略可。

実行SQL
INSERT INTO user(id,name,age) VALUES(1,'hoge',12);

 

データ更新

どのテーブルに何の情報(登録する値)を更新するか。
下記の例でいくとuserテーブルのidが1のname情報をtaroに上書きする。

実行SQL
UPDATE SET name='taro' WHERE id = 1;

 

データ削除

どのテーブルの何の情報(登録する値)を削除するか。
下記の例でいくとuserテーブルのidが1のレコードを削除する

DELETE FROM user WHERE id = 1;