雑記

インフラのことだったりプログラムのことだったりどうでもいいこと書いたり。要は雑記。

go langことはじめ

ちょっとgoさわってみたくなった

インストール

Macなのでhomebewで

% brew install go

ちょーかんたん

PATHの設定

zshなので.zprofileで

if [ -x "`which go`" ]; then
    export GOROOT=`go env GOROOT`
    export GOPATH=$HOME/.golocal
    export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
fi

事前にmkdir ~/.golocalしてます

はろーごーらんぐ

定番

  • hello.go
package main

import "fmt"

func main() {
    fmt.Println("はろーごーらんぐ")
}

というか普通に日本語つかえた。

build

% go build hello.go

実行

% ./hello
はろーごーらんぐ

でけた。

ちなみに

なんでいきなりgoかというと、aws-goを使ってみたかったから。 AWS API使ったすごい簡単なものをpythonで作ったんだけど、ふとこれをgoで作ったらどんなんになるんだろと思って。

というわけでこれからaws-goで遊んでみます。

EC2のタグをCLIで管理するtapewriterというツールを作った

タイトル通りですが、EC2のタグをCLIで管理したくて(=コード化したくて)作ってみました。

route53をDSLで管理するroadworkerという素晴らしいツールがあるのですが、おもいっきりその影響を受けています。 (や、ほんと素晴らしいツールで結構な衝撃だったんです)

なにをするもの?

EC2のタグをjsonで管理できるようになるツールです。 jsonなのでバージョン管理もバックアップも取れます。

どんなところで使うの?

  • タグのバックアップをとりたいとき
  • タグをバージョン管理したいとき
  • ブラウザでの作業が嫌だというとき
  • タグを一気に変更したいとき

つかいかた

 タグをエクスポートする

% tapewriter -r ap-northeast-1 -f dev-app.json --export --filter '{"Env":"dev", "Role":"app"}' 

フィルターが使えます

タグを編集する

  • 変更前
{
  "instances": [
    {
      "id": "i-11111111",
      "region": "ap-northeast-1",
      "tags": {
        "Env": "dev",
        "Role": "app",
        "Name": "hoge",
        "State": "standby"
      }
    },
    {
      "id": "i-22222222",
      "region": "ap-northeast-1",
      "tags": {
        "Env": "dev",
        "Role": "app",
        "Name": "fuga",
        "State": "standby"
      }
    }
  ]
}
  • 変更後
{
  "instances": [
    {
      "id": "i-11111111",
      "region": "ap-northeast-1",
      "tags": {
        "Env": "dev",
        "Role": "app",
        "Name": "hoge",
        "State": "run"
      }
    },
    {
      "id": "i-22222222",
      "region": "ap-northeast-1",
      "tags": {
        "Env": "dev",
        "Role": "app",
        "Name": "fuga",
        "State": "run"
      }
    }
  ]
}

Stateタグを変更しています。

dry-run(テスト実行)

どんな変更がされるか確認

% tapewriter -r ap-northeast-1 -f dev-app.json --apply --dry-run

適用

タグを適用

% tapewriter -r ap-northeast-1 -f dev-app.json --apply

実際使ってみて

複数インスタンスのタグを一気に変更したいときにあってよかったなーと思いました。

でも1つのインスタンスのタグを一つだけ変える、とかだったらAWSコンソールからやったほうが早いです。

そもそも

みんなタグってどうやって管理しているんだろ。というかそもそも使ってないのか?ちょっと聞いてみたい。

sensuについてちょっとだけ発表した

資料は以下。

こういった発表は初めてだったんだけど、伝えたいこと全然言えなかった。 難しいものですね。

多分内容的にはニッチなものです。 最近では監視系はSaaSを利用するパターンが主流だと思うんだけど、お金とか事業や会社の方針でSaaSが使えないという方もいらっしゃるとは思うので、そういった方の参考になればなーと思います。

ちなみにdemo中で利用したものは以下です。

気がづいたらGrafanaの2.0(beta)がリリースされてた

ざっと見た感じ、結構変わってますね。

  1. グラフのスナップショットがとれるらしい -> 障害時にスナップしてチャットに送るとかできるのかな
  2. シングルパネルが表示できる -> 最新のロードアベレージとかパッと見てわかるようになる
  3. バックエンドをブラウザ上から複数保存 -> グラフにするときにどのバックエンドを利用するか選択可能
  4. グラフ毎に表示させる時間帯を変更可能に(これまでは1ページで同じ時間を表示させてた)
  5. Grafanaがデーモンとして起動するようになってる
  6. 各パッケージでインストールできるようになってる
  7. アカウント管理ができる -> ダッシュボード見るのにログインを挟むことができる(なしにもできそう)

それ以外にもUIがわりかし変わってました(でも大幅な変更でないので違和感はない)

上記だと1と2の機能がずっと欲しかったんで、早速いろいろ試したいと思います。

コマンドで暗号方式を指定してSSL接続する

今更だけど、OpenSSL関連の脆弱性でお世話になったコマンドを備忘録としてめも。

POODLE、FREAKの時に使いました。

SSL3対応か確認する(POODLEの確認)

% openssl s_client -connect example.com:443 -ssl3

暗号化スイートでEXPORTが使われているか確認(FREAKの確認)

% openssl s_client -connect example.com:443 -cipher EXPORT

いずれも接続に失敗したら、脆弱性に対応済みということ。

SSLの接続テストを実施してくれるサイトで試してもいいんだけど、診断に時間かかったりするので、簡易にさくっと試すならコマンドで確認するのがオススメ。