ようへいの日々精進XP

よかろうもん

2019 年 11 月 24 日 (日)

ジョギング

  • 博多天神をぐるっと 49 分, 10 キロ程
  • 右足の踵周りの痛みにビクビクしながら... 早く良くならないかな...
  • 午後から博多体育館で 60 分のエアロバイク, (懸垂 x 5 + 腹筋 x 30) x 3
  • ちょっと体を動かし過ぎた感じ

クイーンズ駅伝

www.jaaf.or.jp

www.tbs.co.jp

JP日本郵政グループの 1 区を走った廣中選手の走りがルーキーとは思えない堂々と走りで度肝を抜かれた. うまく育ててもらえればすごい選手になるんじゃないかと思った.

夕飯

  • 博多体育館から帰ってきてシャワーを浴びてビールを呑んだら猛烈に眠くなって 2 時間くらい寝てしまって気付いたら夕飯が出来ていた
  • チキンのソテー, ジューシーで美味しかった

CircleCI の setup_remote_docker を設定した時に留意すべきこと 〜 追記 〜

tl;dr

前のブログの続き.

inokara.hateblo.jp

上の記事を書いている時にはてっきり setup_remote_docker を設定した時には Docker in Docker を実現していたのかと思っていたけど, なんだか setup_remote_docker という名前で Docker in Docker は違うよなーとモヤモヤしていたのでも少し深堀りしたのでメモ.

あー, リモートの Docker を利用しているんだな

以下のような .circleci/config.yml を書いて調べた.

version: 2
jobs:
  build:
    docker:
      - image: docker:19.03.5-git
    steps:
      - checkout
      - setup_remote_docker
      - run:
          name: Test
          command: |
            echo '--- ホストのグローバル IP アドレスを確認 ----------------------------'
            apk add curl
            curl httpbin.org/ip
            echo '--- env で環境変数を確認 --------------------------------------------'
            env
            echo '--- docker ps が実行出来るか確認 ------------------------------------'
            docker ps

実行結果は以下のようになった.

f:id:inokara:20191124235911p:plain

お, 新しい UI になっている. それは置いといて...

--- ホストのグローバル IP アドレスを確認 ----------------------------
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/community/x86_64/APKINDEX.tar.gz
(1/1) Installing curl (7.66.0-r0)
  0%                                             % ############################################Executing busybox-1.30.1-r2.trigger
OK: 33 MiB in 27 packages
{
  "origin": "54.234.128.201, 54.234.128.201"
}
--- env で環境変数を確認 --------------------------------------------
... 省略
DOCKER_VERSION=19.03.5
DOCKER_TLS_CERTDIR=/certs
DOCKER_HOST=tcp://35.237.215.99:2376
CIRCLE_PROJECT_USERNAME=inokappa
... 省略
--- docker ps が実行出来るか確認 ------------------------------------
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

あー, DOCKER_HOST で全く異なるホストの Docker が指定されているんですな.

以上

メモでした. なんでも試してみると良いですな.

CircleCI の setup_remote_docker を設定した時に留意すべきこと

tl;dr

今更かもしれないけど, 実際に手を動かしてみて初めて遭遇したのでメモっておく.

何が起きたか

github.com

amiCtrl のインテグレーションテスト的なテストを docker-compose でやりたくて docker-compose.yml を書いた. もちろん, ローカルマシン (macOS 上の Docker マシン) ではテストは動いたんだけど CircleCI 上で実行した場合にはどうしても動かない... と調べていたら, ドキュメントに以下のように書かれていた.

circleci.com

but volume mounting and port forwarding do not work the same way in this setup.

ほう...ローカルマシンのボリュームをマウントすることが出来ないとのこと. これは, 全く意識していなかったけど, 留意が必要.

ちなみに, 以下は .circleci/config.yml を掲載.

version: 2
jobs:
  build:
    docker:
      - image: circleci/golang:1.9.7
    steps:
      - checkout
      - setup_remote_docker
      - run:
          name: Install docker-compose
          command: |
            curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` > ~/docker-compose
            chmod +x ~/docker-compose
            sudo mv ~/docker-compose /usr/local/bin/docker-compose
      - run: 
          name: Run Test Environment
          command: |
            docker-compose up -d
      - run:
          name: Run Install Dependencies
          command: |
            docker-compose exec amictrl_circleci make ensure
      - run:
          name: Run Test
          command: |
            docker-compose exec amictrl_circleci make test

ということで

ローカルマシンのボリュームをマウントしてソースコードやテストコードを Docker コンテナ上で操作出来るようにしたかったんだけど, CircleCi 上ではローカルマシンのボリュームをコンテナにマウントすることが出来ないので, コンテナをビルドする際にソースコードを含めるようにした.

FROM golang:alpine
RUN apk update && apk add git make bash gcc libc-dev python py2-pip jq dep && pip install awscli
RUN mkdir /root/.aws && mkdir /go/src/amiCtrl
ADD ./ /go/src/amiCtrl/
RUN printf "[dummy_profile]\n\
aws_access_key_id = AKxxxxxxxxxxxxxxxxxx\n\
aws_secret_access_key = zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz\n\
region = ap-northeast-1" >> /root/.aws/credentials

苦肉の策ではあるけど, 以下のようにローカルマシン上でも CircleCI 上でも意図した通りに動いてくれている.

以下はローカルマシンで実行結果.

$ docker-compose exec -T amictrl_local make test
=== RUN   TestVersionFlag
--- PASS: TestVersionFlag (2.21s)
=== RUN   TestStdoutList
--- PASS: TestStdoutList (3.62s)
=== RUN   TestStdoutCreate
--- PASS: TestStdoutCreate (2.99s)
=== RUN   TestStdoutCreateError
--- PASS: TestStdoutCreateError (2.93s)
=== RUN   TestStdoutDelete
--- PASS: TestStdoutDelete (3.91s)
=== RUN   TestStdoutDeleteError
--- PASS: TestStdoutDeleteError (3.59s)
=== RUN   TestStdoutDeleteNo
--- PASS: TestStdoutDeleteNo (3.70s)
=== RUN   TestStdoutState
--- PASS: TestStdoutState (5.08s)
=== RUN   TestStdoutJson
--- PASS: TestStdoutJson (4.88s)
PASS
ok      amiCtrl 32.913s

以下は CircleCI 上の実行結果.

f:id:inokara:20191124002300p:plain

そもそも, setup_remote_docker とは

circleci.com

上記のドキュメントではなんだか小難しく書かれているが, ビルド用の Docker コンテナ内で更に docker コマンドを利用出来るようにしたもの. Docker in Docker, Docker のマトリョーシカということだと思っている.

以下, setup_remote_docker 有り, 無しの違い.

version: 2
jobs:
  build:
    docker:
      - image: docker:19.03.5-git
    steps:
      - checkout
      - run:
          name: Test
          command: |
            docker info

setup_remote_docker を付与していない場合には, 下図のようにビルドは失敗する.

f:id:inokara:20191124082706p:plain

setup_remote_docker を付与している場合.

version: 2
jobs:
  build:
    docker:
      - image: docker:19.03.5-git
    steps:
      - checkout
      - setup_remote_docker
      - run:
          name: Test
          command: |
            docker info

下図のように docker info の結果がちゃんと返ってくる.

f:id:inokara:20191124082946p:plain

なーんだ, 普通の Docker じゃないかーと思って油断していると, 今回のようにホスト (こやつも Docker コンテナ) のボリュームをマウント出来ないという制約があるので注意が必要というお話.

以上

現場からの報告でした.

2019 年 11 月 23 日 (土)

ジョギング

  • 右足の踵の痛みを気にしながら山王公園を 45 分, 9 キロ程
  • 久しぶりで息がだいぶん上がって辛かった
  • 足の痛みはあまり感じなかったが, まだ完治というわけにはいかない

ブラ・ヒモリ

奥さんの体調が安定しているので, 久しぶりに博多の街をブラリ. 名付けてブラ・ヒモリ.

まず, 新しいランニングシューズを仕入れにキャナルシティに. ホカオネのリンコンを試し履き, 好みのカラーが売り切れだったのて他店舗から取り寄せ. その後, キャナルシティの中をブラリ.

博多の顔です。こんばんわ。

こんな写真を取りつつ, 博多署近くの鉄鍋餃子屋さんの前で鉄鍋餃子の行列に並ぶと見せかけておいてから焼き鳥屋さんに入って乾杯. 奥さんはまだ烏龍茶だけど. その後, 博多阪急に移動して〆のお寿司.

贅沢してしまったけど, 馬鹿話や夫婦コントでたくさん笑って楽しい時間を過ごすことが出来た. 奥さんも終始体調を崩すことなく楽しめたようで良かった!

2019 年 11 月 22 日 (金)

ジョギング

  • 引き続き, おやすみ...
  • あんまり良くなっている気がしない...どうしたもんだか

ギョーム

  • 引き続き, 検証環境の整備
  • メンテナンス作業の手順整理, いよいよメンテナンスが近づいてきたなー感
  • RDS PostgreSQL のパラメータグループの整理等
  • macOS Catalina から 32bit アプリケーションが起動出来なくなるという事実を突きつけられて驚いた (普段 32bit, 64 bit を意識して使っているわけではないけど)

香椎会

香椎会のメンバーと久しぶりに串カツモリスで乾杯した. なんか色々としゃべくり倒したけど, みんな家庭を持っていて, ダイナミックに変化している様子を伺えて「おおー」という気持ちになりまくった.

2019 年 11 月 21 日 (木)

ジョギング

  • 引き続き, おやすみ...
  • そろそろ走りたい

ギョーム

  • 検証環境の整備
  • 過去に整備したものが実は上手く動いてなくてゴメンナサイ案件
  • お昼から色々と訳あって自宅作業

訳あって

奥さんから突然の連絡でお昼から自宅作業. 奥さんの携帯電話が突然の故障, しかも, そんなタイミングでどうしても今日中に電話が必要な状況が発生するとかどんだけ持ってるんだろう. 本当にバタバタした一日だったが, そんな中でギョームが一波乱ありつつ, 意図したものが意図した感じで動いたのが良かった.

疲れた.

今日までの XPS 13 #デルアンバサダー五日目

tl;dr

ギョームでは MacBook Pro 15 インチを使い, 自宅では XPS 13 を出来るだけ触るようにしていますが, 色々と気になったことあったのでメモっておきます.

液晶を開けにくい

片手で開けようとすると指をひっかける面積がせまくて開けにくい.

矢印キーが押しづらい

押しづらいというか, PgUpPgDn に隣接しすぎているので, 気づいたら矢印キーではなく PgUpPgDn を押している

液晶が美しい

とにかく美しい. MacBook Pro よりも明るい感じがする. ちなみに, 貸与されている XPS 13 の 4K サイズなので表示スケールを 200% に設定変更している. 100% にしてしまうとあまりにもフォントが小さくなりすぎて非実用的.

f:id:inokara:20191120235927p:plain

以上

メモでした.

京都大学付属病院の医療事故報告書から学んだこと

tl;dr

朝, なにげなくインターネットを眺めていたら京都大学付属病院の医療事故報告書の URL が流れてきたので読んでみました. 自分自身, システム運用の携わっている身分であり, 報告書を書くことがたまにあるので, 医療事故の報告書ってどんな体裁なんだろうくらいの軽い気持ちで読み始めたのですが, 学びが多かったのでこちらにも紹介させて頂きます.

炭酸水素ナトリウム誤投与による急変死亡について

結果として患者さんはお亡くなりになり, ご遺族の方にとっては本当に辛いことになってしまったことを心からお悔やみ申し上げます. しかしながら, このような文書が世の中に出て来て, これを多くの医療従事者の方々が真摯に受けとめ, 二度とこのような事故が起きないようにして頂きたいと思います.

事故経緯

  • 京都大学付属病院での医療事故
  • 腎機能障害を持つ患者さんの CT 検査の際に本来投与すべき薬剤の 6.7 倍の濃度を持つ同一成分薬剤を投与してしまった
  • 患者さんから不調を訴えについて, 造影剤のアレルギー反応を気にするあまり, 訴えについては静観してしまう
  • 結果, 患者さんは心停止となる
  • 心臓マッサージを施すも肋骨骨折に伴う肺からの出血
  • 患者は抗凝固剤を投与されているにも関わらず, 中和剤を投与されることなく出血が続き, 最終的には亡くなられた

問題点

  • CT 検査に際して, 腎機能障害を持つ患者さんに対する対処が, 本来行うべきフローに則って行われていなかった
  • 本来は検査前に生理食塩水を投与すべきところを炭酸水素ナトリウムを投与した (炭酸水素ナトリウム自体は外来の CT 検査患者には利用される)
  • 炭酸水素ナトリウムを投与するにあたり, 同じ炭酸水素ナトリウムでも濃度の異なる製品が存在しており, 誤って高濃度の製品 (以後, メイロン) を選択してしまった
  • CT 検査後にメイロンを全量投与と誤った指示を出してしまった
  • 心停止を起こした後, 心臓マッサージを行い心拍は再開したが, 肋骨骨折に伴う出血, 緊急対応を施すも, 患者には抗凝固剤 (血を固まりにくくする薬) が投与されていることを把握せずに対応を続行, 出血が止まらない状況が続き, 結果, 死に至った

教訓

  • 本来行うべきフローには何かしらの理由があるので, フローを変更する場合には, その影響範囲について細心の注意を払って検証した上でフローを変更すること
  • 検証が十分でない場合にはフローは変更しないこと
  • 似たような製品や似たような手法がある場合, 適切に選択出来るように各々の特徴や手順を明確にし, 緊急の際でも適切な選択が行えるようにすること
  • 引き継ぎや申し送りは口頭だけではなく, しっかりと文書として残すこと
  • 経験や憶測を鵜呑みにせず, 文書や資料にしっかり目を通し, 常にそれが正しいのか疑問を持つこと
  • また, 文書だけを鵜呑みにせず, 自らの目でメトリクスや状況を確認し, 判断の材料とすること

まとめ

  • 医療事故の報告書を読んだ
  • 本来のフローから逸脱し, 十分な準備や引き継ぎ等が行われないまま事態が進行し, 結果として事故は発生するということを痛感した
  • これは, 医療の現場だけではなく, システムの運用でも同じことが言える
  • ここで書いた教訓を忘れずに日々のシステム運用に携わっていきたい

2019 年 11 月 20 日 (水)

ジョギング

  • 引き続き, おやすみ

ギョーム

  • ECS のサービスタスクを操作するだけのツールをリリースした (使うのは社内で自分くらいだけど)
  • YAMAP の各種サービスに PR を出していたのをマージしてもらったので確認してリリース準備
  • そのあとは WordPress と闘っていた
  • CloudFront ディストリビューション追加

夕飯

奥さんが頑張って速水もこみち料理本から回鍋肉を選択して作ってくれた. なかなかの出来で美味しゅうございました.

2019 年 11 月 19 日 (火)

ジョギング

  • 引き続き, おやすみ
  • 右足の踵, アキレス腱から踝に至る箇所

以下のブログが参考になった.

sub3coach.com

外踝が痛いパターン. なるほど, なるほど.

健康診断

朝から健康診断.

  • 身長体重, 特に問題無し
  • 視力, 聴力, 年齢相応
  • 腹囲が 68 センチはここ数年では最も少ない数値かも
  • キャメラはそこそこキツかったけど, こちらも目立った異常は無かったので良かった

ギョーム

  • 健康診断から戻ってきて細かな作業
  • WordPress がまた少し嫌いになった... というのは冗談で WordPress が悪いのではなく運用フローに問題があるのかなと思ったりしている

今日の XPS13

  • 引き続き, 四日目もあまり触れなかった
  • やっぱ, 液晶を開け辛いような気がする, これは何度やっても MacBook Pro のように開けられない
  • ConEmu と fish を導入して通常使っている環境にできるだけ近づけようとしている

fitbit charge2 のバンドを変えた

Fitbit Charge2 のバンドが壊れたのでアマゾンで格安バンドを購入して付け替えた。

  • 購入してからずーっと使い続けていた fitbit charge2 のバンドが壊れたので Amazon で適用なバンドを発注
  • 届いたので早速付け替えてみた