技術関連の覚書

案件でやったり自宅で試したことの覚書

ゴリラ.vim #6で喋ってきた

今回はゴリラ.vim #6 - connpassで喋ってきました。 vim(vi)はLinuxなどではおなじみのエディタですが、Macでも使えるようで周り見渡すとMac率が高かったように思います。

プラグインの話題が多く、自分のサーバーサイドでの使い方というのは少数派のようでしたが、主催のゴリラさんなどからも、馬鹿でかいファイルを開いてはいけないという知見が得られたなどの言葉をいただきありがたく思ってます。

ただ、やっぱり喋り慣れてないのでグダグダ感もあったかなと思います。

それと、時間的には余裕があったのでターミナル開いて実際にメモリがどれだけ使用されるかなどを見せればよかったかなと後になって思いました。

ちょうど今Goを使うことになったので今日知ったプラグインを使ってみようかなというのはこちらが得られた知見なので、互いに別分野の人たちがあつまるといろいろな情報交換ができる。

こうやって楽しみながら仕事にもいかせていくというのが勉強会のいいところだと改めて思った1日だった。

あなたのコンテナ運用大丈夫?コンテナセキュリティの考え方と対応策

あなたのコンテナ運用大丈夫?コンテナセキュリティの考え方と対応策 - connpassに行ってきました。 会場はDevelopers.IO CAFE | クラスメソッドです。

アプリで飲み物を注文、店内でウォークスルー(商品を取った分だけ自動決済される仕組み)のカフェですが、残念ながら閉店後でした。(4月までほぼ毎日行ってたのですが)

今回はAWS専業のクラスメソッド|システム設計・運用を技術支援www.creationline.comの合同企画

Aqua - Container Security, Serverless Security & Cloud Native Securityの話が中心ですが、2年くらい前にDocker meetup Tokyoで話してた人がいたけども、全て英語の回で内容がほとんどわからなかったやつでした。

懇親会でシールたくさんもらったのでPCに貼ってあります(みんなに配ってくださいとお願いされました)

f:id:boctok-ctpoba:20190717015324j:plain:w200
PCシール

AQUA以外のセキュリティツール(OSS)も紹介されていたので今度使ってみようかと思う。

おすすめはTrivy,Dockleらしい

他には、Google Cloudコンテナセキュリティ、NIST Application Container Security Guide、CIS Docker Benchmarkのドキュメントを読むことを勧められたのと、オライリーのKubernetesu Security 今日はちょっと無理だけど明日ちょっと読んでみようかと思う。

elasticsearch勉強会

第32回Elasticsearch勉強会「Elastic Stack 7.x」2019.07 #elasticsearchjp | Meetup

久しぶりに行きました。 気がつくとElasticsearchも7になってました。

なんか前に行ったときには6.1くらいだったような...

セキュリティ機能などがBASICに追加されるなど、無料で使える内容も増えたようです。

今回は内容が多かったこともあり、早口でちょっとついていくのが大変だったのでツイートをまとめてみました。

togetter.com

dockerのubuntuイメージでsystemctlを動かす

本来やるべきではないのですが、せっかくやったのでとりあえず残しておきます。

自前のサービスをDockerで動かすときの書き方

/etc/systemd/hoge.service を作成したあと

# systemctl enable hoge
# systemctl daemon-reload
# systemctl start hoge

という手順でサービスを動かす。

dockerの場合、色々と制限がかかっているため、そのままではsystemctlが動きません。

それを取り除く必要があります。 ちょうどSELinuxをdisableにするような感じになります。

docker run のときに --privileged オプションをつけて /sbin/init を実行することで制限が外れ/sbin/initが動くようになり、systemctlを実行できるようになります。

ほぼすべての制限を外してしまうので、部分的に制限を外したい場合は--device=/dev/xxx を使うほうが良いです。

$ docker run --rm --privileged -it -name hoge hogehoge:latest /sbin/init
## これと別に
$ docker exec -it hoge bash
入ったコンテナ# systemctl start service

と言うように実行するか、 ENTRYPOINTで /sbin/init && systemctl start service を実行できるようなシェルを起動させる

FROM ubuntu

COPY hoge.service /etc/systemd/
RUN systemctl enable hoge

COPY entrypoint.sh /usr/bin
ENTRYPOINT ["/usr/bin/entrypoint.sh"]
#!/bin/bash
exec /sbin/init
systemctl  daemon-reload
systemctl start hoge

dockerでnvidia

今回、仕事でdockerでnvidia環境を使うのでメモ書きとして残しておきます。

NVIDIAというのはグラフィックドライバでバージョンによる依存関係がかなり高めです。

構成としては、ubuntu16.04(AWS EC2インスタンス、p2.xlarge)nvidia-396+cuda9.1+cuDNN7.1.3.16

とりあえず、nvidia-dockerでbuild、runするようなのでDockerfileを作る。

ベースにしたのはnvidia/cuda:9.1-runtime-ubuntu16.04 必要なライブラリ等をapt update && apt install

あとは、実機(EC2インスタンス)で作った手順をそのままDockerfileに書いていきます。 →失敗

実機で運用していたときはサービスとして運用していたためsystemctlが起動できないといけません。 そして、systemctl が動くようにするためには/sbin/initが起動してなければいけません。

dockerでは1つのコンテナに1つのAPIが基本になるのでサービスにしていくつも立ち上げるということはあまりしないのでinitは動いていません。 initを動かしたい場合は--privilegedオプションをつけて起動します。

しかし、これで動かした場合やたらとCPUを食います1コンテナ起動して40%くらい、2つ起動したらフリーズしました。

20以上のコンテナを同時に起動する必要がある要件なので、今回の運用に適していません。 次の方法は、サービス化せずに直接起動する方法です。 xxxx.serviceファイルに起動の仕方が書いているのでそのまま実行してみます。 →失敗

syslogに書き込めないというようなエラーだったため、syslogdが動いていないためかと思い、再度--privileged オプションをつけて/sbin/initを起動してみる

そうすると、うまく起動するようになる。 しかし、これでは最初の目的が果たせずに、複数コンテナの同時起動が困難。 どうにかして/sbin/initを動かさずに動作させたい。

logの送り先の設定が変えられないかと思い、サービスの置いてあるディレクトリでgrep -iR "log" を実行。 AWSへの認証関係の設定ファイルを発見してそれを使ってCLoudWatchに送っているようだ。 このIDに見覚えがあったのは去年AWSでCI/CD環境を作る案件をやっていたので、もしかして、AWSCLIがないからかと思い、 apt install awscli してから実行。

今度はうまく行ったようだった。

明日、ちゃんと設定を直して実際に動作するかを検証します。

RPAの仕事をしてみた

今年に入ってからRPAの仕事をしてきました。

4ヶ月間に渡ってしてみた感想ですが、正直なところ面白いことをするわけではないかと思います。

というのも、RPAの作業領域がシステム間で人がやらなければならない単純作業、データをダウンロードしてExcelにまとめたり、ダウンロードしたデータを別のシステムにコピペするなどが主な仕事になるからです。

ほとんどの作業がシステムからダウンロード、別システムへのコピペ、Excelへいい感じにまとめるということになりました。

これだけで見るとたしかにつまらないことばかりをやってる感じです。

ただ、その作業が発生する理由や背景を考えることができると話が違ってきます。

いろいろなシステムが乱立して、経理はAシステム、人事はBシステムなどに分かれてしまっていることが原因なので、それを統合することで解消させることも多くあります。

しかし、大手企業の場合、それらが別のベンダーで簡単に統合できないという足かせもありこのような作業が発生している現実もあります。

次のシステムを作る上でどうすれば余計な作業を埋めることができるか、人が出勤していなくてもできる作業でも営業日に動かさなければならない理由など、業務の裏側が見えるとそちらのほうが面白くなってきます。

その意味で有意義な4ヶ月でした。

あまり深く書くと守秘義務に引っかかりそうな内容があるので吟味して書いていきたいと思います。

ソフトウェアテスト・品質勉強会

【初心者向け】ソフトウェアテスト・品質勉強会 Ver3.4【いまさら聞けないテスト・品質の基礎】 - connpass

こちらに夫婦で参加してきました。

テストとは何か?品質とは何か?やところどころ空欄のある資料を考えて、時々隣の人と話し合いながら意見を交わし合うものでした。

普段、開発者目線でテスト項目や手順を考えていて、新鮮だったのが 開発者のテストは動くことを確認するテストで品質担当者のテストはどうやったら壊れるかを考える。

異常系のテストってどうやっておかしくするか、つまり壊すかということならばそこからの発送は理にかなってる気がします。

その他に、ドキュメントについて 何人かで見て、おかしなところに気づけばそこにバグはなくなるということ。

例題にあった パスワードを④文字以上、⑫文字以内の英数字で、③分以内に④回間違えたら⑤分ロックがかかる。

このようなドキュメントが会ったとした場合、レビューしたときに 英数字が大文字小文字の区別があるのか パスワードを入力する際にマスクはするのか パスワードを間違えたときにどのようなメッセージ、またはエラー画面に遷移するのか など、色々な疑問が出てくる これらが仕様として追加され、想定されたテストケースとして反映されるけど、ここにはバグは存在しなくなるはずです。

そして、テストケースは考えていけば無限に出てきます。 だから、必要なテストに絞り込むことが必要。 この絞り込みは、境界値、0やnull血などの特異点で絞り込めます。

他に、状態遷移図、状態遷移表の併用で漏れを防ぐなどが紹介されていました。

テストというのは決して単純な作業(スクショ貼り作業)ではなく設計と同等に大事で頭を使う仕事であるということを再認識させてくれる話でした。