AWS Route53 でドメインを購入する
諸事情により、ドメインが必要になったため、AWS の Route53 で購入してみました。その際のメモを。(画面が英語ですが気にしないでください。日本語だと違和感を感じるので英語にしています。。)
購入の流れ
AWS の Route53 はレジストラの機能も持っているのでドメインを購入することができるみたいです。そのままサービスに利用することもできますが、今回は購入だけ行います。 前もって AWS のアカウントは作成済みです。
AWS のマネージメントコンソールにログインし、Route53 に移動します。そして、Register Domain
を選択します。
今回は tatsuyafw.com
というドメインを購入してみるので、入力欄に tatsuyafw
と入力し、右側の Check
ボタンをクリック。すると、ドメインが既に取得済みかどうか表示してくれます。
tatsuyafw.me
というドメインだけなぜか Timeout していますが、tatsuyafw.com
は購入できるみたいです。TLD (Top Level Domain) として .io
も考えましたが、.com
に比べて 3 倍以上の値段だったのでやめました。人気?のせいでしょうか。。
tatsuyafw.com
を Add to cart
して、画面右下の Continue
ボタンをクリックします。
次にドメインの管理者情報の入力です。メールアドレスやら電話番号などを入力します。
ここで入力した情報は WHOIS などで参照できるようになりますが、入力欄の下の方の Privacy Protection
にチェックを可能な限り情報を隠してくれるようです。
ただし、ドメインによってどこまでの情報が隠されるかは異なるので注意が必要なようです。ドメインごとの Privacy Protection
のサポートは以下から確認できるので登録の前に確認したほうが良いかもしれません。
Domains that You Can Register with Amazon Route 53 - Amazon Route 53
最後に今まで入力した情報を確認して購入になります。
ドメインを購入してしばらくするとAWSから確認のメールが届きました。メールの検証を行うと登録完了のようです。
まとめ
メモ書き程度に AWS の Route53 でドメインの購入の流れを書いてみました。参考になれば幸いです。
参考
curl と jo で JSON を POST する
curl と jo を使って JSON を POST するサンプルです。
背景
JSON の HTTP API を作成した際に、軽い動作確認として curl を使って JSON を POST することがあります。 例えば以下のように。
$ curl -X POST -H "Content-Type: application/json" -d '{"message": "hello"}' https://example.com/api
上記のように簡単な構造の JSON の場合はいいですが、少し複雑な JSON の場合、コマンドラインで作成するのはエスケープの問題なので少し面倒になることがありました。 そんな時に jo をを使うと楽に書けるかも、と思い試してみました。
curl + jo
jpmens/jo: JSON output from a shell
jo はコマンドラインで簡単に JSON を作成するためのツールです。
$ jo -p name=taro age=17 { "name": "taro", "age": 17 }
これを curl と組み合わせる際には jo で JSON を生成して、それをパイプで渡してあげるとうまくいきました
$ jo -p message=hello | curl -X POST -H "Content-Type: application/json" -d @- https://example.com/api
curl の -d オプションで @- を指定すると標準入力を受け取ってくれるので、それで jo で生成した JSON を渡しています。
少し関係ないですが、毎回 curl -X POST -H "Content-Type: application/json" を入力するのは面倒なので、
cj` で alias を作成してあげるといいかも
# alias をしておくと $ alias cj='curl -X POST -H "Content-Type: application/json"' # 以下のようにかけて少しすっきり $ jo -p message=hello | cj -d @- https://example.com/api
まとめ
Go でディレクトリを掘る
ディレクトリを掘る際に既にディレクトリがあった場合には何もしたくなかったので、
import ( "os" ) func main() { if _, err := os.Stat("newdir"); os.IsNotExist(err) { if mkdirError := os.Mkdir("newdir", os.ModePerm); mkdirError != nil { // エラー処理 } } }
のようにまどろっこしい書き方をしなくちゃいけないのかな、と思いました。が、os.MkdirAll
はディレクトリがあった場合は何もしないので以下でいいんですね(たぶん)
import ( "os" ) func main() { if err := os.MkdirAll("newdir", os.ModePerm); err != nil { // エラー処理 } }
ちゃんとドキュメントにも書いてありました。 os - The Go Programming Language そりゃそうか。。
CentOS7にNginx + Lua のインストール
CentOS7に Nginx + Lua をインストールする機会があったのでメモを備忘録として残しておきます。OpenRestyをインストールしても良かったのですが、ここでは自分でコントロールするということで各ソフトウェアを手動でインストールします。
環境と各ソフトウェアのバージョン
- インストールする環境と各ソフトウェアのバージョンは以下になります。
- OS: Cent7.1.1503
- Nginx: 1.9.5
- LuaJIT: 2.0.4
- NDK (Nginx Development Kit): 0.2.19
- lua-nginx-module: 0.9.16
LuaJIT のインストール
lua-nginx-module を使うためには Lua の実行環境が必要になりますが、ここでは LuaJITをインストールします。インストールパス(PREFIX)として以下では /usr/local/luajit
を指定していますが、環境や好みに応じて適宜読み替えてください。また、特に明記しませんが以下でダウンロードしているソフトウェアはすべて tmp ディレクトリに配置しています。
$ mkdir tmp $ cd tmp $ curl -O http://luajit.org/download/LuaJIT-2.0.4.tar.gz $ tar zxvf LuaJIT-2.0.4.tar.gz $ cd LuaJIT-2.0.4 $ make PREFIX=/usr/local/luajit $ sudo make install PREFIX=/usr/local/luajit
インストールする環境の状態によっては Clock skew detected
という warning が出るかもしれませんが、私の環境では ntp
をインストールしてから再度 configure すると直りました。
sudo yum install ntp
NDK のダウンロード
GitHub から tar をダウンロードして解凍します。
$ curl -L https://github.com/simpl/ngx_devel_kit/archive/v0.2.19.tar.gz -o ngx_devel_kit-v0.2.19.tar.gz $ tar xzvf ngx_devel_kit-v0.2.19.tar.gz
lua-nginx-module のダウンロード
こちらも GitHub から tar をダウンロードして解凍します。
$ curl -L https://github.com/openresty/lua-nginx-module/archive/v0.9.16.tar.gz -o ngx_lua-v0.9.16.tar.gz $ tar zxvf ngx_lua-v0.9.16.tar.gz
Nginx のインストール
ここから Nginx 本体のインストールが始まります。基本的に lua-nginx-moduleに記載されているインストール手順 と同様です。
必要となるライブラリのインストール
Nginx をインストールする際に私の環境では pcre-devel
と zlib-devel
が必要となりましたのでインストールします。
$ sudo yum install pcre-devel $ sudo yum install zlib-devel
Nginx のダウンロード
Nginxの公式ダウンロードページ から Nginx をダウンロードして解凍しておきます。
$ curl -L -O http://nginx.org/download/nginx-1.9.5.tar.gz $ tar zxvf nginx-1.9.5.tar.gz $ cd nginx-1.9.5
環境変数の設定
先にインストールした LuaJIT の場所を示す環境変数を設定します。
$ export LUAJIT_LIB=/usr/local/luajit/lib $ export LUAJIT_INC=/usr/local/luajit/include/luajit-2.0
Nginx のコンパイルとインストール
configure、make、make install でインストールします。パスは適宜読み替えてください。
$ ./configure --prefix=/opt/nginx \ --with-ld-opt="-Wl,-rpath,/usr/local/luajit/lib" \ --add-module=../ngx_devel_kit-0.2.19/ \ --add-module=../lua-nginx-module-0.9.16/ $ make -j2 $ sudo make install
インストールされたNginxのバージョンを確認します。
$ /opt/nginx/sbin/nginx -V
Nginx のバージョンが表示されればインストールされています。
systemd への登録
systemd に登録しておきます。Nginx のサービスファイルは以下のものを参考に作成しました。
以下のファイルを、/lib/systemd/system/nginx.service
に作成します。
[Unit] Description=The NGINX HTTP and reverse proxy server After=syslog.target network.target remote-fs.target nss-lookup.target [Service] Type=forking PIDFile=/opt/nginx/logs/nginx.pid ExecStartPre=/opt/nginx/sbin/nginx -t ExecStart=/opt/nginx/sbin/nginx ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target
Nginx を enable にし、更に起動します。
$ sudo systemctl enable nginx $ sudo systemctl start nginx $ sudo systemctl status nginx
curl でアクセスし動作確認します。200 OK が返ってくれば成功です。
$ curl http://127.0.0.1 -I
Lua の動作確認
このままだとただの Nginx のインストール記事になってしまうので、一応 Lua の部分の動作確認もしておきます。ここでは Hello,world!
を Lua で HTTP のレスポンスとして返してみます。
設定ファイル (デフォルトだは nginx.conf
) の server context 内に以下を追記します。
location /hello {
content_by_lua "ngx.say('Hello,world!')";
}
Nginx を reload して、curl で動作確認します。
$ sudo sytemctl reload nginx $ curl http://127.0.0.1/hello Hello,world!
Hello,world!
と表示されたので、Lua が動作しているようです。
終わりに
本格的に使う場合には Firewalld の設定をしたり、SSLの終端として使う場合にはコンパイル時に ssl モジュールも追加してあげる必要があります。必要な方は設定&追加してみてください。
YAPC::Asia Tokyo 2015 に参加してきました
「ブログを書くまでがYAPC」ということで、簡単にでもちゃんとブログを書くことで僕の YAPC::Asiaを締めたいと思います。
参加記録
都合により今回は2日目のみの参加となってしまいましたが、それでもとてもおもしろく勉強になるセッションばかりで、気がついたらクロージングというぐらいあっという間の一日でした。個人的には @cubicdaiya さんの Nginx の話は自分の関心にマッチしておりとても参考になりました。
でも一番心に残ったのは、LT の中であった MySQL 5.7 ではユーザパスワードの有効期限がデフォルトでは 360 日で切れるということでした...
YAPC には著名な方が多数参加されていて、「おお、○○さんだ!」と思うことが多いのですが、憧れるばかりでなくちゃんとコードを書いて少しでも力を付けたいと思います^^; YAPC::Asia は今回が最後ということで寂しい気持ちもありますが、ひとつの区切りということで仕方ないのかなと思いました。
@lestrrat さんをはじめとするスタッフの皆様も本当にありがとうございました。そしてお疲れ様でした!!
Arrays.asList と List#removeIf の組み合わせ
Java 8 で Arrays.asList と List#removeIf で少しハマったのでメモを残しておきます。
現象
- Java8 で以下のようなコードを書くと
java.lang.UnsupportedOperationException
が投げられます。
String[] languages = {"Java", "Ruby", "JavaScript", "Haskell", "Perl", "C", "C++", "Perl", "Go"}; List<String> list = Arrays.asList(languages); list.removeIf(lang -> lang.length() <= 5);
調査
- なぜこうなるのか調べてみたところ、以下の stackoverflow の投稿に答えがありました。
- UnsupportedOperationException in AbstractList.remove() when operating on ArrayList
結果
- ということで以下のように書くことにしました
String[] languages = {"Java", "Ruby", "JavaScript", "Haskell", "Perl", "C", "C++", "Perl", "Go"}; List<String> list = new ArrayList<>( Arrays.asList(languages) ); list.removeIf(lang -> lang.length() <= 5);
*1:正確には抽象クラス AbstractList を実装したもので、これの remove が UnsupportedOperationException を投げています
CentOS7 での LANG の設定
背景
CentOS7 をインストールして色々と弄っていると言語が日本語になっていることに気が付き、LANG
を en_US.UTF-8に修正したく思いました。しかし、CentOS6 にはあった /etc/sysconfig/i18n
のファイルが無く戸惑いました。
方法
CentOS7のlocaleの設定を忘れないようにメモしておきます
- 設定
$ localectl set-locale LANG=en_US.utf8
- 確認
$ localectl status System Locale: LANG=en_US.utf8 VC Keymap: jp106 X11 Layout: jp
- 設定ファイルは
/etc/locale.conf
で上記の設定コマンドを実行するとこのファイルの中身が書き換わるようです