Google cloud shell使ってみました
Google cloud shellって?
日本語だと下記のページで概要を掴めるかと思います。
Google Cloud Platform Japan 公式ブログ: Google Cloud Shell の無料期間が 2016 年末まで延長
使ってみました
特に設定の必要も無くGCPのコマンドが使えますし、普通にlinuxとしても使えてSSHで他のサーバにログインなんてことも出来ました。
cronも使えました
crontabで一分ごとにloglogというファイルに日付を出力してみました。 コンソールからログアウトしている時間帯もちゃんと動いていたようです。
$ cat loglog Wed Dec 23 09:23:01 UTC 2015 Wed Dec 23 09:24:01 UTC 2015 Wed Dec 23 09:25:01 UTC 2015 Wed Dec 23 09:26:01 UTC 2015 Wed Dec 23 09:27:01 UTC 2015 Wed Dec 23 09:28:01 UTC 2015 Wed Dec 23 09:29:01 UTC 2015 $ date Wed Dec 23 18:29:42 TLT 2015
あとがき
定期的にGCPのコマンドが実行できるので、バッチサーバでやっていた定期バックアップとかの処理をgoogle cloud shellにまかせるとサーバレス環境に一歩近づけそうですね。
local-ssdを積んだインスタンスのサイズ変更はできない
概要
local-ssdを積んだインスタンスのサイズ変更はできないので、気をつけましょう。
(local-ssdについては下記を見てもらうと雰囲気はつかめるかと思います。)
Google for Work Japan 公式ブログ: [GCP] Local SSD がどなたでも利用できるようになりました。
そもそもstop出来ない
local-ssdを積んだインスタンスはstopしてサイズ変更しようとしても、そもそも「stop」がグレーアウトして実行できません。
強引に起動しようとすると
マネージコンソールからはstop出来ないようになっていますが、実際にインスタンスにログインしてshutdownすることは可能です。しかし、起動しようとすると下記のようなエラーが発生します。
どうやら一度落とすと再度立ち上げることはできないようです。
まとめ
爆速で有名なGCPのlocal-ssdですが、local-ssdを積んだインスタンスはサイズ変更ができなくなるので使いどころを考えて利用しましょう。
あとがき
ちなみにどうしてもインスタンスサイズを変更したければ、
という手も考えられますが、面倒ですね。
GCPでサブネットが使えるようになった。
概要
AWSでは「VPC内でサブネットを切ってAPPのネットワークとDBのネットワークを分ける」みたいなことができますが、GCPでは出来ませんでした。が、いつの間にかGCPでもサブネットを切ることが出来るようになったようです。
GCPのnetworks
- 新規作成時だけでなく、後からメンテナンスも出来るようです。
ただし、昔作ったネットワークは置いてけぼり。
- しかし、以前に作ったネットワークを見てみると・・「add subnetworks」が無い・・・。既存ネットワークをサブネットで切れないのは既にネットワークに散らばったインスタンスのIPをどうするか?が難しいからでしょうかね。
あとがき
引き続き、昔作ったネットワークでもサブネットが使えるようになるのを期待したいところです。
GCEのインスタンスサイズを変更する
概要
EC2だとインスタンス停止後、change instance sizeで一発ですが、gceでは下記の手順を踏んでインスタンスサイズの変更を実施します。 流れは下記の通りです。ここではmanageというインスタンスのサイズを変更してみます。
- サイズを変更したいインスタンスのsnapshotを取る。
- サイズを変更したいインスタンスを削除する。
- サイズを変更したいインスタンスと同じ名前のインスタンスを先ほどのsnapshotから作成(この時、希望のサイズに変更する)
snapshot取得
Snapshotsの「Create a new snapshot」でコピー元のOSが入ったディスクをSource diskに指定してsnapshotを取得。
インスタンスを削除する
Deleteする前に下記のデータを必ず忘れずに書き留めておくこと。
- インスタンス名
- Tags
- Zone
- Network
- Permissions
インスタンス再構築
Nameにサイズ変更したいインスタンス名を入れ、Boot diskは「Create a new disk」で先ほど作ったsnapshotをSource snapshotに指定して新規Diskを作成。zoneも忘れずに。
「Management, disk, networking, access & security options」をクリックして先ほどメモった内容を入力します。
tags
network
permissions
最後に「create」をクリックして完成です。
あとがき
「インスタンスサイズを変更する」、というより「同じ名前でインスタンスを再構築する」と言った方が相応しいような気がしますね(汗)
さらにあとがき(2015/12/21)
と思ったら、インスタンスを[stop]して[edit]したら下記のようにインスタンスサイズを変更できるようになっていました(汗)
slackにslow query数を出してみた
概要
注意しなきゃいけ無いんだけど、気が付いたらslow queryがいっぱい出ていた・・・・。なんて事を回避するために、とりあえず毎日slackにslow query数を出すようにしてみました。
Webhook URL
slackにslow query数を投げるためのWebhook URLを取得します。詳しくは下記を参照してください。 Slack
スクリプト
前日分のslow logから件数を数えてslack(上記で取得したWebhook URL)に投げています。
#!/bin/bash date=`date '+%Y-%m-%d'` server_name=`hostname` url="https://hooks.slack.com/services/zzzzzzz/xxxxxx/123456789aaa?parse=full" num=`/bin/gzip -dc /var/log/mysql/mysql-slow.log.1.gz|grep Query_time|wc -l` message="($date) $server_name のslow-query数は$num です。" payload="payload={\"text\": \"${message}\", \"username\": \"tabby\", \"icon_emoji\": \":tabby6:\"}" curl --data "${payload}" ${url}
実行
各DBサーバ上のcronで毎朝9:10に定期実行させます。
10 0 * * * /root/work/slack.sh
DBバックアップスクリプト(GCP版)
概要
もしもの時のためにmaster-dbのデータバックアップを行っています。
バックアップスクリプト
#!/bin/sh date=`date '+%Y%m%d%H'` DESCRIPTION="db-backup-$date" gcloud compute -q --project "naked.co.jp:api-project-123456789" disks snapshot "master-db-disk" --zone "us-central1-a" --snapshot-names "$DESCRIPTION"
古いバックアップを消す
#!/bin/bash date=`date --date="3 day ago" +%Y%m%d%H` DESCRIPTION="db-backup-$date" gcloud compute -q --project "kiheitai.co.jp:api-project-784973659234" snapshots delete "$DESCRIPTION"
実行
両スクリプトとも毎時cronで実行しています。
rbenvでrubyのバージョン管理をする。
sudo update-alternatives --config editor sudo visudo -f /etc/sudoers.d/00_base
下記を追記
Defaults !secure_path Defaults env_keep += "PATH RBENV_ROOT"
環境変数設定
export RBENV_ROOT=/usr/local/rbenv export PATH=${RBENV_ROOT}/bin:${PATH}
rbenv本体インストール
sudo git clone git://github.com/sstephenson/rbenv.git ${RBENV_ROOT} sudo git clone git://github.com/sstephenson/ruby-build.git ${RBENV_ROOT}/plugins/ruby-build sudo rbenv init -
シェル設定
bash -c 'cat <<\__EOT__ >> ~/.profile export RBENV_ROOT="/usr/local/rbenv" export PATH="${RBENV_ROOT}/bin:${PATH}" eval "$(rbenv init -)" __EOT__'
シェル設定反映
exec ${SHELL} -l
いったんログアウト、再ログイン
rbenv install -l sudo rbenv install 2.1.3 sudo rbenv global 2.1.3 sudo rbenv exec gem install bundler cd /var/www/taptrip2/current
2.1.3
Gemとかインストール&バージョン変更反映
rbenv exec bundle install sudo rbenv rehash