ひよこインフラてっく!

ひよこインフラエンジニア「ひよこ大佐」による技術ブログ的なもの。インフラ技術や仮想化、Pythonなど。

ポットキャスト「deploy.am」はじめました

どうも、ひよこ大佐です。

開発以外の話題を中心に、inductorさんと私ひよこ大佐がメインパーソナリティでお届けするポッドキャストdeploy.am」をスタートしました。 第1話が下記ページ、もしくはGoogle ポッドキャストPlayer FMでも聴くことができます。

deploy.am

第1回は、メインパーソナリティ2人の自己紹介と転職の話やキャリアについてなど、初回ながら聴きごたえがある内容になっていると思いますので、ぜひBGMがわりにでも聴いていただければと思います!

@ITにTwitter転職を取材されました

どうも、ひよこ大佐です。 Twitterをご覧になっている方はもうご存知かと思いますが、Twitter転職について取材を受けました。 まだご覧になっていない方は、下記からご一読いただければ幸いです。

ひよこ大佐、私もTwitterで転職できますか? (1/4):教えて! キラキラお兄さん - @IT

こういった形で取材を受けるのは初めてですが、自分の思いを記事にしていただけたかなと思います。自分の顔写真が出回るのはなかなか恥ずかしいものですが、概ねポジティブな感想をいただけれているので、嬉しい限りです。

Twitter転職をしてみて

Twitter転職は、僕自身は以前の記事でも言及した通り、Twitterで転職しようという強い思いをもって活動していたわけではありません。 hiyoko-infratech.hateblo.jp

ただ、転職の手段としてはアリだとおもいますし、従来のエージェントを使った転職にない利点も、欠点もあります。 ですので、従来の転職活動と併用したり、いいところをうまく活用し、欠点を他の手段で補っていくのがよいと思います。 以下は、自分がTwitterで転職活動をして、また他の方の事例を見て感じた大事だと思う考え方です。

ポジティブかつ敬意を持って接する

Twitter転職は、「人と人とのゆるいつながり」による転職活動になります。 ですから、お互いに誠実に、敬意をもって接する必要があります。(転職活動に限らずですが) 横柄な人間と働きたいと思う人はいません。

スキル・経歴を整理する

140字という限られた字数のなかでいかに自分ができること、自分がやりたいことを伝えるかを考えるのは非常に難しいです。そのためには自分の今あるスキルの整理をしておく必要があります。 どちらにせよ、職務経歴書などは提出する必要があるので、それと同時に自分ができること、経験してきたことが整理できていれば理想的だと思います。

今後のキャリアロードマップを持つ

どこかへ進むためには、進みたい方向を理解している必要があります。IT業界だけでもいろいろな仕事があり、どこに向えば正解というものはありません。その中で、「自分がやってきたこと」をベースに、「次は何をしたいのか」という志向が明確に決まっていれば、転職活動もやりやすいですし、自分の中での判断基準を持つことができます。

転職活動を楽しむ

つらい転職活動は、地獄です。楽しい方がいいに決まってますよね? 自分がやりたいこと、キャリアの未来を考える機会として、転職活動はまたとない機会です。楽しみましょう。

偉そうに書いていて恥ずかしくなってきたので、ここらへんで終わりとさせていただきますが、皆様によりよいキャリアが訪れることを願っています。

Interact 2018に登壇しました

どうも、ひよこ大佐です。 @Pyromaniaxxx さんにお誘いいただき、Interact 2018というイベントでお話しさせていただく機会がありました。

interact.connpass.com

マイクロソフトさんのセミナールームをお借りして、同時に60分間のセッションを6枠、4回にわたって開催する非公式ながら非常に規模の大きいイベントでした。

300名近い参加者の方に来場いただき、大盛況でした。私自身も「Ansible x Windows: AnsibleではじめるWindows自動化」と題して60分の枠をいただきました。 スライド資料に関してはSpeakerDeckにアップロードしてありますので、ご確認いただけたらと思います。

speakerdeck.com

登壇してみて

実際に会場に入ってみると、まさかの満席! いままでこういった大人数の前でしゃべることはなかったので、ガチゴチに緊張してしまいました。 その結果、まさかの20分以上時間を余らせる事態に……!

(緊張して早口で喋りすぎました)

しかし、結果的にはいいレスポンスを頂き、課題も明確になったので、ぜひ機会があればまた登壇してみたいと強く思うようになりました。 ツイッターでは「わかりやすい」と言っていただいている方もいたので、普段なじみのないAnsibleでのWindows自動化をある程度は啓蒙できたのかなぁと思います。 リベンジのために、また来年もぜひ呼んでください!!

スライドに関する質問やフィードバックがあれば、ぜひぜひTwitterでリプライを飛ばしていただければ励みになります! (このイベントでAnsibleしゃべってほしいなぁというご相談もありです)

インフラ勉強会 半年記念イベント(東京会場)に参加してきました

おひさしぶりです。ひよこ大佐です。

6/23に渋谷で開催された、インフラ勉強会半年記念イベントに参加してきました。 イベントの詳細については、TECH PLAYのイベントページを参照ください。

techplay.jp

インフラ勉強会については下記記事にて取り上げていますので、よろしければご一読ください。

hiyoko-infratech.hateblo.jp

会場

渋谷駅から徒歩数分の綺麗なビルの中にありました。

会場はさながらカフェのような凝ったインテリア。噂には聞いていたのですが、想像以上に綺麗な会場でした。 広さも100人ぐらいは余裕で収容できるぐらいあり、設備も整っているようでした。 f:id:hiyokotaisa:20180627172929j:plain f:id:hiyokotaisa:20180627173044j:plain あまりのオシャンティさに驚きながら、会場の隅に着席。

用意いただいていた名札がTシャツにうまく張り付かず、急遽名札をGimpでパパっと作成、近くの100円ショップで名札入れを買ってコンビニで印刷しました。 f:id:hiyokotaisa:20180705192633j:plain

12時を過ぎると、続々と別の参加者の方々が。 普段オンラインで話す方でも、こうやって直接会う機会はほとんどないので、非常に新鮮です。 広いと思っていた会場も、これだけ人が集まると狭く感じます。 f:id:hiyokotaisa:20180627173507j:plain

勉強会開始

佐々木康介さんの挨拶からイベントがスタート。煽りで英語を覚えた煽りのプロことinductorさんによる「インフラ勉強会の振り返り」があり、場が盛り上がったところで大阪会場のゆたかさんのセッション。 コミュニティ主導のイベントで東京・大阪同時開催というのはなかなかなかった試みですが、非常に低遅延かつなめらかな配信が実現されていました。

スタッフの方々の多大な努力と準備があってこそだと思います。本当に感謝です。

休憩を挟んだあとはパネルディスカッション。インフラ勉強会に参加されている方はお馴染の顔ぶれによるディスカッションは、笑いあり、考えさせられるコメントありで大いに盛り上がりました。

懇親会&LT

お待ちかねの懇親会がスタート。実は前日の22時過ぎに「LTやりませんか」とお声がけいただき、いつの間にか私自身も登壇することになっていました。

盛り上がる話、真面目な話からここでは書けないようないろいろな意味で「ヤバい」話など、バリエーションに富んだLTに、お酒もあり会場はどんどんヒートアップ。 私もお酒を飲みながら話しかけていただいたり、エンジョイしつつもついに自分の出番となりました。

LTでは何を話そうか悩んだのですが、せっかくなのでTwitter転職のその後について、前職と現職の違いやそこで感じたことなどをLTしました。 結果的にはLTは成功だったと自分では思っています。スライド自体については公開する予定はありませんが、いい経験になりました。

イベントを通して感じたこと

非常に熱量の高いコミュニティでありながら、Discordでの活動が主体で参加のハードルが非常に低い、稀有なコミュニティだと感じています。 イベントもスタッフの方が主体的にすべて準備いただき、当日はノートラブルで終えることができました。 (準備会のチャンネルに入っていたのに、何もできていなくて本当にすみません)

また、1年記念イベントが予定されているので、その際はぜひまた参加したいと思います。 参加された皆様、本当にありがとうございました!

いまからはじめるAnsible#1を開催しました

皆様、おはようございます。ひよこ大佐です。

大雪に見舞われた東京も、徐々に雪が溶けはじめました。ただ今週末にまた雪が降るかもしれないとの予報で、今から憂鬱な気分です。

インフラ勉強会

勉強会に参加されるエンジニアの方は非常に多く、ConpassATNDをちらりと眺めただけでも数え切れないほどのさまざまな勉強会が開催されています。

 

そんな中にあっても「インフラ勉強会」が他と一線を画すのは、そういった対面での勉強会と異なり、場所の制約を受けないオンライン限定のコミュニティであるということです。

 

Discord上でLinux、Networkからセキュリティ、コンピュータアーキテクチャの話に至るまで、インフラに関わる多様な領域を議論するチャンネルが存在し、日々議論、情報共有や雑談、LT、勉強会を開催しています。

 

今回私は1/28(日) 21:00から1時間ほどAnsibleの概要や初歩的な使い方を説明する勉強会を開催しました。

 

GitPitch + 画面共有 + Discordのボイスチャット

Discordにはボイスチャットチャンネルが存在するので、超多人数のボイスチャットが実現可能です。そのシステムとテキストチャットによるコミュニケーション、画面共有ツール「join.me」で参加者にデスクトップを共有し「GitPitch」を使ってGitHub上に作成したMarkdownのドキュメントをスライドとして表示させました。

 

実際に使用したGitPitchのスライドがこちらです。

https://gitpitch.com/hiyokotaisa/ansible-101/draft

Githubはこちら。

https://github.com/hiyokotaisa/ansible-101/blob/draft/PITCHME.md

 

この方式であれば、配信者も手軽にいつでも配信でき、参加者もDiscordのVC(ボイスチャット)を聞きながらスライドを眺めるだけでよく、ラジオ的に聞き流すことも可能で、非常に参加のハードルが低いのが利点です。参加できなかった方も、WikiページにスライドのMarkdownをベースに補足したものを参照すれば勉強会で触れた内容、デモの手順まで把握できます。

 

当日は参加者がjoin.meの上限である50人を上回ってしまったため急遽参加者の方に多重配信していただいたり、draftからmergeし忘れたりなどのトラブルはありましたが、概ね好評をいただけたようで非常によい体験ができました。

 

今後の勉強会のあり方

勉強会はいままで、ハードルが高いものでした。発表者にとっても参加者にとっても、時間も場所も制約を受けてしまい、なかなか忙しい合間を縫って参加することができない方も多く、大きな機会損失がありました。その制約を受けずに参加できるのがオンライン勉強会です。

いわゆるWebinarと呼ばれる形式の勉強会は、大企業が主催する勉強会などでは存在していました。ただ、インフラ勉強会のようにコミュニティから生まれ、草の根的に広がりつつあるこの動きに、非常に大きな可能性を感じます。今後も、この動きがますます拡大していくことを願っています。

 

 

クリスマスプレゼントの御礼と2018年の抱負

こんばんは、ひよこ大佐です。 気がつけば2017年もあと数時間。時が経つのは早いものですね。

クリスマス前、軽い気持ちでTwitterでクリスマスプレゼントを募集したりしました。

結果、こうなりました。

大量の技術書やトイレットペーパーやトイレットペーパーや食料、本棚や机(!?) などが続々と届いております。 皆様本当にありがとうございます。

以下、頂いたもののリストです。

技術書

  • Infrastructure as Code ―クラウドにおけるサーバ管理の原則とプラクティス
  • Azureテクノロジ入門 2018
  • 詳解 Linuxカーネル 第3版
  • コンピュータネットワーク 第5版
  • Pythonチュートリアル 第3版
  • マスタリングTCP/IP 応用編
  • マスタリングTCP/IP ルーティング編
  • インフラ/ネットワークエンジニアのためのネットワーク技術&設計入門
  • ふつうのLinuxプログラミング 第2版

読み物

  • 数学ガール (数学ガールシリーズ 1)
  • 世界を動かすプロジェクトマネジメントの教科書 ~グローバルなチャレンジを成功させるOSの作り方
  • ITエンジニアのロジカル・シンキング・テクニック 新装版

日用品

  • エリエール イーナ トイレットティシュー シングル(100m) 12ロール 華やぐフローラルの香り パルプ100%
  • ネピア おしりセレブ トイレットロール 4ロール ダブル (2枚重ね 35m巻) 無香料
  • ネピア ロング トイレットロール 8ロール シングル (90m巻) 無香料
  • ネピア 鼻セレブ ティシュ 400枚(200組)×3個パック

食品

  • カゴメ 野菜生活100 Smoothie マンゴーピーチスムージーMix 330ml×12本
  • ハウス プロ クオリティ ビーフカレー 辛口 4袋入
  • 低温製法米のおいしいごはん 北海道産ゆめぴりか 180g×5パック

雑貨

  • ステッドラー ボールペン 多機能ペン アバンギャルド 927 ブラストブラック AG-BB
  • サンワダイレクト トラベルポーチ 充電器ポーチ PC周辺小物整理 収納ポーチ 旅行 グレー 200-BAGIN006GY
  • BONTIME クリーニングクロス 超極細繊維/マイクロファイバー【カメラレンズ/スマホ/ メガネ/ 液晶/楽器対応】ギフト 20cm×18cm(8枚セット/個別包装)グレー&ブル
  • Amazonベーシック ジェルマウスパッド ハンドレスト付き

家具

その他

皆様、本当にありがとうございました! 頂いたものはすべて有効に活用させていただきます!

2018年の抱負

来年は、自分にとって「アウトプット」の年にしたいと考えています。 転職を成功させることももちろんですが、技術的にも幅広く吸収しアウトプットしていきたいと考えています。

これだけの技術書をすべて読み切るのは相当な時間が掛かります。 皆様からこれだけのご支援を頂いていますので、すべてを責任を持って読み切ります。

また、そこから得た知識やエンジニアとしての成果はできるだけコミュニティに還元していければと思います。 このブログを含めて、来年は勉強会やコミュニティへのコミットなど、もっとアウトプットできる機会を増やしていければと思います。

来年もどうぞよろしくお願いします!

AnsibleでDockerコンテナを操作してみよう

こんにちは、ひよこ大佐です。 いよいよ2017年も今日が最後の日となりました。皆様いかがお過ごししょうか。 大掃除もようやく終わり、無事今年も新年を迎えることができそうです。

そういえば、大掃除という習慣ですが、その起源は神道の「煤払い」から来ているとのことです。

jinja.jp

家を綺麗にし歳神様をお迎えする習わしが、その宗教的意義が薄れ年末の恒例行事として定着したもののようです。 何気なくやっている新年の恒例行事も、調べてみるといろいろな発見がありますね。

Ansible Connection Pluginについて

さて、今日はAnsibleの記事です。 実はAnsibleからDockerコンテナにたいして操作をすることが可能です。 Ansibleには「Connection Plugin」というPluginの一種として、ターゲットノードへの接続方法を拡張することができます。

通常Ansibleはターゲットノードと接続する際にSSHを使用しますが、それ以外にも現時点で下記の方式で接続することが可能です。今後も拡張が予定されています。

  • buildah - Interact with an existing buildah container
  • chroot - Interact with local chroot
  • docker - Run tasks in docker containers
  • funcd - Use funcd to connect to target
  • iocage - Run tasks in iocage jails
  • jail - Run tasks in jails
  • libvirt_lxc - Run tasks in lxc containers via libvirt
  • local - execute on controller
  • lxc - Run tasks in lxc containers via lxc python library
  • lxd - Run tasks in lxc containers via lxc CLI
  • netconf - Use netconf to run command on network appliances
  • network_cli - Use network_cli to run command on network appliances
  • paramiko_ssh - Run tasks via python ssh (paramiko)
  • persistent - Use a persistent unix socket for connection
  • saltstack - Allow ansible to piggyback on salt minions
  • winrm - Run tasks over Microsoft’s WinRM
  • zone - Run tasks in a zone instance

Connection Plugins — Ansible Documentation

AnsibleでDockerコンテナを操作する

さて、実際にAnsibleからDockerコンテナを操作してみましょう。 今回はAWS上のCentOS 7にdockerとansibleをインストール、CentOS7のdocker imageからコンテナを作成し検証しています。

Dockerのコンテナを作成する

※dockerのコンテナイメージは事前にpullしておきます。

$ sudo docker run -itd --name test-01 centos /bin/bash
$ sudo docker run -itd --name test-02 centos /bin/bash

$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
220b31f3c7c0        centos              "/bin/bash"         3 seconds ago       Up 2 seconds                            test-02
1be95b60e618        centos              "/bin/bash"         59 seconds ago      Up 58 seconds                           test-01

inventoryとplaybookを定義する

以下のようにinventoryとplaybookを定義します。

test_inventory

ローカルのdockerコンテナへの接続となるので、コンテナの名前のみをinventoryに記載しています。

[test_servers]
test-01
test-02

docker_test.yml

playbookの内容は非常にシンプルで、ディレクトリとファイルを作成しているだけです。 ここでのキモは、「connection: docker」という行。 これにより、dockerコンテナへの操作であることを定義しています。

---
- hosts: test_servers
  connection: docker
  tasks:
    - name: create directory
      file:
        path: /home/test/
        state: directory
        mode: 0755

    - name: create file
      file:
        path: /home/test/test.txt
        state: touch
        mode: 0644

Playbookの文法チェックをする

下記コマンドで実行前にPlaybookの文法をチェックすることができます。 実行した際に文法エラーで弾かれることを未然に防ぐ事ができるため、Playbookを作成および変更した際には必ず実施しましょう。

$ sudo ansible-playbook -i ./test_inventory ./docker_test.yml --syntax-check

playbook: ./docker_test.yml

ansibleでテスト実行する

実際にAnsibleで実行する前に、テスト実行します。 --checkオプションをつけることで実際に実行することなくどのように変更されるのか確認できます。--diffオプションで変更後の差分も表示可能です。

$ sudo ansible-playbook -i ./test_inventory ./docker_test.yml --check --diff

PLAY [test_servers] ********************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************
ok: [test-01]
ok: [test-02]

TASK [create directory] ****************************************************************************************************************
--- before
+++ after
@@ -1,4 +1,4 @@
 {
     "path": "/home/test/",
-    "state": "absent"
+    "state": "directory"
 }

changed: [test-01]
--- before
+++ after
@@ -1,4 +1,4 @@
 {
     "path": "/home/test/",
-    "state": "absent"
+    "state": "directory"
 }

changed: [test-02]

TASK [create file] *********************************************************************************************************************
--- before
+++ after
@@ -1,4 +1,4 @@
 {
     "path": "/home/test/test.txt",
-    "state": "absent"
+    "state": "touch"
 }

changed: [test-01]
--- before
+++ after
@@ -1,4 +1,4 @@
 {
     "path": "/home/test/test.txt",
-    "state": "absent"
+    "state": "touch"
 }

changed: [test-02]

PLAY RECAP *****************************************************************************************************************************
test-01                    : ok=3    changed=2    unreachable=0    failed=0   
test-02                    : ok=3    changed=2    unreachable=0    failed=0   

実際に実行する

Playbookを実行する準備ができました。 早速実行してみましょう。

$ sudo ansible-playbook -i ./test_inventory ./docker_test.yml --diff

PLAY [test_servers] ********************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************
ok: [test-01]
ok: [test-02]

TASK [create directory] ****************************************************************************************************************
--- before
+++ after
@@ -1,4 +1,4 @@
 {
     "path": "/home/test/",
-    "state": "absent"
+    "state": "directory"
 }

changed: [test-02]
--- before
+++ after
@@ -1,4 +1,4 @@
 {
     "path": "/home/test/",
-    "state": "absent"
+    "state": "directory"
 }

changed: [test-01]

TASK [create file] *********************************************************************************************************************
--- before
+++ after
@@ -1,4 +1,4 @@
 {
     "path": "/home/test/test.txt",
-    "state": "absent"
+    "state": "touch"
 }

changed: [test-01]
--- before
+++ after
@@ -1,4 +1,4 @@
 {
     "path": "/home/test/test.txt",
-    "state": "absent"
+    "state": "touch"
 }

changed: [test-02]

PLAY RECAP *****************************************************************************************************************************
test-01                    : ok=3    changed=2    unreachable=0    failed=0   
test-02                    : ok=3    changed=2    unreachable=0    failed=0   

問題なく実行できました。

ファイルが存在することを確認する

$ sudo docker attach test-02
[root@220b31f3c7c0 /]# 
[root@220b31f3c7c0 /]# 
[root@220b31f3c7c0 /]# cd /home/test/
[root@220b31f3c7c0 test]# ls -ltr
total 0
-rw-r--r--. 1 root root 0 Dec 31 09:58 test.txt

test.txtファイルが存在していることが確認できます。

おわりに

最後までお付き合いいただきありがとうございます。 Ansibleは様々な環境にたいして操作をすることが可能な柔軟性を兼ね備えています。 いろいろなことがあった2017年。 2018年は、Ansibleをもっと活用してみませんか?

ご意見、ご感想など、コメント欄やTwitterでリプライいただければ励みになります! 2018年も、ひよこ大佐をよろしくお願いいたします!

それでは、良いお年をお迎えください!