栗ブ

筋トレが好きなWebエンジニアのアウトプット。読書感想やクソポエムなど

入院生活を快適に過ごすためのアイテム達

入院になった

虫垂炎になり1週間入院する事になった。

胃と腹部右下が痛く、何度か病院に通ったら虫垂炎だと診断され即日入院となった。 初めての入院だし職場への連絡もあるし、心の準備が出来てないので明日から....と思ったが、即日です!と言われ腹を括ってそのまま入院

初日の荷物

着替え3日分位、スマホKindle、充電器。 個室に入れたら良かったが空きがないのと、部屋の分配には病院の都合もあるらしく6人部屋になった。

初日は物音が気になり、ほとんど眠れなかったが、耳栓・アイマスクを装備したら2日目からまとまった時間眠ることが出来た。 環境に慣れたせいもあるかもだけど、このアイテムも必要だなぁと感じた。

3日目にwifiMacを持参

外出許可が出たので自宅に郵送したレンタルwifiMacBookを持ち込んだ。 Macwifiがあると個人開発できるし、Kindle読めるし、Amazonプライム見れるしで、院内生活のQOLが格段に上がったのでインターネッツどっぷりな方にはマストでしょう。 レンタルwifiは申込んで翌日には届いた。使用する期間も大体で延長も可能らしく、入院が長引いても気にせず使えるのは良い。 7日間のレンタルでおよそ5000円ほど。

まとまった時間睡眠するために

相部屋だと、睡眠時間にイビキやら独り言やらデスクライトやらの影響をモロに受けるので、 遮音性の高い耳栓、アイマスクは必須でしょう。このアイテム2つのおかげでまとまった時間寝ることが出来るようになった。 入院した病院の枕は固く長時間ねるには辛かったので、好みの枕を持参するのも良いかと思う。

入院生活の快適アイテムリスト

  • wifi
  • ノートPC
  • 遮音性の高い耳栓
  • イヤホン
  • アイマス
  • 自分にあった枕
  • 電源タップ
  • 充電器
  • 使い捨てスリッパ

こんな感じ

Terraformとは

TerraformとAnsibleを使ってGCP構築〜というタスクを任されたが、使ったことがないので概要をまとめた

概要

インフラの構築、変更、バージョン管理を安全かつ効率的に行うためのソフトウェア

設定ファイルから実行計画をたて構築を行う。 設定ファイルを変更することで、Terraformはインフラの何を変更すると適応できるのか実行計画を立てる事ができる。

Terraformは以下のものを管理する事が出来る。

  • ローレベルの構成物(計算インスタンス、ストレージ、ネットワーク)
  • ハイレベルの構成物(DNS エントリ、SaaS 機能、など)
  • サービスをどのように構築するか、スケールするかといった知識を設定ファイルにおいてコード化(明文化)できるようにな

主な機能

  • Infrastructure as Code
    • version管理が出来使い回しも出来る
  • 実行計画 (Execution Plans)
    • 実行計画というのはTerraformに対して適用(apply)命令したときにどのように処理するかを定義したもの。 この計画があるため、Terraform がインフラを操作するとき、想定外の挙動をすることを防ぐことができる
  • リソースグラフ(Resource Graph)
    • 全リソースのグラフを生成できるので依存関係の無いリソースを含め、作成・変更する内容を並列化することができます。 そのため、Terraform は可能な限り効率的にインフラを構築するため、運用担当者は各々のインフラに対する依存度を確認できる
  • 変更の自動化 (Change Automation)
    • インフラに対して複雑な変更を適用することができる。実行計画(execution plan)とリソースグラフによって、 Terraformが何を変更して、何を実行しようとしているのか明確化できるのでhuman errorsを防ぐことができる

Terraformはchefとかansibleといったプロビジョニングとの違い

Terraformはchefやansibleと扱うレイヤーが違う。AWSを例にすると、ES2やS3の構築がTerraformで EC2上にgolangを入れたり、yum installで各種プラグインを入れたりするのがansibleなどのソフトウェアになる。 Terraformは裏でAWSなりGCPなりのAPIを読んで構成をしているだけ。なので、GUIで設定できることを設定ファイルを読み込んでモニョモニョできる。

インフラの状態を保持する

AWSなどGUIで設定したものが、どう変更されたのか知るすべが中々ない。 変更ログを逐一確認するのは現実的ではない。Terraformは状態を管理するテキストファイルで変更の差分を管理し、状態を把握している。

依存関係

例えばEC2インスタンスを作成する時に、作成APIを叩いた後、IP取得する場合とか完了するまで待たないといけないが、 IP取得して、その値を使ってモニョモニョするとかもTerraformは依存をよしなにやってくれる。

Terraformとその他ソフトウェアの比較

Terraformはリソースや事業者(provider)を抽象化する。これによって、AWS, GCP, Heroku, Akamai, オンプレ環境など、 様々な構成でも構築できる特徴がある。

実行計画、

Terraform は実行計画(execution plan)という概念で、計画フェーズと実行フェーズを分離する。 terraform planで実行計画をたて、terraform graphコマンドで処理手順の依存性を視覚化することができる。 実行フェーズでの処理内容は計画にそったものしか処理しない。

How To install

# Macの場合
brew install terraform

コマンドチートシート

# 初期化処理
terraform init

# 構築計画の出力
terraform plan

# 構築計画をもとに実行する (Y/n)
terraform apply

# 構築したサーバを削除する (Y/n)
terraform destroy

.tfの記法

  • .tfというファイルはterraform planやapplyで配下にあるファイルを全て実行する
  • varialbleパラメータで変数を定義できる
  • if, forなどを表現する記法が用意されている
  • main.tf、common.tfなど共通の
  • dev, prod, stgなどと環境に分けてtfを作成する場合は、それぞれでディレクトリをきってその中にtfを作る。こうする事で.tfstateファイルをそれぞれで管理できる
  • 変数宣言も.tfで管理する場合はvariables.tfという命名で管理するのがコミュニティで推奨されている (絶対では無い)
  • moduleという機能で各環境で共通する定義を.tfを置きmoduleディレクトリを作成しその配下に置く事で、その場所をincludeして読み込む事ができる この時terraform getコマンドを実行してからterraform applyする必要がある。そして、module内の変数はincludeする.tfから値をセットしないと使えないため注意

template Module

templateファイルを用意し、ファイル内に変数を宣言するとセットできる。 組み込み関数のfile関数から読み込み、varsディレクティブで値をセット。 読み込んだtemplateはrenderedで参照可能。

data "template_file" "deployment" {
  template = "${file("templates/deployment.tpl.yml")}"
  vars {
    env = "${module.common.env}"
  }
}

参考サイト

Ansibleとは

今更ながら業務で使用したのでメモ

概要

Ansibleとはインフラ構成管理ソフトウェアである。 Infrastructure as a Code(コードによるインフラ)として、Chef, Puppet, itamaeなどと同等のものである。 ソフトウェアはpythonで実装され、Yamlを使用しシンプルに設定を記述する事ができる。

公式ドキュメント

https://docs.ansible.com/

仕組み

Ansibleでは決まったディレクトリから情報を自動的に取得してくるため依存関係を理解しておく必要がある。 この仕組みがどのように動作するのか、しっかりと理解しておく事。

inventory

対象ホスト一覧が記述されたファイル。staging, productionなどとステージを分けてinventoryを用意する事ができ、 stg/inventory, prod/inventoryなどと管理できる。

Playbook

リモートサーバの状態を定義したYaml

Playbookの書き方

  • hosts
    • 対象ホストとなるグループを定義
  • become
    • root権限で実行するかどうか。デフォルトはrootユーザーになるため変更したい場合はbecome_userも定義する
  • become_user
    • root権限を実行するユーザー
  • vars
    • 変数の宣言。setupモジュールのようにAnsibleがデフォルトで宣言している変数もある。
  • vars_prompt
    • コマンドプロントからの入力値を変数にセットする。パスワードやデプロイリリースversionなどを入力値から受け取るなどする場合に使用する。 入力された内容を表示/非表示にするprivateオプションもある
  • tasks
    • roleで実行されるtask定義。 main.ymlが読み込まれ、残りのファイルはmain.ymlからincludeされる
  • with_items
    • 対象ユーザー一覧、対象ホスト一覧などのリストにまとめて繰り返し処理を行いたい場合などに使用する。1つ1つ似たようなタスクを記述する場合に簡潔に記述できる。
  • with_dict
    • with_itemsがリスト構造の繰り返しに対して、with_dictはマップ定義された情報を繰り返し処理する場合に使用する。
  • when
    • 特定条件のみ実行したい場合に定義するif制御構文。例: OSがCentOSだったら?、Ubuntuだったら?など。
  • block
    • 複数のタスクに同一条件をwhenで記述すると記述が冗長になってしまうため、blockを使用し条件判定を一箇所にする事が出来る。

Module

Moduleとはユーザーを追加する、ファイルをコピーする、httpd・redis-serverなどサービスを管理する、任意のshellを実行する、などの冪等性を持った操作をする機能。 こういった便利なモジュールがあらかじめたくさん用意されている。 どんなModuleがあるかは公式ドキュメントを読む事。

冪等性

Ansibleでは冪等性(べきとうせい)といって、リモートホストの状態を一定に保つためのポリシーが特徴として挙げられる。 原則としてPlaybookは繰り返し実行してもリモートホストの状態が変更されないように記述する

Role

RoleとはPlaybookで読み込むモジュール。Playbookは複数のRoleを読み込むことができ、 構成する内容を適切な粒度のRoleに分割してインクルードする形でPlaybookを構成するのが良い Roleには推奨ディレクトリ構成という指針がある。

Roleディレクトリ構成

Roleディレクトリの推奨構成は以下のようになっている。 この命名ルールに従う事でRoleを実行時に自動でtasks, varsなどがincludeされ実行される。 vars, defaultsは共に変数を宣言するものであるが、共通の変数はdefaultsに記述し、ここの変数はvarsに記述出来る。 同じ変数宣言がある場合は、varsが優先的に使用される。

filesはcopyモジュールを使用した際に、files配下に配置したファイルをパス指定なしにファイル名のみで利用できる。

roles/
 - {ロール名}/
   - tasks/
     - main.yml
   - vars/
     - main.yml
   - defaults/
     - main.yml
   - files/

Roleの実行

Roleを実行する場合は、tasksディレククティブではなくrolesディレクティブでRole名を記述し実行する。

Roleの構成

  • vars_files
    • vars.ymlなどに変数宣言を分割管理出来る
  • include
    • includeを使用すると、user_add.yml, copy_file.ymlなどとタスク定義を分割管理出来る。これにより汎用的なタスクを再利用出来る。 includeしたファイルに変数をセットする事も可能

Ansible Galaxy

Ansible Galaxyとは、Ansibleコミュニティによって色々なRoleが公開されているサイト

debug Module

debug出力用のmodule

- debug:
    msg: "{{ var1 }}"

ansible-playbookコマンドには-vオプションが存在する。 -vv,-vvvまであり、verboseが多いほど詳細な実行ログを出力する。

用語

  • group
    • inventoryはgroup化できる
      • 例: web, batch, db, web-resourceなど
  • all group
    • 対象グループ全て
  • :children
    • groupの中でさらにgroup分けができる。
  • targets.yml

参考サイト

【MYSQL】副問い合わせの結果をDELETEする

たまにしか使用しないだろうし、忘れる自信があるのでメモ

# 作成したテストデータのtokenが要件を満たしてないので、抽出して削除する感じ

DELETE FROM user_devices
WHERE user_id in (
  SELECT user_id
  FROM
  (
  SELECT user_id
  FROM user_devices
  WHERE
    CHAR_LENGTH(token) <= 200
  ) as tmp
)

MacでDashboardを有効にしてカレンダーとか時計を表示する

いつも設定忘れるので書いておく。

環境設定 -> Mission Control -> Dashboardから「操作スペースとして表示」を選択する

これで4本指スワイプでカレンダーとか時計を見れる

IT健保は退職後も2年間は任意継続できる

先日、勤めていた企業を退職してフリーランスのエンジニアとして生きていくことにした。 退職するとまず、年金やら住民税やら健康保険などの事務手続きをしなければならない。 勤めていた会社は充実した福利厚生やお鮨で有名な関東ITソフトウェア健康保険組合 (通称 : IT健保)に加入していて、健康保険はどうなるのかネットで調べていたら退職後も2年間は任意継続可能という事がわかった。

先日、手続きを行い無事継続加入する事が出来たので手順を書いてみる。今後、IT健保加入の会社を退職予定で、かつ任意継続したい方の参考になればと。

手続きの流れ

  • 公式サイトにある申請書をダウンロードし印刷する
  • 印刷した申請書を見本を見ながら記述する
  • 申請書を封筒に入れ切手を貼り郵送する
  • 保険証が送付されるまでお茶を飲んで待ちます
  • 初回の保険料を支払います (ネットバンクでの支払い可能)
  • 無事、継続されます

フローは以上。特に問題なく発送されて健康保険証が届いた。 注意点は退職した翌日から20日以内に手続きを行わなければならない。この期間を逃すと基本的には継続が認められていない。

注意点

  • 保険証番号は以前の番号から変更となる
  • 継続期間は2年間
  • 支払いが滞ると強制的に退会となる

メリットも大きく大した手間でも無いため、ちゃちゃっと手続きすると良いよ!という話でした。