@Konboi memo

主に技術に関してつらつらと。

#師弟登壇2015 で発表してきました

はじめに

企画運営してくれた ペパボ のみなさま 会場提供していただきたCOOKPADのみなさま

本当にありがとうございました。 おかげで非常に楽しめました。

発表資料

こちらになります

speakerdeck.com

振り返って

発表自体は良かったと言われたのでよかったと思います。

個人的な反省点としては、ちょっと自分がしゃべりすぎた感があるので2人で発表するときとは分担も考えないとなーという学びがありました。

各会社思考を凝らした研修をしていて非常に勉強になりました。

参考になるところもあれば自分のところでやるにはちょっとやり過ぎかなーとかとか色々考えることがありました。

来年の新卒研修は自分が担当するか分かりませんが、

  • 何のために新卒研修するのか
  • 新卒研修受ける側にはどういう知識を身に付けて欲しいのか

というゴールをしっかりと明確にして、ただやるだけの研修にはしたくはないなと改めて思いました。

最後に

弟子とはいい関係でいたいものですね

AWS で docker を v1.6 以上にアップデートする

はじめに

Docker Hub Deprecation for Clients 1.5 and Earlier

ということで dockerのバージョンが1.5以下では

  • 11/19 日からdocker hub へのpush
  • 12/7 から docker hub からの pull

が出来なくなります。

dockerのバージョンが1.5以下の物を使っている場合は新しい docker image をつくる時に非常に困ります。

dockerdかえアップデートする

ということで AWS に限ったことですが

$ sudo yum update docker --releasever=2015.09

リリースバージョンを指定して updateすれば dockerだけいい感じにアップデートできます

$ docker --version
Docker version 1.7.1, build 786b29d/1.7.1

無事1.7.1にアップデートできました

アップデート時に起動しているコンテナがすべて落ちてしまうので気をつけてアップデートしてください。

まとめ

  • 1.5以下のバージョンを使っている人は、早めにdockerのアップデートしよう

Route53でダイナミックDNSをする 実装編

はじめに

過去3回に渡って色々準備してきました。 最後これらを使って実際にグローバルIPが変わった時にDNSを変更するクライアント? を作ってみたのでそれのメモです

実装

今回は go, aws-sdk-go, route53 の API を使用して実現しました

実際のコードはこんな感じです

https://gist.github.com/Konboi/afa7a8607ef1742f5ddb

流れとしては

  1. 現在のグローバルIPを調べる
  2. Route53のAPIを使って対象のドメインに設定されているIPを調べる
  3. グローバルIPと登録されているIPが異なっていたら更新する

以上になりまっす。

これを buildし対象のサーバーでcronを回して実行している感じです。

問題なく動いているので非常に満足です。

まとめ

  • route53のAPISDKを使ったらスムーズにDDNSが実現できた
  • aws-sdk-go のお作法が大分難しかったのでruby sdk のサンプルを見ながらこんな感じかなで実装しました。

Route53でダイナミックDNSをする IAM編

はじめに

第334回 Route 53でダイナミックDNSを運用する

こちらの記事を本に設定したHosted Zoneを操作するIAM(AWS Identity and Access Management)ユーザーを作ります

ユーザーを作る

AWS Consle > IAM > 新規ユーザーの作成

で任意のユーザー名を入力し作成すると、このようなページになりURLをクリックすると

  • アクセスキーID
  • シークレットアクセスキー

が表示されます これをメモしておきます

権限を付与する

作った状態のままだとただユーザーを作っただけなので設定したHosted Zoneを操作できる権限を付与します

AWS Consle > AMI > ポリシー > ポリシーの作成 > Policy Generator から Route53 を選択

  • ChangeResourceRecordSets
  • ListResourceRecordSets

を追加し、 arn:aws:route53:::hostedzone/#{Hosted Zone ID} を入力して作成すると

このような項目が表示されると思われます

これでRoute53のドメインを操作するだけの権限を与えたポリシーが作成されました

これを ポリシー > 作成したポリシー名 を選択すると

このようなボタンがあるので

アタッチを選択後、先ほど作成したユーザーを選択してあげると独自のポリシーを付与できるようになります。

おわりに

これで必要なIAMユーザーの作成は終わりです。 次は今回したアカウントを使ってRoute53のHosted Zoneを更新していこうと思います。

IAMを使えば特定の権限だけをもったユーザーを作れるので便利ですね。

Route53でダイナミックDNSをする ドメイン編

DDNS用のゾーンを作成する

既にドメインをゾーンで設定している。

今回は登録しているドメインサブドメインをzoneに登録する

img

Create Hosted Zone から設定したいドメインを入力する。

今回はサンプルとして aws.example.amazon というドメインとする

既に登録してあるドメインサブドメインを登録する

hosted zone を登録して Create Record Set から Record 登録すれば使えると思ったらそんな事はなかった。 既に別のHosted Zoneで登録しているドメインの方の設定とバッテイングしてしまい上手くドメイン解決ができなかった。

色々調べてみると こちらの記事 が参考になりました。

結論から言うと

既に登録されていたドメインの方の設定で Type: NS (Name Serverサブドメインの方のドメインを登録すれば解決しました

Route53でダイナミックDNSをする 事前調査編

ダイナミックDNSとは

自宅に引いているインターネットサービスではIPアドレスが固定でない場合が多い。 IPアドレスが変わってしまうとIPアドレスに割り振ったドメインが使えなくなってしまう。 しかし、IPアドレスを固定にする場合は大抵の場合、別途有料のサービスに入る必要がある。

IPアドレスが変更される度に 、ドメインDNSを変更する仕組みがダイナミックDNSである。

参考URL

ここらへんを参考にすればいけいそう

docker-mahcine使ってみた

init

$ docker-machine create —driver virtual box doc
INFO[0000] Creating SSH key...
INFO[0000] Creating VirtualBox VM...
ERRO[0009] Error creating machine: exit status 1
WARN[0009] You will want to check the provider to make sure the machine and associated resources were properly removed.

debugモードで起動してみる

$ docker-machine rm doc
$ docker-machine —debug create --driver virtualbox doc                                          
...                                                                                                                                   
STDERR: Oracle VM VirtualBox Command Line Management Interface Version 5.0.2
...

docker-machine create fails on Mac OSX 10.10.4

4.3系なら動くようなのでここからpkgダウンロードしてダウングレード

4.3.30 なら動いた

docker-machineでdockerを試せる環境を作ってみる

 $ docker-machine ls 
NAME   ACTIVE   DRIVER   STATE   URL   SWARM

何もない

$ docker-machine create —driver virtual box doc
INFO[0000] Creating SSH key...
INFO[0000] Creating VirtualBox VM...
INFO[0009] Starting VirtualBox VM...
INFO[0009] Waiting for VM to start...
INFO[0056] "doc" has been created and is now the active machine.
INFO[0056] To point your Docker client at it, run this in your shell: eval "$(docker-machine env doc)"
$ docker-machine ls 
NAME   ACTIVE   DRIVER       STATE     URL                         SWARM
doc    *        virtualbox   Running   tcp://192.168.99.101:2376

できてるっぽい

いろいろ確認してみる

  • ip
$ docker-machine ip doc
192.168.99.101
  • env
$ docker-machine env doc
                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.8.1, build master : 7f12e95 - Thu Aug 13 03:24:56 UTC 2015
Docker version 1.8.1, build d12ea79
docker@doc:~$

入れた

nginxをいれてみる

$ eval "$(docker-machine env doc)"

してdockerの接続先を変える

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE

なにもない

imageの取得

$ docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx

2c49f83e0b13: Pull complete
4a5e6db8c069: Pull complete
08ecf065655b: Pull complete
ff0618bc0767: Pull complete
12a77b8bf89a: Pull complete
5dde53921c3f: Pull complete
a53219dc4d2f: Pull complete
8c7e9b6e3131: Pull complete
f9bff7d0d06e: Pull complete
3ac9cfbdf572: Pull complete
491aec45eaf8: Pull complete
cd3cf76a61ee: Pull complete
Digest: sha256:aaaaaaaaaaaabbbbbbbbbbbbb
Status: Downloaded newer image for nginx:lates
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
nginx               latest              cd3cf76a61ee        3 days ago          132.9 MB

できてる

$ docker run -i 80:80 -d nginx
$ docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                         NAMES
1d482c3d5542        nginx               "nginx -g 'daemon off"   26 seconds ago      Up 25 seconds       0.0.0.0:80->80/tcp, 443/tcp   mad_panini

ブラウザでアクセスしてみる

img

やった!