もりはやメモφ(・ω・ )

インフラなエンジニアからSREへ

きたあず(JAZUG 北海道は札幌支部) #23に参加してきました

きたあず#23に参加してきました

本記事は北海道札幌で行われた JAPAN Azure User Group(JAZUG) の通称 きたあず に参加してきた感想をつらつらと書いたものです。

  • きたあず#23に参加してきました
  • セッション紹介
    • Kazumi OHIRA(@dz_) さんの “Azure でサーバーレス、 Infrastructure as Code どうしてますか?(再演・拡大版)”
    • Yasuaki Matsuda(@DarkCrash3)さんの Azure Event Grid 紹介(仮)
    • おやつ
    • LT: Takuya Shibataさんの Azure Dedicated Host と2019年10月1日からのライセンス改定の話
    • takayuki fuwa(@pacsolution)さんの AzureとAWSで始めるマルチクラウドのお話
    • Toshiyuki Hara(@TonyTonyKun)さんのAzure アーキテクチャ センターを読んで LINE BOT を作ってみた話
    • Yoshitomo Ago(@ag0u3)さんのなんか話す
    • まとめ
続きを読む

初めての音声入力を試してみたよ

初めての音声入力ーパチパチパチパチパチ!!!

というわけで本記事は基本的に音声入力を利用しています。

どうして音声入力を利用しようと思ったかと、そのモチベーションを記事にしていきたいと思います。

誰もが世界に対して自由に発信ができる今日、ブログであったり SNS での発信はとても重要なものだと認識しています。 しかしその一方で、なかなかこまめにブログを、あるいは SNS での発信を行っていくことは、大変なことだと認識しています。要するに筆不精っていうやつですね。 筆不精にはいくつか理由があると思っていて、最たるものが時間がない、あるいは面倒くさいというものだと思っています。

ではどうすればその面倒くささがなくなるのかという点を考えたところ、それはもう技術に頼るのが一番だという認識を持っていました。 有名なところでは"ひげぽんさん"であったり、 TwitterのTLに現れる優秀なエンジニアの皆さんが、所々で音声認識はなかなか良いよとの言葉を見かけたりしたので、興味は持っていました。

続きを読む

digdagのslaディレクティブを使い、ジョブの意図せぬ長時間実行に対策する

digdagを利用していて時おり困ることの一つに、何らかのジョブ*1がハングなどで長時間実行されてしてしまい、ジョブのキューが溜まり後続のジョブが実行されない問題があります。その対策として sla ディレクティブを利用した、という内容です。

  • digdagのsla ディレクティブとは
    • slaディレクティブのオプション
    • slaディレクティブのサンプル
      • durationによる経過時間の超過を検知するサンプル
      • timeによる終了時刻の超過を検知するサンプル
      • alert: true によるログ記録を行うサンプル
  • slaディレクティブを使用し、一定時間以上が経過したジョブを自動キャンセルする
    • digdag kill で止まるケース
    • digdag kill で止まらないケース
  • まとめ
  • 参考になったサイト

digdagのsla ディレクティブとは

slaディレクティブを使用することで、digdagのジョブが特定の時間を超えた、または経過した場合に特定の処理を実行したり、エラーを発生させることができます。*2

ドキュメントのslaについての記載 には Setting an alert if a workflow doesn’t finish within expected time とあります。

slaディレクティブのオプション

sla ディレクティブで利用可能なオプションは、2019/10/12現在で以下の通りです。*3

  • sla: parameter supports duration: HH:MM:SS syntax in addition to time: HH:MM:SS syntax.
  • sla: parameter supports fail: BOOLEAN and alert: BOOLEAN options. Setting fail: true makes the workflow failed. Setting alert: true sends an notification using above notification mechanism.

経過時間を指定する場合は duration 、終了時間を指定する場合は time を使い、終了時にfailさせるのか、現状隠しパラメタ的なアラート処理を実行するのかを指定できます。噛み砕くと以下のようになります。

  • duration か time のどちらかを選択する
    • 経過時間を指定したい場合は duration
    • 終了時間を指定したい場合は time
  • 超過した場合、終了時にfailさせて、 _error: の処理も実行したい場合は fail: true
  • 超過した場合、終了時にnotificateion.typeによる通知を実行する場合は alert: true *4

余談ですが time:duration を両方指定した場合は以下のエラーとなります、親切ですね。

error: SLA must be specified using either the 'time' or 'duration' option (config)

*1:digdagではWorkflowと呼ぶけどここでは一般用語として"ジョブ"とします

*2:SLA(Service Level Agreement)を定義する意味からのオプション名でしょうが、Timeoutとかの方が個人的には分かりやすいです

*3:このオプションの説明がRelease Noteにしかなくて分かりづらいので、ドキュメント修正のPRを出したりしました

*4:そもそもこのnotification.typeが現状ドキュメントにないのはなぜなんだろ

続きを読む

メル社さんのSREイベントに参加してきました

2019-09-11に開催された "mercari merpay SRE ✕ microservices platform meetup" の感想を簡単に。

mercari.connpass.com

3行で書くと以下の感想で、学びと刺激と持ち帰りが多い内容に始終圧倒されまして、参加できたことにとても感謝しています。

  • 技術力と視座の高さに圧倒される
  • 人材の豊富さに圧倒される
  • 会場クオリティの高さに圧倒される
続きを読む

Embulkでinputするzipファイルをデコードする2つの方法

Embulkではpluginにより様々な形式のファイルをimputとして扱うことができます。今回はzipファイルを解凍(decorde)する二つの方法を紹介します。

  • 利用の仕方
    • embulk-decoder-commons-compres
    • embulk-decoder-command
  • プラグインを切り替えた訳
続きを読む

PostgreSQLで2バイト文字が含まれるカラムかを調査する方法

これは

PostgreSQLで文字列型のカラムに 2バイト文字 が含まれるかを調査する方法です。まさかこんな調査が必要になるとは思っていなかったのですが、必要になったのでやりました。

  • これは
    • TL;DR
      • charの場合
      • varcharの場合
    • 検証
      • テストテーブルの作成&テストデータのInsert
      • char
    • varchar
    • 余談
    • 参考

TL;DR

以下をやるだけです。

charの場合

以下のようなクエリで 0なら2バイト無し です。

select count(*) from 対象テーブル
where octet_length(対象カラム) > 対象カラムの桁数;

varcharの場合

以下のようなクエリで 0なら2バイト無し です。

select count(*) from 対象テーブル
where octet_length(対象カラム) <> char_length(対象カラム);
続きを読む

AWXのバージョンアップをしました (2.1.0 -> 4.0.0)

f:id:morihaya:20190610004613p:plain
AWX4.0.0

  • TL;DR
    • 最初にバージョンアップについて調べました
    • サーバ
  • 手順
    • pipでtower-cliを導入(初回のみでいいはず)
    • tower-cliをセットアップ
    • AWXの情報をバックアップ(結局使わなかった)
    • PostgreSQLのバックアップ(結局使わなかった)
    • アップグレード
  • ハマったこと
    • 何も考えずにgit cloneしただけのブランチで作業を進めたらエラーで起動してこなかった
    • dockerのインターナルIPが変わったらしくてPostgreSQLのpg_hbaに引っかかっていたので多めに許可。

最新のAWXが4.0.0に対し、使っていたAWXが2.1.0と古いため、バージョンアップを行いましたのでメモ。 環境はシングルノードでdockerを利用してAWXを動かしていますが、PostgreSQLだけはコンテナじゃなくてノード上の物を利用しています。

TL;DR

要はこれをやっただけ。バックアップもとりましたが、結局利用していないです。 結果として2.1.0を利用している場合、DBさえあればスムーズにアップグレードができると言っていいのかもしれません(個人の環境ですが)

  • AWXとPostgreSQLのバックアップ*1
tower-cli receive --all > assets.json
pg_dump -d awx | gzip >  pg_dump-awx$(date +%Y%m%d-%H%M%S).sql
  • 最新版をgit pull*2
cd <任意の場所>/awx
git pull
git checkout -b 4.0.0 refs/tags/4.0.0
vim  installer/inventory
-> portやpostgresなどの固有設定を反映
  • 既存のAXWコンテナを停止

これはAWXに限定しない危険コマンドなので、手で一つずつ選択して止めることを個人的には推奨します。*3 私の環境はAWX専用だったので手順通りに行いました。

docker rm -f $(docker ps -aq)
  • 通常の手順に従いInstall
# Set the working directory to installer
cd installer

# Run the Ansible playbook
ansible-playbook -i inventory install.yml

*1:結局使わなかった

*2:cloneじゃないのは既存がすでにあるので

*3:でも手順にこうある

続きを読む