おふとんの中から

その辺に転がってるエンジニアの備忘録

Podcastに出演した話 #しがないラジオ #成し遂げたいam

ゆいなです。

先週1週間で出させていただいたpodcastが公開されたので、
纏めてにはなりますが振り返っていきたいと思います。

どのPostcastに出演したの?

きっかけは?

しがないラジオ

しがないラジオの出演のきっかけはTwitterのとあるつぶやきでした。

このツイートからやりとりをスタートし、5月のGW明けに収録することに。

#成し遂げたいam

成し遂げたいamの出演のきっかけは、沢渡あまねさん(@amane_sawatari)から送られてきた1通のDMでした。

f:id:yu1056y:20190625210235p:plain

この後からやりとりし、こちらも5月に収録することに。

きっかけっていろいろあるもんだなぁ・・・

出演してみてどうだった?

DBとダムの話を中心にこれまでの経歴などをお話しました。

なかなか考えていることを言語化するのは難しいな・・・というのが強い印象。
Podcastでの話し方の難易度の高さも感じました。
私の話し方として結構被せにいってしまう部分もあるので、そこの改善をしないといけないなと思った次第。

また、今後の動きもいろいろ考えて、どんどんブログやTwitter言語化していこう。
そして、動ける範囲から動いていって広げていこうという意思を固めました。 Podcastっていう言質あるし

DBの勉強会を主催してみた #aichi_db #geekbar

ゆいなです。

5/13に初めて勉強会を主催したので、いろいろと振り返っていこうと思います。

どういう勉強会?

DB勉強会 in 愛知

趣旨としては・・・

  • 愛知でDBを中心に据えた勉強会ってないよね?
  • geekbar行きたいけどイベントないと開かない・・・
  • ならgeekbarでDBの勉強会やればいいんじゃね?

単純な発想で見切り発車的にやってみました。

RDBでもNoSQLでもDBに関わることならば何でもOKという形テーマを設定することで - DBというゆるいテーマによって全体の参加の敷居を下げる。 - ベンチャーやスタートアップの方の参加が多く、SIer等だとどうしても参加しづらい勉強会の敷居を下げる。 という意図がありました。

どんな感じだった?

勉強会開催をTwitterで書いたところ、1名LT的な感じで話をしてくれるとのことだったので、今回は自分も話す前提のLT大会ということで・・・

ここからはLTのご紹介。

MySQL 8.0の薄い本を作ったことをきっかけに
Alibaba Cloud Table Storeを試すことになった話 by hmatsu47さん

薄い本をgithubで公開しているが、閲覧数等の情報が7日間しか保持されないから、アリババクラウドを使って保持するようにしてみた的な感じの内容。 アリババクラウドパクリリスペクトが強い。

ちなみに当日MySQL8.0の薄い本の持ち込みがありましたw

PostgreSQLで位置情報データベースが便利な話 by はじめさん

PostGISを使って地理情報を使う方法についてお話しいただきました。 なんか楽しそう。ちょっと使って日本で一番マクドナルドから遠い場所とかやってみたいww

ORMでDBLINK使ってみた by ゆいな

私です。 DBLINKをORMで使ったらすごい辛かったって話です。

https://speakerdeck.com/yuina1056/20190513-orm-dblink

NoSQLとMongoDBについて by しぐまさん

NoSQLでもmongoDBを中心にお話いただきました。 途中で出てきたGraph Databaseってなんだよ・・・ってなってました。 mongoってスキーマ定義して使うっていう形だからNoSQLって初心者でも割と触りやすかったりする。

何がよかった?

募集をしてみて、実際に蓋を開けてみたら、他に2人LT枠で申し込みしていただけたのはとても嬉しかったです。

LT終了後はそのまま懇親会的なノリでやってみたのですが、飛び入りのLTがあったり、集合知への質問みたいな形でディスカッションできたり…
逆にテーマがあることで雑談も盛り上がったかなと思います。 また、第二回の開催の希望もいただけたことが次へのモチベーションになりました。

まだ予定は未定ですけどね!

反省点は?

小規模とはいえ、運営初めてであったがためにgdgdになってしまったことは反省点ですね・・・。

先にこれだけは準備しておくべきでした。

  • 趣旨説明のスライド
  • LT紹介
  • Twitter実況用のハッシュタグ

    まとめ

    誰かが動かないと始まらない。
    まずは第一歩を踏み出すことはできましたが、ここから少しずつ広げていけたらなと思います。

sorceryを使用した二段階認証を実装した

ゆいなです。

仕事でRailsの認証周りを触ったのですが、あまり見ない組み合わせを使ったのでちょっとブログに書いておこうと思います。

Sorceryに二段階認証を追加する

Sorceryを使っているRailsのシステムに二段階認証を実装してみました。 言ってもとりあえずなんだよってなりそうなので、出てきた言葉からちょこちょこと。

Sorceryって何よ?

Railsで認証周りを取り扱うGem。
https://github.com/Sorcery/sorcery

認証系だとdeviseとかが有名で実装例も多々あるのですが、 sorceryはあんまり使われているところを見たことがないです・・・。

二段階認証って?

通常のログイン処理にプラスした認証のこと。

メールなどで受信して入力するワンタイムパスワードのようなものや、
google authenticatorのようなQRコードをベースにしたコードをアプリケーションに読み込ませてコードを生成するものもある。

どうやって実装したの?

google-authenticator-railsを試してみた - MoneyFoward engineers blog
これを参照しつつ、実装はdeviseで実装しているブログを参考にしながら書きました。

サンプルコードはこちら。
https://github.com/yuina1056/sorcery_twofactor_sample

二段階認証の実装

二段階認証用に別途コントローラーを作成しました。
多分動きはコード見たほうがわかりやすいかな・・・

動作としては、アドレスとパスワードでの認証から二段階認証に情報を渡し、二段階認証時にログイン処理を行う形。 sessions_controllerからuser_mfa_sessionへは一時セッションを使ってアドレスとパスワードを渡してます。

また、初回ログイン時のみQRコードを表示させ、2回目以降は入力欄のみを表示させるようにしています。

特に有効化とかの処理を入れていないのは、この二段階認証を実装したアプリケーションが社内アプリケーションだからw

それにしても、生成されるコードも少なくてsorceryでログイン処理書くとシンプルになりますね。

JAWS DAYS 2019に行ってきた #jawsug #jawsdays

ゆいなです。

なかなかブログに手が出ず、前回のlambdaの話ももうちょい続きがあるのですが、次回にでも・・・

今回は、2/23に JAWS DAYS 2019 に行ってきたので、ちょっとブログにでも。

JAWS DAYS 2019って何よ?

AWSのユーザーグループであるJAWS-UGのイベント。 AWSを使用したいろいろなセッションがたくさんあるよ!!

何の話聞いてきたの?

主にDB周りの話と、今の仕事に関連する話を聞いてきた感じ。 時系列で、Twitterの内容をベースに補完して書いていきます。

メディアによるAI活用(時事クイズの生成と高校野球戦評記事の自動生成)

メディアでのAIが気になったので、ちょっと聞いてみた。

米朝首脳会談米朝を落語家で類義語にしてしまったやつ

内容的にはIT企業の名前が並んでほしかったけれど。。。
これはソフトバンクをクイズの答えとしてしまったから仕方ない気もする。

記者さんの記事を並べて見てもよくわからないレベルでびっくり。 ここまでAIの自動生成でやれるんだ・・・

機械学習を自動生成で活用しようと思うと、ある程度のテンプレートをベースにどのテンプレートを使うかを機械学習で判断させる感じ。

RDBリファクタリングと異種間DB移行の戦い – Amazon DMSを使った止めずにリファクタリングする手法

DB移行の話で、元々聞きたいと思っていた内容。

テーブル分割を実際に行っていくときにタイミングをトリガー設定。
そういえばそんなことできたなぁ・・・と思い出したやつ。

今回の話として、MySQLからPostgresに移行。
この理由が、トリガーの設定個数を考えたときに、MySQLだとトリガー1個しか設定できなくて1SQLで2つのupdateをなんとかするつらみ。
Postgresの複数個設定できるならPostgresでやればいいじゃんって発想。

DMSって内容柄、論理かつ非同期レプリケーションで扱うのすごい怖いな・・・と思っていたので、どうやって使ったのかすごい気になるゆいな。

どのDBを見るようにするかをうまくAPI化して切り出したから非同期レプリケーションでも気にならないようにできたのねと納得。

そしてMySQLあるあるな治安の悪いデータzerodate('0000-00-00')
postgresに入れたときにエラー起こすんですよねこれ・・・

zerodate以外も想定外データは移行なら出るのはあり得るので、その部分は監視しつつ直していく。

EC2からKubernetesへの移行をセキュリティ/モニタリングから考える

freeeさんのセッション。

freeeさんの場合、匿名化が難しい画像データを持つ必要な出てくるので私からするとガクブル・・・。

止められる場所で事前に止める。セキュリティ的には一般的な考え方ですね・・・。

freeeさんの場合、EC2運用ではWAF,DeepSecurity,GuardDutyで検知させているみたい。

この後のk8s部分はよくわからなすぎてメモも取れてません・・・。

数十億レコードのRDS MySQL5.6を1週間程でAurora MySQL5.7へ移行した時の話

DMSの話ではなかったけどね!!!!!

サービスの内容柄、絵文字を保持する必要があるけれど、DMSでdumpすると、絵文字がつぶれてしまう。 後になって絵文字周りの4バイト文字も問題なく抜けるようになったようです。

最初はmysqldumpでやろうとしていたが、遅いので構成とデータは別で移行する動き。 データはselectして取得したデータをspritしてファイル化。古典的な方法だけれど、ある意味安定してやれそう。

今回の移行はスキーマ統合も必要。またDB依存のダウンタイムを少なくするためのレプリカを使用した3段階レプリケーション

間違いない。

医療ビッグデータAWSとオンプレ基幹システムで共存運用

完全にお仕事周りの話だったので聞いてきました。

現在だと医療情報を扱うために3省3ガイドラインがあり、それをAWSでどう解釈するか書いてある感じ。

日本の医療情報ガイドライン

  • 医療データのクラウド化を進めるために・・・
    • 監査のために医療データとそれ以外の情報を明確に分けておく
      • クラウドを誤解している取引先がどうしても多い。そのため物理的なデータセンターの監査をやりたがるため。
    • 匿名加工済みデータはS3へ→データレイク構築
    • Direct Connectで直接S3に置く動きをしている。 →データはネットワークに出さない。

    • データレイク f:id:yu1056y:20190227004412j:plain

      • Glue f:id:yu1056y:20190227004420j:plain
        • Athena,Redshift
        • クローラー未使用
        • Job→Parquet 分割数でのパフォーマンスに偏りが出ることがある。
    • RedShift f:id:yu1056y:20190227004426j:plain

      • looker(BI)→傷病分類等をわかりやすくする

    f:id:yu1056y:20190227004428j:plain insightwatchでセキュリティ周りをやっている →項目の取扱ポリシーが怪しいから適宜有効無効を切り替える。

完全にお仕事モードでTwitter書く暇なかったんや・・・

我々はこうして「AWS本」を書いた! 〜十人十色〜

AWSの本を書いている方々のパネルセッション。

すいません最近便秘気味で・・・

クラメソのブログを書いていた方のマサカリ対処法が慣れだったのはびっくり。
でも、そういうもんなのかなとも思う。

どうだった?

とても刺激を貰えました。
今まで大きな技術系イベントも行けていなかったので、それを考えると新たな体験ばかり。

私弱いなぁ・・・。もっと強くなりたいなぁ・・・。

機運がすごく高まってやりたくて仕方がないので、どうやってやろうか考えてます。 多分初回は4月かな。会場をどうしようかとかいろいろ。

lambdaがRubyで動かなくて夜も眠れなかった話

ゆいなです。

先日まで頭を悩ませていたことが解決したので、ブログにしておきます。

何に頭悩ませてたん?

AWS lambdaが動かない...という事象。
先にやった方のQiita通りにやっても動かないなんで・・・?と1週間ほどずっと頭を悩ませておりました。

ところで何をやろうとしていたの?

以前Qiitaに書いた、SlackBotで電車の運行情報を通知してもらうrubyで書き直し、AWS lambdaに載せようとしていました。

書き換えたコードのgithubはこちら→ https://github.com/yuina1056/TrainInfoBot/tree/master/rb/lib

書き換え自体は終わっており動作確認もできていたので、後はlambdaに乗せるだけの状態にしていたのですが・・・

何が起きたの?

単純にlambdaにzipでアップロードしても動かない・・・orz

slackのAPIを扱うので、いくつかの外部gemを使用していました。
bundlerでパッケージした内容を全部zipファイルに入れても動かない・・・うーん・・・・

原因は、フォルダごとzipファイルにしていたためでした。 https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/ruby-package.html

zipコマンドでファイルのみを圧縮してアップロードしたらいけました。

結論

ちゃんとリファレンスは読もうな!!!!!!!