久しぶりやな俺や

日々のメモ

サンプル試験を解く

公式ページのサンプル問題をまず解いてみる。
AWS 認定ソリューションアーキテクト – プロフェッショナル
6問あって、正解は3問ぐらい。50%ぐらいか……
StorageGatewayと、前に全く使われてなさそうなサービスとどこかで聞いたようなCloudHSMがよくイメージ掴めず、わからなかった。

■Blackbelt
Blackbelt Storage Gateway
Blackblet CloudHSM

■ユーザーガイド
AWS Storage Gateway とは - AWS Storage Gateway
AWS CloudHSM とは - AWS CloudHSM

とりあえず、読もう。

2017年の振り返り

今更ながら、2017年の振り返り

まず、2016年末に転職をしている。 それまでオンプレ環境しか触ったことなかった。

1~3月

AWS触り始め。
はぁーすごいーくらうどってすごいんだー。
1クリック2クリックOKナイスインスタンスだー。って感じ。
サーバーレスすげーでも裏側サーバーじゃんねーすげー。って感じ。
何も知らない無邪気さが可愛い時期。

4~6月

nginxを触ったり、Zabbix→Mackerel導入したりした。
多分人生で一番curl叩いてた時期。
AzureにIaaS作ったのでAzureも少し触る。
クラシックポータル?なんだそりゃ。AWSのマネージメントコンソールが
洗練されているように見えていたそんな時期。

6月末AWSでやらかす。クラウドの恐怖を垣間見た。
ビットコインへの敵意が芽生え始める(お門違い)

7~9月

少しトラウマを抱えつつも、それまで手取り足取り色々教えてくれた上司がいなくなり作業を引き継ぐ。
Dockerについての見識を得ようと辞めた上司の遺言で高いお金を出して外部にお願いするも目論見どおりの収穫とならず個人的負債となる。(なぜだ)

10~12月

チームを移動。AWSの社内有識者が少ないため相談をよく受けるようになった。

12月末AWSでやらかす。
リザーブインスタンス買い間違え(呆)
完全に自分のせいだが「ReservedInstance is evil」 というタイトルで記事を書きたくなった。

総括:

クラウドと初めて対峙した年だった。
クラウドの素晴らしい光の部分、そして闇の側面を知った。その闇を生み出す自分の知識不足が存分に発揮された1年だったと言えよう。

2018年はどうなるか。
たぶんDockerと対峙していく一年になるのか。
ドル円と対峙していく一年になるのか。(それはなる)
とにかく何でもアウトプットを増やす一年にしたい。そして早起きだ。

AmaWeb設計&開発ガイド第一章

AmazonWebServices設計&開発ガイドを読み始めた。
第1章から。
AWSのメリットや、オンプレミスに対しての優位性についての説明。
パトリオット法が失効していたのは知らなかった。
セキュリティ的には、もちろんそれなりの自社サーバールームよりAmazon様のデータセンターのほうが万全のセキュリティで安全だというのは耳タコな話ではあるけれど、責任共有モデル(OSより上のレイヤーは利用者が責任をもって管理する)で、
自分としては何回かやらかしているので、安全か、といわれるとうーんとなる。(まあ、自分が悪いんですが。オンプレでは起きないようなことも逆に起こる)
クラウドを使うことに抵抗なくなってくると、複数クラウドからのサービス選択が
今後のスキルになっていく気がする。
Azureは何だかコンソールが好きじゃない。
ということで、そろそろAWS Solution Architecht Professional を取得したいので、朝早く起きて勉強したいと思う。
難しいのは勉強じゃなくて、朝起きることだが……

fifa18キャリアモード

目標とか色々たてなきゃなーとか思ってた新年だけどここまでfifa18 switch版をやっているばかりで何にも考えてない 目標とか考えるのは苦痛。特に自発的でないときは。
目標とかキャリアプランとか怠い。

レジェンドレベルのfifaは難しい。
ニューカッスルでの成績
1年目:38試合10勝8分20敗 26得点51失点 16位
2年目:27試合8勝11分8敗 31得点35失点10位
途中解任された……ショックすぎる

エニアグラム簡易診断とかいうのやったら 「平和を好む人」だった。

エニアグラム 〜9つのタイプ 性格の特徴、世界観、動機、行動スタイル、エッセンス(本質的資質)

穏やかで、人に安心感を与え、気持ちをなごませる。人から見捨てられることを恐れ、平和や快適であること、また、一体感を好む。健全な状態で、平和で安定した心を保つ。周囲に緊張や葛藤がある場合は、公平な立場で辛抱強く仲裁に入る。想像力に富み、楽観的なヴィジョンをもつ。
性格のとらわれが強くなると、表面的にまわりに合わせ、葛藤を避け、実態よりもいい方に理想化して考えてしまう。頑固なまでに現状維持。自分は成長するに値しないと思いがちで、変化へ向けての積極的な行動を起こせない。怒りや不満を直接表現せずに、暗黙の抵抗で示す。不健全なとき、まわりの人から気持ちが離れ、問題に直面することなく、自分を麻痺させて、心地良い空想や嗜癖、フテ寝などに走る。抑鬱や無感覚になる。

平和を好む人がfifa18のCOMエフェクトにキレてコントローラー投げ飛ばしたりするんだろうか…… 謎である。

読書計画(冬)

年末に向けて、読みたい本や持っている本の棚卸。

持っている本

UNIXという考え方

UNIXという考え方―その設計思想と哲学

UNIXという考え方―その設計思想と哲学

名言集。

サーバーレスシングルページアプリケーション

クラウドデザインパターン設計ガイド

Amazon Web Servicesクラウドデザインパターン設計ガイド 改訂版(日経BP Next ICT選書)

Amazon Web Servicesクラウドデザインパターン設計ガイド 改訂版(日経BP Next ICT選書)

シナリオで学ぶパブリッククラウド Amazon Web Services 設計&開発ガイド

シナリオで学ぶパブリッククラウドAmazon Web Services 設計&開発ガイド

シナリオで学ぶパブリッククラウドAmazon Web Services 設計&開発ガイド

TCP/IPネットワーク ステップアップラーニング

[改訂4版]TCP/IPネットワーク ステップアップラーニング

[改訂4版]TCP/IPネットワーク ステップアップラーニング

ネットワーク基礎の再確認。

みんなのPython

みんなのPython 第4版

みんなのPython 第4版

Pythonがやりたくてとりあえず買った。

持っていない本

アメリカ海軍に学ぶ「最強チーム」のつくり方

ちらっと読んだ時に書いてあった「人が辞める理由」がとてもしっくりきたので ちゃんと読んでみたい。 ちなみに、軍艦を降りる5つの理由(アメリカ海軍)

  1. 上司から大切に扱ってもらえないこと
  2. 積極的な行動を抑えこまれること
  3. 意見に耳を貸してもらえないこと
  4. 責任範囲を拡大してもらえないこと
  5. 給料

Amazon Web Services負荷試験入門

読みたい。負荷試験自体に知見が足りないと感じている。

SRE サイトリライアビリティエンジニアリング

SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム

SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム

SREって最近よく聞く職なので。

Real World HTTP

Real World HTTP ―歴史とコードに学ぶインターネットとウェブ技術

Real World HTTP ―歴史とコードに学ぶインターネットとウェブ技術

Webを支える技術という本があるが、それに匹敵するぐらい良いらしい

Infrastructure as Code

Infrastructure as Code ―クラウドにおけるサーバ管理の原則とプラクティス

Infrastructure as Code ―クラウドにおけるサーバ管理の原則とプラクティス

あまり食指は動かないが、まあ。。

ピープルウェア

ピープルウエア 第3版

ピープルウエア 第3版

著者のデッドラインという作品が面白かったので。 こちらのほうが有名らしい。

Slackに通知するLambda

Slackにメッセージを飛ばすLambdaつくる。

cloudwatchのアラームをSlackに飛ばしたいと思ったので、 Lambdaを作ってSNSから飛ばす形で作ってみたいと思った。
slack-python-webhook(slackweb)を使って非常に簡単にできる。

lambdaのコード(Python3.6)

# coding: utf-8
import json
import slackweb

def lambda_handler(event, context):
  text = event['Records'][0]['Sns']['Message']
  print(text)
  hook_url = "https://hooks.slack.com/services/XXXXXX/XXXXXX/XXXXXXXXXXXXXXXXXXXXXXXX"
  username = "FromLambda"
  channel = "#channel"
  icon_emoji = ":face_with_rolling_eyes:"

  slack = slackweb.Slack(url=hook_url)
  slack.notify(text=text,
               channel=channel,
               username=username,
               icon_emoji=icon_emoji)

Lambdaファンクションの作成

# vim lambda_function.py
(コードを記載)
# vim requirements.txt
#
# cat requirements.txt
slackweb
# pip install -r requirements.txt -t ./
# zip -r9 func.zip *

作成したzipファイルを使ってLambdaを作成。

SNSからLambdaに飛ぶように設定する。 SNSが送信するJSONの中身は以下のような感じ。

{
  "Records": [
    {
      "EventVersion": "1.0",
      "EventSubscriptionArn": "arn:aws:sns:EXAMPLE",
      "EventSource": "aws:sns",
      "Sns": {
        "SignatureVersion": "1",
        "Timestamp": "1970-01-01T00:00:00.000Z",
        "Signature": "EXAMPLE",
        "SigningCertUrl": "EXAMPLE",
        "MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e",
        "Message": "Hello from SNS!",
        "MessageAttributes": {
          "Test": {
            "Type": "String",
            "Value": "TestString"
          },
          "TestBinary": {
            "Type": "Binary",
            "Value": "TestBinary"
          }
        },
        "Type": "Notification",
        "UnsubscribeUrl": "EXAMPLE",
        "TopicArn": "arn:aws:sns:EXAMPLE",
        "Subject": "TestInvoke"
      }
    }
  ]
}

cloudwatchアラームが発生すると
cloudwatchAlarm→SNS→Lambda→Slackという感じでメッセージが飛んでくる。

【Mackerel】まとめてホストを退役させる

Mackerelでは監視しなくなったホストを、「退役」させることで監視対象外とする。
退役させたいホストがいっぱいある場合、画面からポチポチやるのが面倒なので、
MackerelのCLIを使わせて頂いて、ホストを一気に退役させる。

MackerelのCLIツール mkr
https://mackerel.io/ja/docs/entry/advanced/cli

退役させるコマンド

mkr retire --force host_id

ホストIDを引数に渡してあげればいいので ホスト情報のJSONからjqでホストIDを取り出して渡してあげれば良い。

ホスト一覧を取得。3台のホストが登録されている。

# mkr hosts --service ServiceName --role RoleName | jq '.'
[
  {
    "id": "2XXXXXXXXXX",
    "name": "TST02",
    "status": "working",
    "roleFullnames": [
      "ServiceName:RoleName"
    ],
    "isRetired": false,
    "createdAt": "Mar 2, 2017 at 2:51am (UTC)",
    "ipAddresses": {
      "eth0": "172.20.XX.XX"
    }
  },
  {
    "id": "2XXXXXXXXXX",
    "name": "TST01",
    "status": "working",
    "roleFullnames": [
      "ServiceName:RoleName"
    ],
    "isRetired": false,
    "createdAt": "Mar 2, 2017 at 2:50am (UTC)",
    "ipAddresses": {
      "eth0": "172.20.XX.XX"
    }
  },
  {
    "id": "2XXXXXXXXXX",
    "name": "TST03",
    "status": "working",
    "roleFullnames": [
      "ServiceName:RoleName"
    ],
    "isRetired": false,
    "createdAt": "Mar 3, 2017 at 7:40am (UTC)",
    "ipAddresses": {
       "eth0": "172.20.XX.XX"
    }
  }
]

IDだけ取り出す。

# mkr hosts --service ServiceName --role RoleName | jq '.[].id'
"2XXXXXXXXXX"
"2XXXXXXXXXX"
"2XXXXXXXXXX"

いらんもんくっついてる

# jq --help
--raw-output / -r
output raw strings, not JSON texts
つまり "文字列" → 文字列 みたいに生なヤツを出現させる

--compact-output / -c
compact instead of pretty-printed output
コンパクトに出力してくれる!コンパクトって最高じゃん!とりあえずコンパクトだ!
# mkr hosts --service Practice --role EC2 | jq -r -c '.[].id'
2XXXXXXXXXX
2XXXXXXXXXX
2XXXXXXXXXX

よし。

老兵は死なずただ消し去るのみ。

# for ID in $(mkr hosts --service ServiceName --role RoleName | jq -c -r '.[].id') ;do mkr retire --force ${ID} ;sleep 1 ;done
   retired 2XXXXXXXXXX(ああ……)
   retired 2XXXXXXXXXX(ひどい!)
   retired 2XXXXXXXXXX(そんな……)

本当は引退したくなくても本人の意向を無視して有無を言わせず引退に追い込むので 使う時は気をつける。 なんかタクティクスオウガで部隊から隊員を解雇する時の場面が頭をよぎった。