2016年9月7日水曜日

Rundeckをインストールして立ち上げる

http://rundeck.org/
高機能ジョブスケジューラの『Rundeck』を立ち上げるまでの記録です。
使い方は説明しません。
cronに飽きた。つらい。ジョブフローをうまく設定したい。もしくは、もっと高機能なことがしたい、といった欲求があるときに使われていようです。
ただ単に、時間通りバッチを動かしたい、ブラウザで操作できるGUIが欲しいときにはJenkinisで十分こと足りるとおもいます。なれている道具を使いましょう。
インストール環境は、CentOS 6です。

yumでJAVA OpenJDK 8と、Rundeckをインストール
# yum install java-1.8.0
# rpm -Uvh http://repo.rundeck.org/latest.rpm 
# yum install rundeck 
バージョンを確認
# java -version
openjdk version "1.8.0_101"
# yum list installed | grep rundeck
rundeck.noarch        2.6.9-1.21.GA     @rundeck-release-bintray
rundeck-config.noarch 2.6.9-1.21.GA     @rundeck-release-bintray
rundeck-repo.noarch   4-0               installed
Rundeckの設定ファイルを編集
ホスト名を設定。デフォルトではloaclhostとなる。
loaclhost -> myhost
# emacs /etc/rundeck/rundeck-config.properties
grails.serverURL=http://localhost:4440
->
grails.serverURL=http://myhost:4440
Rundeckのデーモンをスタート
# service rundeckd start
ログを確認
# tail -f /var/log/rundeck/rundeck.log /var/log/rundeck/service.log
しばらく待つと、アクセスできるようになります。
# curl -v 127.0.0.1:4440/user/login

ブラウザで開いてみましょう。
http://myhost:4440/
Username: admin
Password: admin
ログインできたら成功です。

参考資料

バックアップ

Backup and Recovery
http://rundeck.org/docs/administration/backup-and-recovery.html

データベース変更

デフォルトのデータベースだと、ジョブの数が多くなると負荷が上がるそうなので、MySQLを使ったりして解決できるそうです。

Setting up a RDB Datasource
http://rundeck.org/docs/administration/setting-up-an-rdb-datasource.html
Rundeckインストールと設定メモ - Qiita
http://qiita.com/nagase/items/70070d79454ac96aa5a5
Rundeck との闘争 - 日々是ウケ狙い
http://ndx.hatenablog.jp/entry/2016/02/12/225753

Slack連携

higanworks/rundeck-slack-incoming-webhook-plugin: A Rundeck Plugin for Slack Incoming-WebHook
https://github.com/higanworks/rundeck-slack-incoming-webhook-plugin
Rundeck Config・ジョブ通知・Mysql の設定編 - 僕とコードとブルーハワイ
http://equal-001.hatenablog.com/entry/2016/03/26/223000

その他

Rundeck - Google スライド
https://docs.google.com/presentation/d/1PKJ0iT-eS0oT4ILwJNvPkLFHWcqnRPsMY07kCb72tdk/edit#slide=id.p
cronからRundeckに移行するためのモチベーションが書かれています。

サーバが増えた時にインフラ担当者がやってきたこと - Qiita
http://qiita.com/hiracy/items/c8bfb69ff624d4b711e4
デプロイ集約サーバとしてRundeckを使っていて面白い。


Top image from http://rundeck.org/ by SimplifyOps

2016年9月6日火曜日

Google NEXT Tokyo 2016 メモと少しの感想

https://cloudplatformonline.com/NEXT2016-Tokyo.html
NEXT Tokyo 2016 - Google Cloud Platform カンファレンスに行ってきました。事例紹介を中心にみてきました。メモと若干の感想です。

♯キーノート

Room A
座席数600ほど。満員。

GCP リック・ハシューマン
・国内パートナーの紹介。
感想…少ない。20社ほど。
私見…国外サーバはレイテンシ高すぎて、エンドユーザーから繋いでもらうには遠すぎる。広告配信サーバや、低レイテンシが必要なAPIサーバとしては、遅すぎて使えない。今のところ計算用途でしか使えない。
・Q4で東京リージョンをローンチ。準備中。ハードはすでに持ってきた。

GCP コーネリアス・ウィルス
・目新しい情報なし。
・コストなどの話。
感想…AWS引き合いに出すのはダサい。

GCP マイルズ・ワード
・データセンターの話。ちゃんとやってます。と言う話。
・リージョン間のネットワークは専用線。
・Stackdriver(監視ツール)使ってね。
感想…AWS disダサい。とはいっても、観測しちゃった値だから、しようがないですね。。
・Datalabの話。データ分析のやり方の提案。

サイバーエージェント 長瀬
・AbemaTVでGCPを使っている。東京リュージョンに期待とのこと。
感想…リージョンの移行が大変そう。

GCP ナカイ
・Kubernetesの話。デプロイ簡単、複数リージョンでもうまくコントロールできるから使ってね。

リクルート 前田
・データ分析でGCPを使っている。とくにBigQuery。

GCP 塩入
・フレッシャーズ・サービス開始アナウンス。コンサルティング、サポートのようなもの。

♯データ&分析(Google の機械学習技術で実現する「賢い」アプリケーション)

Room A
座席数600ほど。8割くらいの入り。

Google 井上
・機械学習のチューニング、あらかじめうまくいくようにできてますよ。というお話。
・機械学習の事例紹介。クレジットカードの不正利用を検知。

オモロキ 鎌田
・Vision API 画像認識の事例。
不健全な投稿画像へのフィルタで利用。エンドユーザーが投稿するときに、都度、フィルタリングできるようになった。人力削除の仕事が40%減ってうれしい。
投稿のラベル付け、カテゴリ付けにも利用。

ブレインパッド 下田
・会社紹介

♯事例紹介(管理いらずの GCP でサービスに集中する方法)

Room C
座席数150 満員

オールアバウト 中村
・オンプレ環境からGCPへ移行した。
オンプレ運用でよくあるつらい運用から開放されたかった。
・なぜ移行したか?
AWSと比べて割安。台湾リュージョンのレイテンシ、ping 40msがあっても問題ないサービスを運用するため。
疑問…オンプレ環境のKVSではFusion ioMemory使っている図だったけど、GCPでのKVSはどうしている?GCEに載せている?それとも?

ノハナ 武市
・Parse.comからGCPへ移行した。
Parse.comサービス終了に伴ってGCPへ移行した。
KVSは、MongoDBを使っていた。GCPでもGCEにMongoDBを載せている。
・なぜ移行したか?
コストの安さ。GCPのデータ分析サービスを使ってみたい。

プレイド 後藤
・AWSからGCPへ移行した。
GCPではストリーム処理、BigTable、BigQueryをよくを使っている。
・なぜ移行したか?
CGPは、大量データ処理サービス、ロードバランサが強かった。
・苦労しているところ。
移行時のAWS、GCPデータセンター間のネットワークコスト。サポートのレスポンスが遅い。

要望…Cloud Datastoreの事例を聞いてみたい。

♯事例紹介(ゲーム業界の方必見!GCP のすごいところ)

Room B
座席数300満員

GCP 橋口
・GCP触ったことがない人?挙手1/3。

サイバーエージェント 白石
・2013からGAEを使っていた。
・デプロイ、開発環境の構築がつらかった。Kubernetesを使った開発スタイルをすすめている。
・チケット番号とポート番号をあわせて開発。
感想…えっ。。

Aiming 野下・芝男
・BigQueryを使ってデータ分析をしている。
社員がデータを見てくれない悩み。勉強会、社内報をがんばった。
・なぜGCPを使っている?
アジア向けサービス展開、GCE、CloudSQL。コスト安。
・国内ではAWSを使っている。GCP東京リュージョンがローンチしたら移行予定。

gumi 板倉
・BigQuery、GCSを使っている。
行動ログのデータ構造がよく変化するので、String JSONで保存。

感想…みなさんBigQuery、GCS使っていてツライところがあるはず。そこを聴きたい。
個人的にGCSを使っていて、たまにデータ入らないときがあった。つらい。

♯事例紹介(成長企業の GCP 活用法)

Room A
座席数600ほど。8割くらいの入り。

GCP 中澤
・GCP触ったことがある人?挙手2、3割くらい。

メルカリ 鶴岡
・BigQuery、Cloud Datalabを使っている。
・メルカリアッテ。すべてGAEを使っている。
グローバルにスケールしたい。JP、US、APAC。
アプリケーションのソースコードは共通。単一データベース。
疑問…データベースは何を使っている?
・サポート窓口が充実している。担当者がいて、すぐに回答が得られる。
疑問…会社によってGCPのサポートの質が違うような気がする。プレイドの事例では、サポートが遅いと言われていた。プランによって変わる?

ディー・エヌ・エー 小林
・AndAppでGCPを使っている。PC向けプラットフォーム。
いままでオンプレ中心だったけど、新しいテクノロジーを取り入れたい。現場のモチベーションが上がる。
インフラ運用負荷の小さいクラウドを使いたい。GAE Standard Environment。Firebase。BigQuery。
・今後、GAE Flexible Environmentに移行するか悩みどころ。

VOYAGE GROUP 西林
・Zucus AdNetwork、fluct、ECナビでGCP利用。
・BigQueryを使っている。投入データ量600GB/day。MySQLのデータも投入。
・BigQuery使用ログもBigQueryに入れる。使いすぎ検知。コストリミットを設定してアラート。
・月に一度くらいBigQuery調子悪いときがある。バッチをリトライできるようにしておく。安定している前提で設計しない。

感想…サーバサイドアプリケーションを、AWS・オンプレからGCPに移行する会社は、GCEを使って、新規サービスを立ち上げる会社はGAEを使う印象でした。

2016年9月1日木曜日

AWS Route53のDNSレコードをコマンドラインから操作する

Amazon Route 53 Authentication Tool for Curl
https://aws.amazon.com/developertools/Amazon-Route-53/9706686376855511

ダイナミックDNS(DDNS)を実装します。上記ページで公開されているスクリプト dnscurl.pl を使って、AWS Route53のDNSレコードを操作します。
Route53を操作するためのIAMポリシー・ユーザを作成して、DNSレコード更新サンプルを書いていきます。
環境は、CentOS 6です。

AWSコンソールから、Route53編集用のIAMポリシーをつくる

IAM Management Console Policies
https://console.aws.amazon.com/iam/home?region=ap-northeast-1#policies

IAMポリシー設定ページを開く -> Create Policy -> Create Your Own Policy
ポリシー名と、ポリシードキュメントを入力。
ここでは、IPアドレス 153.126.157.62 にRoute53の編集許可を与えます。

Policy Name: Route53-FullAccess-with-valid-IP-address
Policy Document:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "route53:*"
            ],
            "Resource": [
                "*"
            ],
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "153.126.157.62/32"
                    ]
                }
            }
        }
    ]
}

IAMユーザをつくる

IAM Management Console Users
https://console.aws.amazon.com/iam/home?region=ap-northeast-1#users

IAMポリシー設定ページを開く -> Create New Users ->
Enter User Names: route53_user -> Create
Access Key ID: AAAAAAAAAAAAAAAAA
Secret Access Key: BBBBBBBBBBBBBBBBB
キーをメモしておく。

先ほど作ったポリシーをひもづける。
-> Attach Policy -> Route53-FullAccess-with-valid-IP-address

dnscurl.plの準備

必須ライブラリをインストール
# yum -y install perl-Digest-HMAC*
.aws-secretsファイルを準備
# emacs .aws-secrets
%awsSecretAccessKeys = (
    "my-aws-account" => {
        id => "AAAAAAAAAAAAAAAAA",
        key => "BBBBBBBBBBBBBBBBB",
    },
);

# chmod 600 .aws-secrets
dnscurl.plをダウンロード
# wget http://awsmedia.s3.amazonaws.com/catalog/attachments/dnscurl.pl
# chmod +x dnscurl.pl
# ./dnscurl.pl --debug

dnscurl.pl接続確認

# ./dnscurl.pl --keyname my-aws-account -- -H "Content-Type: text/xml; charset=UTF-8" https://route53.amazonaws.com/2010-10-01/hostedzone

<?xml version="1.0"?>
<ListHostedZonesResponse xmlns="https://route53.amazonaws.com/doc/2010-10-01/"><HostedZones><HostedZone><Id>/hostedzone/HHHHHHHH</Id><Name>hitokoto.co.</Name><CallerReference>B56A5CA2-7F5D-5183-B014-94C24DE1720B</CallerReference><Config/></HostedZone></HostedZones><IsTruncated>false</IsTruncated><MaxItems>100</MaxItems></ListHostedZonesResponse>
-> Hosted Zone ID:HHHHHHHH をメモしておく。

ドメインからIPアドレスをひいてみる。
hostedzone/ 以下に Hosted Zone ID を指定。
name= に test.hitokoto.co. を指定。
./dnscurl.pl --keyname my-aws-account -- -H "Content-Type: text/xml; charset=UTF-8" "https://route53.amazonaws.com/2010-10-01/hostedzone/HHHHHHHH/rrset?name=test.hitokoto.co.&maxitems=1"

<?xml version="1.0"?>
<ListResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2010-10-01/"><ResourceRecordSets><ResourceRecordSet><Name>test.hitokoto.co.</Name><Type>A</Type><TTL>300</TTL><ResourceRecords><ResourceRecord><Value>153.126.157.62</Value></ResourceRecord></ResourceRecords></ResourceRecordSet></ResourceRecordSets><IsTruncated>false</IsTruncated><MaxItems>1</MaxItems></ListResourceRecordSetsResponse>
指定したドメインのIPアドレスが返ってきました。

ドメインのIPアドレスを変更

test.hitokoto.co.のIPアドレスを変更します。153.126.157.62 -> 10.0.0.1
XMLファイルを用意。
$ emacs renew_ip_address_test.xml
IPアドレス変更を実行
# ./dnscurl.pl --keyname my-aws-account -- -H "Content-Type: text/xml; charset=UTF-8" -X POST --upload-file ./renew_ip_address_test.xml https://route53.amazonaws.com/2013-04-01/hostedzone/HHHHHHHH/rrset

<?xml version="1.0"?>
<ChangeResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"><ChangeInfo><Id>/change/HHHHHHHH</Id><Status>PENDING</Status><SubmittedAt>2016-08-25T06:43:11.590Z</SubmittedAt></ChangeInfo></ChangeResourceRecordSetsResponse>
ステータス PENDING になりました。
数秒待つと設定が反映されます。

無事に設定されました。