THE えのき

えのきです。

2017年振り返りと2018年目標とか

あけましたね。書こう書こうと思って2週間経過したので、重い腰を上げて書き始めました。

去年はこんな戯言を書いていたようです。

enoki.hatenablog.com

2017年振り返り

  • 部屋の整理整頓
    • 幻想でした
  • 体重85キロ切る
    • 最高体重更新しました
    • 今102kg
  • 貯金もっとする
    • 無駄な出費減らしたけど、なんか金使ってる気がする
    • 貯金は微量ながら増えた
  • コード書く(略
    • サーバエンジニアに転向しました
    • 12月から毎日何かしら触ってる
      • 覚えること多くて大変
  • 竜神釣大橋から飛ぶ
    • 今年で30なので今年こそ行きたいなぁ
  • 海外旅行行く
    • バリ
    • 韓国
  • 陸マイラー30万マイル貯める
    • 暗号通貨のトレードとかやってたら興味が薄れてきた…

2018年目標とか

  • 月5000円とかでもいいので毎月副収入を得る
    • これとは別に社会勉強で会社を作ろうとしている
  • サーバーエンジニアとして社内で自立する
    • 頑張ります…
  • 海外旅行行く
  • 国内旅行行く
    • 福岡行く案件あるけど、他にもう一件案件作りたい
  • 陸マイラー15万マイル貯める
    • 現状9万マイル
    • ソラチカルートが終わる以上どうすればいいのか…

内製ツールを Homebrew で配布しはじめた話

おはこんばんちは!健康診断で尿酸値過去最高記録を更新できませんでした!残念!(去年9.5, 今年9)

k_enokiです!

この記事は CyberAgent Developers Advent Calendar 2017 - Adventar の7日目の記事です。

6日目はkuro_m88さんの Datadog Logsでアプリケーションログを管理する でした。3年連続 kuro_m88 さんの翌日を担当することになったのは偶然です。

今年は3度目ということで、すこし真面目なネタを書いていこうと思います。

最近お隣の島のグループが作ってくれた超便利なAPIをラップするCLIをgoで作りました(TLS/SSL証明書をとってきたり、LBにアップロードしたり)。それを配布するのにHomebrewを使ってみたよ。と言う話です。

追加とインストール

マカーな皆様には馴染み深いHomebrewですが、実はGitHub Enterpriseでも自作のレポジトリを作ってFormulaを管理することが出来ます。

レポジトリの追加はこれだけ。 GitHubじゃなくても、レポジトリのURIを指定することでtapすることが出来ます。

brew tap enoki/awesome-tools git@github.example.com:enoki/homebrew-awesome-tools.git

ヘルプ見て知ったんですが、

brew tap user/repo

は以下のショートカットだったみたいです。

brew tap user/repo https://github.com/user/homebrew-repo

レポジトリを追加したあとはいつものようにインストールすることができます。

brew install awesome-cli

超カンタンです。READMEにでも書いておけば社内からツールの利用が増えること間違いなしですね!

レポジトリとFormula

レポジトリとFormulaの例です。

$ tree .
.
├── Formula
│   └── awesome-cli.rb
└── README.md
class AwesomeCli < Formula
  desc "awesome cli"
  homepage ""
  url "https://example.net/enoki/awesome-cli/v1.0.0/awesome-cli_Darwin_x86_64.tar.gz"
  version "1.0.0"

  def install
    bin.install "awesome"
  end

  test do
    system "#{bin}/awesome -version"
  end
end

Formulaという名前のディレクトリにrubyスクリプト(こいつがFormula)を置くだけです。 上記の例ではtar.gzを解凍して出てきたバイナリを配置するだけの内容ですが、複雑な処理も書くことが出来るので興味がある方は以下を参照してみてください。

github.com

新しいツールが出来たあとの配布も簡単です。

Formulaを追加したあと利用者に brew update && brew install してもらうだけです。

どんどん新しいツールを作ってどんどん配布していきましょう!!!更新も簡単です!

新規追加
$ brew update
Updated 1 tap (enoki/awesome-tools).
==> New Formulae
enoki/awesome-tools/awewome-cli
更新

既存バージョンがインストール済みの場合は新しいバージョンがインストールされます。

brew update
Updated 1 tap (enoki/awesome-tools).
==> Updated Formulae
enoki/awesome-tools/awesome-cli

感想

Homebrewのおかげでツールのインストールが配布が大変楽になりました。

WikiやREADMEに詳細な手順を書かなくてすむのと作業手順が2ステップなので、ツール提供者と利用者両方共にメリットがあると思います。

今は諸事情でチーム内でしか提供できてないのですが、ゆくゆくはメディア事業全体にツールを公開できるようにしたいです。

WindowsLinuxを使ってる方々にはReleasePageにバイナリ置いてあるから使ってね!というのが現状ですが、Mac以外もいずれは何かしらの方法で簡単に配布できるようにしたいですね。

明日(これ書いてるのは既に12/8)は村井翔太朗さんがみんなが知りたいこと書くみたいです。いや〜楽しみ!

2017年目標とか

あけましておめでとうございます。

2016年振り返り

去年は色々チャレンジしたり荒れたり荒れなかったりな一年でした。
re:invent行かせてもらえたのが一番の刺激だった気がします。

ちなみに去年はこんな戯言を書いてました。

enoki.hatenablog.com

  • 部屋の整理整頓
    • 引っ越ししてだいぶ物捨てたけどまだまだ沢山残ってる…
  • 体脂肪率20%切る
    • 逆に増えました
  • 貯金する
    • 微々たるものだけど貯金はちょっとずつ増えてる
  • コード書く習慣をつける
    • あっ…
  • 神大吊橋から飛ぶ
    • 機会がなくて行けてない

2017年目標とか

  • 部屋の整理整頓
    • 引き続き
  • 体重85キロ切る
    • 体脂肪は20%前半になってるはず…
  • 貯金もっとする
    • というか無駄な出費なくせば貯まってく計算に…
  • コード書く(略
    • 今年こそは!!!
  • 竜神釣大橋から飛ぶ
    • 今年こそは!!!
  • 海外旅行行く
  • 陸マイラー30万マイル貯める
    • 来年SFCゲットするぞ

Slackに突然の死っぽいアレを投稿するスペシャルなコマンドをSlash CommandとLambdaを使って作った話

おはこんばんちは!健康診断で尿酸値過去最高記録(9.5)を叩き出しました!
k_enokiです!

この記事はCyberAgent Developers Advent Calendar 2016の13日目の記事です。

12日目はkuro_m88さんのゲームのユーザに合わせた広告画像を動的に生成して配信する仕組み | Tech Blogです。
(現状は記事が公開されていないようです。13日19時現在)

突然の死とは

インターネッツに生息している皆様は、突然の死というのを見たことがあると思います。 こういう吹き出し風なAAのことです。

_人人 人人_
> 突然の死 <
 ̄Y^Y^Y^Y ̄

一応複数のAAを使ったストーリーの最後に出てくるAAですが、汎用性が高いので吹き出しだけ使われていることを見たことがあると思います。
先日、インフラチームで検証開発合宿を行ったのですが、

詳しくは以下を参照してください。

突然の死とは (トツゼンノシとは) [単語記事] - ニコニコ大百科

Webアプリ版のジェネレータもあります。

突然の死ジェネレータ 突然の死ジェネレーター(吹き出し文字作成)

構成

あとで絵を書きます…すいません…

Slash Commands

API Gateway + Lambda(Python2.7)

incoming Webhooks

設定

あとで書きます…すいません…

lambdaのblueprintにslack-echo-command-pythonというのがあるのでコレを使っています。 (コードのコメントに設定方法が書いてあります。)
f:id:k_enoki:20161213195023p:plain

Slash Commandsはデフォルトだと自分にしか結果が見えないので、Incoming Webhooksを叩くことにしました。

なぜincoming Webhooksを使うのか

Slash Commandsでもレスポンスに
"response_type": "in_channel" を設定すれば他の人でも結果を見ることが出来るのですが、いきなり突然の死が現れたほうが面白いと思い、in_channelは使わないことにしました。 以下の画像のように

f:id:k_enoki:20161213200707p:plain Slash Commands | Slack

使ってみる

f:id:k_enoki:20161213194443p:plain

SlackのPublic Channelで、おもむろに/totsuzenと入力します。
Slash Commandなのでタブで補完が効くのがいいですね。

f:id:k_enoki:20161213195157p:plain

posted.と書かれた発言は自分にしか見えません。

いたずらに叩かれすぎても困るので、名前を出すようにしているのですが、

f:id:k_enoki:20161213195222p:plain

/totsuzen ninja 突然の死

このようにサブコマンド ninjaを付けることで名前を隠すことも出来ます。(ログには出力してます)
これで場面に合わせて使い分けることが出来ますね!

f:id:k_enoki:20161213195351p:plain

無駄に使いすぎるとこういう事も言われてしまうので、注意してください。

突然の死ジェネレータのコード

遊びながら改修中です。

 ̄Y^Y^Y^Y^Y^Y ̄

この部分はまだ調整中なので大きくずれることがあります。

SlackのIncoming WebhooksのURLはkmsに設定してください。

制約

  • Public Channelでしか使えません。
    • Slash CommandのHookで渡されるChannnel名がPrivate Channelだと'privategroup'になるため。
  • Private Channelの場合はメッセージを表示するようにしてあります。

AWS CLIでCloudWatchのElastiCacheのメトリクスを取得する

ElastiCacheのメトリクスを取得するためにはCahceClusterIdとCacheNodeIdを指定しないとダメなのに、どうやって指定すりゃええのかわからず悩んでいた。
man読んで--dimensions (list)と書いてあることに気づくまで時間がかかったのでメモ。

dimensionsを簡略して複数指定する場合、半角スペースで区切る必要がある。
CacheClusterIdとCacheNodeIdを同時に指定できたので無事メトリクスを取得できました。めでたしめでたし。

環境
aws --version
aws-cli/1.10.13 Python/2.7.11 Darwin/14.5.0 botocore/1.4.4

CPUUtilizationを取る

aws cloudwatch get-metric-statistics \
--namespace AWS/ElastiCache \
--metric-name CPUUtilization \
--dimensions Name=CacheClusterId,Value=hoge Name=CacheNodeId,Value=0001 \
--start-time `date -u -d '5 minutes ago' +%Y-%m-%dT%TZ` \
--end-time `date -u +%Y-%m-%dT%TZ` \
--period 300 \
--statistics Average

CacheNodeIdを見るにはイカのコマンドを実行する

aws elasticache describe-cache-clusters 
--show-cache-node-info \
--cache-cluster-id hoge
参考

ElastiCache メトリックスのディメンション - Amazon CloudWatch

「ソフトウェアエンジニアのための ITインフラ監視[実践]入門」を読んだ

ソフトウェアエンジニアのための ITインフラ監視[実践]入門 (Software Design plus)

ソフトウェアエンジニアのための ITインフラ監視[実践]入門 (Software Design plus)

最近とある事情でイケイケ組織のお手伝いで監視を中心にインフラエンジニア業をちまちまやっています。

本屋でふと見かけたので買ってみました。

所感

  • 150ページ弱なので、すぐ読める
    • 文字も大きいので読みやすい
    • 章区切りも細かい(第9章まである)のでちまちま読める
  • 特定の監視ツールに偏った話ではない
    • VMWareとAnsibleとHomebrewってキーワードがサラッと出てくるけど特に説明ない
    • 第7章はMackerelを使って監視システムを構築する
  • オンプレでもクラウドでも通じる内容
    • 関係なさそうなところは読み飛ばせば良さそう
  • 事例は特に無いので運用長い人は物足りないかも
    • ITインフラ本当にあった怖い話って本が出たら買う
  • 障害が起きた時の対処方法も軽く書いてあってよかった
  • これを読めば監視ができる!というより監視をすることになった人のための指南書的な感じ
  • イケイケの組織のエンジニアにも読んでもらおうと思いました

最後に

6.5.1に「あなた自身を守ることがITインフラを守ることにつながるという前提を忘れないでください。」と書かれていて泣いた。

Amazon Cloud Driveのデスクトップアプリでamazon.co.jpにサインインできないとき

TL;DR

  • Macのシステム言語が英語の時、Amazon Cloud Driveのデスクトップアプリはamazon.comにサインインしようとする。
  • システム言語を日本語にするとamazon.co.jpにサインインできるようになる。
  • サインインした後はシステム言語を英語にもどしても、継続してamazon.co.jpにサインしたままになる。
  • サインアウトすると、再度日本語に設定し直さないとダメ。

プライム・フォト(Amazon Cloud Drive)を早速試してみた。

日本でもプライム・フォトがプライム会員向けにスタートしました。

Amazon.co.jp: Amazon Prime

早速デスクトップアプリをダウンロードしてみました。

が、

サインイン出来ない…

f:id:k_enoki:20160121150305p:plain

右上に「Use your existing amazon.com account.」と書いてあるので、どうやらamazon.comのアカウントを必要としているみたいです。

システムの言語が英語なので、それが原因なのかな〜と思い、とりあえず英語から日本語に変更してみました。
方法がわからない人は↓のサイトでも参考にしてください。

wayohoo.com

日本語に変更した後、Amazon Cloud Driveを起動すると…

f:id:k_enoki:20160121135143p:plain

Amazon.co.jp アカウントを使用」になってますね。
システムの言語を見てどの国のAmazonを利用しているのか判断しているんでしょうか?

はい

f:id:k_enoki:20160121150151p:plain

無事サインインできました👏

一度サインインしてしまえば、システムの言語を英語に戻した後もサインイン状態は継続していました。

ファイルのアップロードもバッチリ。

f:id:k_enoki:20160121135400p:plain

合計25GB弱のデータをアップロードしてみましたが、1時間ほどで終わりました。 Macアクティビティモニターだと転送速度が7~10MB/sでした。
かなり早いですね🎉

f:id:k_enoki:20160121151451p:plain

写真ファイルは別にカウントされるみたいですね。
今後もバシバシRAWファイルをアップロードしようと思います。

サインアウトしたらどうなるの

試しにサインアウトしたあと再度サインインしようとしたら、「Use your existing amazon.com account.」と表示されていたので、もう一度日本語に設定する必要がありそうです。
サインインするタイミングでのシステムの言語にあわせてどの国のAmazonを利用するのか決めてる雰囲気です。

Macでは地域を設定することができるので、そっちを見てログイン先を変えるほうがいいような気がします。
というわけで問い合わせ済み。