@kotyのブログ

PythonとかAWSとか勉強会のこととかを、田舎者SEがつづります。記事のライセンスは"CC BY"でお願いします。

AWSのMFAができなくなって復旧した話

ある日突然Nexus5xが文鎮化した。当該端末にインストールしたGoogle Authenticatorアプリを使っていろんなサイトでMFAを使っていた。

ほとんどのサイトはリカバリーコードやSMSの認証といったワークアラウンドがあったため何とか復旧できた。 しかしAWSだけ何とかならなかった。

AWSでMFAできない場合、パスワードを忘れたときと同様に以下のフローに流される。

  1. rootアカウントに登録したアドレスにメールを送信
  2. 本文内のURLをクリック
  3. 開いた先でSMS送信
  4. SMSのPINコードを入力

自分は3で詰まった。正しい電話番号を登録していなかったのだ。(なので4は「たぶんそうだろう」レベルのものである)

どうやら最近はAWSアカウントを新規に作成する際にSMS認証があるようだ。しかし自分が何年か前に登録した際にはそんなものはなく、電話番号は適当に入力したままだった。なのでSMSを受信できない。 これは詰んだ。と思いきや、似たような状況になった方がいて、参考に電話サポートを受けてみた。

フォームに必要事項を入力しsubmitすると、30分ほどでPINコード入りのメールが送られてくる。続いて数分で電話が来る。電話の先の声は英語である。似たような状況になった方は日本語サポートへの転送を依頼したようだが、自分はそのままどうにかこうにかPINコードを言って、事なきを得た。電話サポートにより、MFAを無効化してもらえる。

率直に言って電話の向こうの方とは全くコミュニケーションにならなず、こんな簡単なやりとりもできんかと打ちひしがれた。。。 というわけで、英語学習のモチベーションが上がった一件でした。おしまい。

Googleは登録されている電話番号が正しいか定期的に聞いてきてくれるので、AWSもそうしてほしい。。。)

NHKラジオ 実践ビジネス英語 2018年 05 月号 [雑誌]

NHKラジオ 実践ビジネス英語 2018年 05 月号 [雑誌]

第2回「Linuxのしくみ」読書会参加記録

参加者は10名くらい。思ったより(?)1回目より減らなかった。

nseg.connpass.com

今回も関西より一名リモート参加者あり。zoomにて中継しました。

いよいよソースコードが登場しました。c言語は学生のとき以来でそもそもコンパイルの方法を忘れていた。。。

処理結果をグラフにプロットしてみて、プロセススケジューラの仕事っぷりを見る箇所がありました。 グラフの描き方までは載っていなかったので、その場で以下のサイトでざっくりプロットしてみました。*1

gnuplot.respawned.com

今どきならjupyter notebook上でmatplotlibを使ってグラフを書くんでしょうか。というわけでやってみました。

まずはanacondaをインストールし、仮想環境に入る。

pyenv install anaconda3-4.3.1
pyenv local anaconda3-4.3.1

anacondaだとjupyter notebookやmatplotlib等がひととおり揃っているらしい。すごい。 そりゃデータ屋さんがみんなanaconda使うわけです。

%matplotlib inline

import numpy as np
import matplotlib.pyplot as plt

data = np.loadtxt('data.csv', delimiter=',')
fig1 = plt.figure(figsize=(10, 5))

ax1 = fig1.add_subplot(1,1,1)
input1 = data[:,1]
output1 = data[:,0]
ax1.scatter(input1, output1)

fig1.show()

できたグラフがこちら。 f:id:kkotyy:20180427171636p:plain

次にy軸が進捗のもの

fig2 = plt.figure(figsize=(10, 10))

ax2 = fig2.add_subplot(2,1,2)
input2 = data[:,1]
output2 = data[:,2]
ax2.scatter(input2, output2)

fig2.show()

グラフはこちら。 f:id:kkotyy:20180427171728p:plain

系列ごとに色を変える方法がわからないし、軸が黒背景の上に黒文字で何が何だか分からない。。。取り急ぎこんな感じで。ちょっとづつ勉強します。

次回は連休明けです。 nseg.connpass.com

*1:約20年ぶりにgnuplotを使った

#nseg OSSライセンス勉強会参加記録

第99回NSEGを開催しました。

nseg.connpass.com

本編

テーマはOSSライセンス。@さんを講師にお迎えして講義していただきました。 資料はこちら。 当日の様子はこちらです。

また、thinkamiさんが詳細を報告されているのでそちらをご覧ください。。。

thinkami.hatenablog.com

OSSのライセンスについても勉強になったのですが、OSSコミュニティについてのお話もとても印象に残りました。 コミッターになることやプルリクを送るだけでなく、issueを登録することやplayストアで要望を書くことも十分OSSへ貢献するのだなと感じました。

LT

事前にLTを希望してくれる人が少なかったのでOSSライセンスのしばりはなくしましたが、4名中2名がOSSライセンスに関係した話をしてくれました。

私はOSSとは全く関係のない話をしました。。。

speakerdeck.com

地方だからこそできる農業アイディアソン、ハッカソンを開催してみたいです。

適当な幹事でしたが、盛り上がったので良かったです。可知さん始め参加された皆さんありがとうございました。

OS稼働中に/tmpの内容が消える現象への対処

追記:消されて困るものをそんな所に置くなというご意見はおっしゃる通り。今回は、~/var/run ディレクトリを作ってそこに移して対応した。

追記終わり

CentOS7およびAmazon Linux2 での話。ubuntu server でどうかは知らん。

OS再起動時に/tmpがクリアされる認識はあったが、OS稼働中に/tmpの内容が消える事象が発生した。

直接の事象は supervisord.confで

[unix_http_server]
file=/tmp/supervisor.sock   ; (the path to the socket file)

と設定しているときに、supervisorctl コマンド実行時に supervisor.sock が見つからずに失敗するというもの。 supervisord をrestartすれば済んでいたのでしばらく放置していた。

よくよく調べると、 systemd-tmpfiles-clean.timer なるsystemdのデーモンがあり、こいつが消している模様。

$ cat /usr/lib/tmpfiles.d/tmp.conf
#  This file is part of systemd.
・・・中略・・・
# Clear tmp directories separately, to make them easier to override
v /tmp 1777 root root 10d
v /var/tmp 1777 root root 30d

10日過ぎたら消されるようだ。

というわけで、このtimerをdisableにするか、消されたら困るファイルは別の場所に移す対応が必要。systemdにtimerなんて機能があることを初めて知ったのだった。*1

参考:

rskmt.hateblo.jp

qiita.com

*1:常識だろと言われないかビクビクしながら書いているが、みなさんこれくらいのことは把握して使っているんだろうか

長野市ごみ収集カレンダーを新年度版データに入れ替えた

play.google.com

現在10人もの方々にお使いいただいているこのアプリのデータを2018年度版に入れ替えました。お待たせしました。待ってませんかそうですか。

一年ぶりにアプリをビルドしようとしたらビルドできず、いろいろ試行錯誤して最終的にこれで直ったっぽい。

c# - Error executing task XamlCTask- Xamarin - Stack Overflow

分かるわけない。Xamarinのつらみを感じる、というかフロント界隈は片手間ではできないことを再確認したのでありました。

残課題として、

  • 前日の夜にも通知を送ってほしいと要望をいただいている
  • 月末になると通知を消してもすぐに通知が出てきてしまう

というものがあります。後者は謎で、以下のコードなんだけど

f:id:kkotyy:20180413090707p:plain

謎です。気が向いたら調べる。

あと、Google Assistantアプリの方も対応しないと。。

第一回「Linuxのしくみ」読書会参加記録

nseg.connpass.com

読書会の新シーズンが始まりました。いつもはネタ本を決めるのにアンケートを取るのですが、今回は仲間内で決めてしまいました。これまでとうって変わって低レイヤの話です。

いつもどおり@さんに加えて、@さんも有識者として大いにウンチクを語ってもらいました。

  • strace コマンド使ったことなかった。。。実際の障害調査では処理系固有のものだったりもっと高レイヤのツールを使うことがほとんどでしょうけど、こういった手段も覚えておくと良いですね。
  • 参加者は11名でした。すごい。このまま減ることなく続けられると良いのですが。
  • おひと方は関西からの参加でした。リモートでもROMなら問題なさそう。むこうの音声が聞き取りづらかったので読んでもらうのはちょっと厳しいかも
  • 次回からは参加する方は仮想マシンか何かでLinuxを動かせる環境を用意しておいた方が良い。「Linuxのしくみ」を学ぶんだし。。

昨シーズンは後半仕事が忙しくて全然出られませんでした。今回は皆勤したいです。

nseg.connpass.com

CloudFront+ALB+nginxで静的ファイルをserve という構成におけるtrailing slashのリダイレクト問題

メモ書き。

構成としてはタイトルの通り、CloudFront + ALB + EC2 + nginx。そしてnginxで静的ファイルをクライアントに返す、という構成。

このとき、 /hoge というリクエストに対し、 /hoge/index.html を返したい場合、 nginx はいったん 301 を返して、 クライアントを/hoge/ にリダイレクトさせる。このときCloudFrontを使っていない場合は、

www.example.com/hoge → www.example.com/hoge/

というリダイレクトになる。

ところが、CloudFrontを使っていると、

www.example.com/hoge → www-example-com-xxxxxxx.ap-northeast-1.elb.amazonaws.com/hoge/

のように、ALBのURLにリダイレクトがかかる。nginx視点で見た場合、 ALBのURLで動いているように見えるためと思われる。

仕方がないので、明示的にリダイレクトを書いた。

    if ($request_uri ~ ^([^.]*[^/])$) {
        return 301 https://www.example.com$request_uri/;
    }

もっと良い方法があるように思うが。。。

追記:HostヘッダをCloudFrontで通すようにすれば良さそう。