動かざることバグの如し

近づきたいよ 君の理想に

GAE(flexible environment)にflaskをデプロイする

まずはrequirements.txtを用意

Flask==0.12.2
gunicorn==19.7.1

gunicornはGAE上で使用するwsgiアプリケーション

実際のプログラムがないと始まらない。ってことでmain.py

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == '__main__':
    app.run(host='127.0.0.1', port=8080, debug=True)

そしてデプロイに必要なapp.yaml

runtime: python
env: flex
entrypoint: gunicorn -b :$PORT main:app

runtime_config:
  python_version: 3

manual_scaling:
  instances: 1
resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10

デプロイ

gcloud app deploy

pyenv環境でgcloudをインストールする

環境

  • Mac
  • Pyenv + anaconda3

gcloudがpython3に対応してない問題

pyenvをわざわざ使っている人の99%はデフォルトのPythonのバージョンは3.xだと思う(anaconda含め)

が、残念なことにgcloudコマンドはpython2.xにしか対応していない。結果、pyenvでpython3を指定していると、gcloudのインストールにはうまくいくかもしれないが、実行にコケる。

解決策

明示的にPythonのパスをしてあげる

まずpyenvでpython2をインストール

pyenv install 2.7.12

次に~/.bash_profileに以下を追記 ユーザー名は各々書き換えて

export CLOUDSDK_PYTHON=/Users/thr3a/.pyenv/versions/2.7.12/bin/python

でもってダウンロードしたinstall_google_cloud_sdk.bashを実行する

おk

バンドリを支えるインフラ構成

結構前になってしまうが、株式会社サムザップ主催のインフラ勉強会に参加した。

sumzaptechnight.connpass.com

そこで某神ゲーバンドリの生みの親こと、株式会社Craft Eggのインフラ担当者が発表していたのでメモ。

発表者 is 誰

山村英貴氏。親会社のサイバーエージェントからの移動?的な

株式会社Craft Egg 山村英貴(yamamura hideki)
京都大学工学部卒業。2013年サイバーエージェント新卒入社。 サーバーサイドエンジニアとして画像配信、広告配信、リアルタイム通信基盤、チャット基盤、アセットバンドル配信基盤などを担当、現在は「バンドリ! ガールズバンドパーティ!」でサーバーとインフラを担当。

サーバー構成

インフラは主にAWSで運用してる

  • ユーザーDBは16台構成
    • r3 2xlarge r3 8xlarge 16台
    • ユーザーIDの剰余でDBを分割
  • 現在over 8000 req/s

リリース前はDB1台で捌く予定だったらしく(やばすぎ)、負荷試験かけると1200req/sで一瞬でCPUが100%になる症状が発生していた

そこで、ユーザーに紐付かない情報は共通DBに残しつつ、ユーザーに紐づくデータは分割することで負荷を分散させた

その他のよもやま話

  • Aurora MySQLの互換性は問題なし
  • Aurora MySQLはレイテンシが安定している 読み書き両方
  • ただしテーブルスキャン速度は普通(テーブルを全文舐めるようなクエリは普通の速度
  • スナップショット機能、データ巻き戻し機能はとても便利

他に使ったサービス

  • Athena ログ解析に使用
  • CloudFront
  • Route53
  • S3
  • Kinesis Firehose

ここまで話してくださって本当にありがとうございました。

Ubuntu/CentOSでSassCをインストールする

SassCとは

sassのC++実装版

実行速度がめちゃくちゃ速い めちゃくちゃ速い

環境

  • Ubuntu 16.04
  • CentOS 6
  • ただしデフォルトのgccのバージョンが古いので新しくする必要があるので以下のURLを参考

thr3a.hatenablog.com

インストール方法

公式ドキュメントを参考にビルドしていく

適当なディレクトリで git clone

git clone https://github.com/sass/sassc.git

cdでそのディレクトリに行かずにそのまま実行

. sassc/script/bootstrap

ビルド jの値はCPUのコア数なのでお好みに(環境によってはgmakeかも知れない)

make -C sassc -j4

make後に./sassc/bin/sassc -hで正しくヘルプが表示されれば成功

make instrall これで/usr/local/binにインストールされる

PREFIX="/usr/local" make -C sassc install

確認

$ sassc --version
sassc: 3.4.8
libsass: 3.5.0
sass2scss: 1.1.1
sass: 3.5

やったー

CentOS6にRuby 2.5.0をインストールをしたい人生だった

結論

なんとかできる

ビルドできない問題

Ruby 2.5.0がリリースされて、早速ruby 2.5.0をインストールしようとしたが、

rbenv install 2.5.0

エラーになる。どうもビルドでコケるっぽい。

prelude.c: In function ‘prelude_eval’:
prelude.c:204: error: #pragma GCC diagnostic not allowed inside functions
prelude.c:205: error: #pragma GCC diagnostic not allowed inside functions
prelude.c:221: error: #pragma GCC diagnostic not allowed inside functions
トップレベル:
cc1: 警告: unrecognized command line option "-Wno-self-assign"
cc1: 警告: unrecognized command line option "-Wno-constant-logical-operand"
cc1: 警告: unrecognized command line option "-Wno-parentheses-equality"
cc1: 警告: unrecognized command line option "-Wno-tautological-compare"
make: *** [prelude.o] エラー 1

どうもCentOS6に入ってるgccのバージョンがとても古く、そのままではビルドできないとのこと。

Rubyのコアチームもすでにこの問題を認識している。

Bug #14234: Failed to build on CentOS 6.9 - Ruby trunk - Ruby Issue Tracking System

が、実際の対応はRuby 2.5.1以降のリリースになるらしい。そんなバカな。。。。

解決策

と嘆いていたが、どうも gccのバージョンを新しくすればCentOS6でもRuby2.5.0のインストールは成功するらしい。

以下の記事を参考にgccをアップデートする。

thr3a.hatenablog.com

$ ruby -v
ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-linux]

やったぜ

参考リンク