Slackの個人活用テク - 通知チャンネルの古いメッセージを自動的に削除するスクリプトをAWS Lambdaで動かす

2019年の初投稿ですっ!
私は個人用Slackワークスペースに様々な通知を流しています。

  • Googleカレンダーの予定
  • ファイルバックアップ完了の通知
  • 動画エンコード結果の通知
  • CircleCIのビルド結果の通知
  • SharedBoxによるメール転送の通知

などなどです。

しかしながら、個人用の通知チャンネルの場合、
過去の通知情報を保存しておく必要はありません。
不要な通知情報が溜まりすぎて無料で検索できる1万メッセージの上限を
越えてしまうことのほうが不便だと思います。

ですので、通知チャンネルに投稿された過去のメッセージを
削除するLambdaファンクションを作成しました。

github.com

ポイントをピックアップします↓

Slack Appでトークンを発行して、APIを呼び出す

今回、レガシートークンは利用せず、Slack Appでトークンを発行しました。
下記の記事がよくまとめられています。 qiita.com

APIを利用したいだけでしたので、今回は「sandbox」という名前で
Slack Appを作成し、必要なPermission Scopeを付与しています。
f:id:yasay:20181231234358p:plain

API実行のために付与したPermission Scopeは下記の通りです f:id:yasay:20181231235151p:plain

Lambdaの処理内容

やっていることはシンプルです。

  1. LambdaやCloudWatch eventsに設定されている変数を読み込む
  2. "channels.history"APIを利用して削除対象メッセージを取得する
  3. "chat.delete"APIを利用してメッセージを削除する
  4. "chat.postMessage"APIを利用して処理結果を通知する

処理結果の通知イメージ

f:id:yasay:20190101000950p:plain

ソースコード

Epoch Timeの取得処理

Slackのメッセージを取得する時に、Unixタイムスタンプで指定します。
Python3では、下記のようなコードで、Unixタイムスタンプ(Epoch Time)を取得できます↓

コード全貌

以上です!
2019年も良い年になりますように!🐗㊗️

読書感想「Team Geek」

f:id:yasay:20181225183254p:plain:w200
「Team Geek」という書籍を読了しました。

www.oreilly.co.jp

「Team Geek」はプログラマが実践すべきチームでの
コミュニケーション手法を明確に定義しています。

尚、HRTについては以前から知っていまして、
私はここ数年、なるべくHRTを実践するように取り組んできました。
今回、HRTの出典元となる本書を手に取る機会が訪れました。

あくまで個人的な読書感想になりますので、
結構ずけずけと感想を述べていきますよ↓

読書感想

ハート(HRT)はお互いが意識しないと成立しないよね。

そもそもの話、お互いがハート(HRT)の意識を持たないと成立しないと思います。

そういえば「GNUの心あるコミュニケーションのガイドライン」も発表されてましたね。
gigazine.net

例えば、片方が謙虚な姿勢を見せたとしても、
相手の謙虚な姿勢を見て、ここぞとばかりに自分の優位性をアピールする場合がある。

人生にはライフステージがある。

結婚・子育て・介護など、仕事以外にも重要なタスクをこなしながら、
私たちは仕事でのやりがいも見つけていく。
ライフステージによって、HRTで実践できる事柄も
限られる場合があるのではないか。

今だかつでHRTを意識した上司に恵まれたことがあっただろうか?

いや、ない。
私達はいつでもコミュニケーションの混沌にいる。

HRTを意識して仕事している人は稀だということ

この本を読んだ日本人なら誰だってそう思うんじゃないかな。
そもそも多重請負構造を構成している日本のSIerの全員が、
HRTを意識しているわけがない。下請けになればなるほど、
職業プログラマがほとんどを占めているだろう。

だからこそ、私達はHRTを理解したチームを作り上げる必要がある。

組織としてHRTを浸透させる取り組みを行なっていないならば、
私たちは今の組織に居続けるべきか考える必要がある。

意外にも出版されたのは数年前という若い書籍

もっと昔に出版されれば、Teem Geekの考え方も
浸透していたかもしれない。というか、浸透してから就職したかったなぁ。
いつやるか。今でしょ。」のフレーズが出てくる辺りまさに最近。

忘れてはいけないこと

三本柱

1. 謙虚(Humility)

常に自分を改善する。

2. 尊敬(Respect)

心から相手を思いやる。

3. 信頼(Trust)

相手が正しいことをすると信じる。

心の中にいつでもミッションステートメントを持つ

そうすれば、私達の行動はぶれないだろう。
プロジェクトのミッションステートメントとして定義されれば、なおよい。

チームが全て

逆に言うと、チームで開発に取り組まず丸投げの会社は非常に好ましくないね。

私は私の書いたコードではない

プログラミングはスキルなので、練習すれば向上する。
自分の性格や人間としての価値が攻撃されたと思わないように、
全員との意識合わせが必要なんだ。

早い失敗・学習・反復する

だからこそ、しくじり話として共有することが重要だと認識できる。

パフォーマンス重要

パフォーマンスを軽視してはならない。
ユーザーが利用する時のパフォーマンスが改善すれば、
利用頻度が増えるのは必然だ。
ユーザーとの信頼を構築するステップにもなるはず。

総括

心から思いやれる人と一緒に仕事したいです。
本書は何度も何度も読み返すことになると思います。
もっと人間としても成長したいなぁ。

以上ですっ!

ALEXA DEV SUMMIT Tokyo 2018 行ってきました!レポート

f:id:yasay:20181217170513p:plain alexadevsummittokyo.splashthat.com

行ってきました!ALEXA DEV SUMMIT Tokyo 2018!
Amazon Alexaが主役の開発者向けイベントになります!
レポートしていきます!

セッションレポート

13:00 - 13:50 Alexa最新テクノロジーアップデート ~ AWS re:Invent 2018 recap ~

  • 北米ではMyPetRocが人気
    f:id:yasay:20181217223301j:plain:w400
  • re:Inventの紹介
    • セッションの移動にシャトルバスwww
    • セッション数2100www
    • 桁が違いすぎるwww
  • 北米ではゲームが人気
  • TIPS「サウンド効果」
    • 短い時間で効果的にメッセージを伝えることができます。
    • クイズの正解に言葉ではなくサウンドを利用
    • イベントの違いにサウンドを活用
    • SSMLによる会話の間に音声を挟む!
  • 最新アップデートの紹介
    • PollyをAlexa Custom Skillで利用できるようになった
      • Alexa SkillでPollyを使うと無料です!
    • SMAPIを使うためのASK CLI
      • 毎週スロット内容が変わるような場合にCLIを利用すると楽
    • ベータテストツール
      • 対話のパス解析
      • マネタイズ
    • Amazon Pay 1ヶ月前に使えるようになった
    • どこでもAlexa
      • Alexa Built In の端末のこと
    • Echo Button 日本にはまだ来てない
      • Session Extension
      • Mic Control
      • Queue or Interrupt TTS
        f:id:yasay:20181217223501j:plain:w400 f:id:yasay:20181217223509j:plain:w400
  • 音声ファーストUX(ユーザ体験)
    • 状況に応じたデザイン
    • Alexaでなくユーザーが主導
    • フローチャートよりストーリーボード
  • APL
    • Echo ShowやEcho Spotで利用
    • コンポーネント、スタイル、レイアウト、リソース
    • 条件式
    • コマンド
      f:id:yasay:20181217224009j:plain:w400

所感

面白おかしくre:Inventで発表されたアップデートを紹介してくださるセッションで、
午後一のセッションとしては気楽に聴講できて楽しかったです!
登壇者の方はNY出身ですが漢検3級を取得していたりと、
かなり日本語が得意みたいでとても聞き取りやすい日本語で喋ってくれました! アップデート内容はすぐにでも試してみたい機能もありました。
しかしながら、Echo Spotの金額が結構高いので、
開発で試すためにどこかのタイミングで購入したい・・。

14:00 - 14:50 スキルのデザイン・実装のベストプラクティス

  • オトッペの音遊び、ディズニー絵本
  • スキルのデザイン・実装のステップ
    • スキルのデザイン
      • 会話の台本を作る
        • 一番気持ちい形でユーザーが使ったら、どんな体験になるかを思い浮かべる
        • 自然にAlexaと会話するケースをイメージする
          • 人間と人間の会話の片方がAlexaに置き換わるイメージ
            f:id:yasay:20181217224250j:plain:w400
      • 対話のフローを作る
        • 台本の質問に注目
        • 状態を矢印でつないでいく
          f:id:yasay:20181217224531j:plain:w400 f:id:yasay:20181217224606j:plain:w400
      • 対話モデルの準備(インテントスキーマの作成)
    • スキルの開発
      • Lambdaの実装
        f:id:yasay:20181217224939j:plain:w400 f:id:yasay:20181217225014j:plain:w400 f:id:yasay:20181217225108j:plain:w400 f:id:yasay:20181217225144j:plain:w400 f:id:yasay:20181217225231j:plain:w400 f:id:yasay:20181217225258j:plain:w400

所感

私が運用しているAlexaカスタムスキルはシンプルなので、
ここまでベスト・プラクティスに則った設計も必要ないのだけれど、
受託開発案件になると必要なノウハウだよなぁと思う。

なので、sandbox環境に対しての設計の実践をやっておきたいと思いました!

15:00 - 15:50 百官店・外食チェーン事例に見る既存のビジネスにVUIを組み込むためのポイント

  • 会社紹介
    • 先行者事例・先行者利益
      • 誰よりも早く、誰よりも詳しくなる。
      • 他の会社が目をつけたときには、既に先行者利益を獲得。
    • 導入した業種は様々。クラメソ単体でも18スキルある。
    • Alexa TRAININGの技術者講師も担当
    • Alexa Agencyというパートナープログラムがある
  • ビジネスにVUIをどのように活かしていくか
    • CUI -> GUI -> Web -> Mobile -> VUI
      • インターフェースの歴史は10年間毎に入れ替わっている的な話
    • 北米だと2,3割?の人がVUIを利用。買い物などを行なっている
    • VUIで高齢者にリーチできるかも的な話
      f:id:yasay:20181217230226j:plain:w400
    • 問い合わせ対応、受付業務、インフォメーション
      • 人手が足りないという状況において活用できる・・かも
    • スシロー様による注文のカスタムスキル
      f:id:yasay:20181217230433j:plain:w400
    • 美和電気工業様によるコボッタとAlexaの連携ソリューション
      • ピンクの玉を取ってと言ったらコボッタがそういう動きをする
        f:id:yasay:20181217230348j:plain:w400
    • ジャパンネット銀行様による機能ごとの3つのスキル分割
      • ファットなスキルではなく機能ごとにスキルをまとめた方が扱いやすい
      • 4ヶ月単位でリリース
    • パルコ様による事例
      • 運用フロー大事
        • ログを適切に仕込んだ可視化
        • バックエンドには審査が入らない
        • ヒューマンエラーの温床
        • なるべく自動化(CI, CD)
          f:id:yasay:20181217230612j:plain:w400 f:id:yasay:20181217230655j:plain:w400 f:id:yasay:20181217230733j:plain:w400 f:id:yasay:20181217230818p:plain:w400

所感

先行者利益という言葉は、何も本当の利益に適用されるだけのものじゃなくて、
エンジニアの福利厚生という意味の先行者知識という考え方もありなんじゃないかな。
今日のご飯、明日のご飯という考え方いいね。
個人的には先行知識を増やした時の血が通っていく感じが好き。
(先行ではないかもしれないけどね)

16:00 - 16:50 Alexaスキルアワードの振り返りとスキル開発の最新トレンド

  • 振り返り
    • Mashup Award, HackChus
    • 365作品のスキル応募があった
      f:id:yasay:20181217230902j:plain:w400
    • 最優秀賞
      • クイックちゃん
        • 視覚に障害を抱えるヘルスキーパーの方が晴眼者のフォローなしで業務遂行を可能とするためのスキル
          f:id:yasay:20181217230951j:plain:w400
      • みんなのおりがみ
        • 折り紙の折り方を音声と画像で教えてくれるスキル。Echo Spotをいち早く取り入れたスキル
      • GUIの進化は視覚障害者にとって、本当に正しい進化なのか。VUIの意義を忘れないでほしい。
    • スマホの方が便利じゃん!って言われたら負け。音声である理由を考えること。音声の方が圧倒的に便利な体験を提供することが重要
    • 機能を増やせば増やすほどメニューが増える、ユーザーが使いにくくなる。だからもっとVUIのことを考えていこうよ。
    • 来年は"Quality"と"Quantity"のバランス取っていきたい
      f:id:yasay:20181217231030j:plain:w400

所感

途中から既存スキルの応募も可能になったこともあり、
応募者数が相当少なくて焦ってたんだろうなぁと思っていた。
グラフで見る通り、本当に応募期間の終盤まで応募が少なかったんですねw
いつもAlexa道場を担当している方が登壇しているセッションで、
リアルでお顔を拝見できてよかったです。
自分の時間に余裕があればもう少し
アイディアを練ったスキルを作ってみたいけど・・

17:00 - 17:50 Alexa Pay技術入門 ~ Amazon Payを使ったスキル開発にあたって ~

  • Amazon Payとは
    • Alexaスキル向けの技術仕様が一般公開された
    • オーソリ = 信用確認してカード利用枠を押さえること
      1. 事業者はカード会社へオーソリ実行
      2. カード会社はオーソリ結果を返す
    • PCI DSS/クレジットカード情報の非保持化
  • Amazon Payの開発にあたって
    • Amazon Pay導入に必要な技術情報は一般公開
    • 開発効率化のためにSDK・開発補助ツールを提供
    • ワンタイムペイメント
      • 都度決済機能
    • Auto Pay
    • Alexa Amazon Pay 技術仕様
      • Alexaスキル向けAmazon Payの概要
      • Setup API
        • 決済の準備をするAPI
      • Charge API
        • 実際に決済を実施するAPI
      • 支払いDeclineと処理エラー
        • Charge APIでオーソリが実行された場合のエラーハンドリング(決済失敗したことを伝える)が大事
          f:id:yasay:20181217231326j:plain:w400 f:id:yasay:20181217231354j:plain:w400 f:id:yasay:20181217231427j:plain:w400

スマートホーム体験

f:id:yasay:20181217225440j:plain:w400
LED電球やスマートプラグ、そしてカメラが展示されていました。
カメラはEcho Spotと連携して、Echo Spotに映像を映せるようです。

ミュージック体験

f:id:yasay:20181217225616j:plain:w400
なんとBOSEノイズキャンセリング・ヘッドフォンがAlexaに対応していました!
話を聞いた限りですと飛行機の中でも寝れるくらいノイズを軽減できるとのこと。
これは欲しいなぁ 😄

総括

Alexaの最新情報を取得しつつ、
スキルのベスト・プラクティスのノウハウも学べる素晴らしいイベントでした!

ここ最近、Alexaの技術情報をキャッチアップしていなかったので、
このようなイベントは本当にありがたいです!

以上です!

JJUG CCC 2018 Fall 行ってきました!参加レポート

JJUG CCC 2018 Fall http://www.java-users.jp/ccc2018fall/#/www.java-users.jp

↓朝8時半、爽快に晴れ、朝日が差し込む四谷駅から新宿二丁目西新宿に向かう f:id:yasay:20181217130733j:plain

f:id:yasay:20181217124225j:plain:w350

今年の冬もやってきました❗️JJUG CCC 2018 Fall❗️
所用があり午前中だけの参加でしたが、とても有益な情報を得られ、
おかげさまで参加したメリットがとても大きかったと思います❗️😃

レポートしていきます!📝

レポート📝

10:00 - 10:45 Spring BootのWebアプリケーションをDockerに載せてAWS ECSで動かしている話

www.slideshare.net

  • DDDとクリーンアーキテクチャの人(前回の登壇は見てた)
  • システム構成
    • 企業向けWebサービス、取り扱うデータ量は多い(数百GB~数TB)
    • ALB -> WEB UI Container -> in ALB -> other containers
    • in ALB -> independent EC2の流れもある
    • ECR -> ECSの王道を行く
    • CodeDeploy, GitLabを利用してECRに登録
    • 採択経緯
      • 学習コスト懸念、Fargateのランニングコスト懸念
      • (ECSでやっておけばFargateへの切り替えは比較的容易・・)
    • (Web)ALB -> Web Server Container -> UI Container
      • 本当はUI Containerの前にALBを挟みたかった
        • X-Forward-For, X-Forwarded-Proto, X-Forwarded-Portが書き換わる
        • リダイレクトURLのポートが変わっちゃう問題があった
  • 開発環境
    • メモリ16GB, Windows派多数、Macな人も
      • マージリクエストを利用
      • ローカル用プロファイルで動作させるSBが入ったDockerコンテナをビルド・起動
      • 他マイクロサービスのところはモック化
    • GitLab CIで開発環境にデプロイ
      • jarビルド -> Dockerイメージビルド -> ECRに登録 -> ECSのタスク定義 & サービス更新 -> Mattermostに通知
      • すぐにデプロイされない罠
        • ec2数 > タスク数:すぐにデプロイされる(新しいインスタンスに)
        • ec2数 = タスク数:1個止めに行っている間は待たされる
    • 環境毎の切り替え
      • β環境1 -> β環境2 -> β環境3
      • 性能ってのは測ってみるしかない!
      • プロファイルの切り替え
      • Git Flowを採用
      • ECSの環境変数をだけで動作設定を変更できる。
  • ログ出力
    • Kinesys Data Firehorseに連携、S3に保存して分析
  • アクセス監視
    • 未解決事件
      • コンテナ間通信が502エラー
        • ALB <- -> コンテナ
    • ECSはDockerコンテナを間違って落としちゃったとしても瞬時に検知して復旧できる仕組みがあるからそこがすごい。

11:00 - 11:45 Java + コンテナ向けパフォーマンス分析手法の紹介と活用事例

https://jjug-cfp.cfapps.io/submissions/2674d2b0-9b8e-415a-bb3f-75e56333330b

  • 最小の変更点を発見し、速度を改善したい。
    • JMeter & APP DYNAMICS
    • APMでもモニタリング
    • プレリリース環境での継続的な負荷テスト
  • ボトルネックの発見
  • だれでもやること
    • ログをいい感じに仕込む
    • VISUALVMをつなぐ
    • FlightRecorder?
      • system, libc, Native library, GC, JIT?
      • perf-toolでサンプリング
  • 事故は起こってから観測しても遅い
    • perf-scriptは重い
    • perf-recordは比較的軽い
  • Interpreterによる分裂の障害
  • 利用しているツールなど
  • Off-CPUの自動解析は難しい
    • wPerf (Zhou et al)

f:id:yasay:20181217130337p:plain

@nakayama_sanの可愛いメモ

紹介せざるをえない!JJUG CCCでいつも可愛いメモを共有してくださっている、
@nakayama_sanのツイートです!

所感

ECSの環境変数を便利に使えるという話はとても有益でした。

[2018/12/19追記]
本イベントの後にAWSから発表があり、
SSM Parameter Storeの値の参照が Fargate から可能になったようです。

Avalancheについても是非とも実際に動かしてみて、
パフォーマンスを解析したいと思っています。
スター数とかも増えて是非とも盛り上がって欲しいOSSですねぇ。

短い時間での参加でしたが、本当に参考になるセッションばかりで感謝です!
見れなかったセッションは、TwitterGitHubを通して、各セッション情報を参照し、
確認したいと思います!

GitHub - jjug-ccc/slides-articles-2018Fall: JJUG CCC 2018 Fall 登壇資料まとめ

↓写真はおなじみの成子天神社の一コマ。今回も牛さん撫でできました 🐮 f:id:yasay:20181217130623j:plain f:id:yasay:20181217130638j:plain

以上です!

AWS SAMの「AutoPublishAlias」の使い方を誤るとエイリアス消えちゃうよっていう話

AWS Serverless Application Model(SAM)には「AutoPublishAlias」という設定があります。
docs.aws.amazon.com

- AutoPublishAlias: By adding this property and specifying an alias name, AWS SAM:
  - Detects when new code is being deployed, based on changes to the Lambda function's Amazon S3 URI.
  - Creates and publishes an updated version of that function with the latest code.
  - Creates an alias with a name that you provide (unless an alias already exists), and points to the updated version of the Lambda function. Function invocations should use the alias qualifier to take advantage of this. If you aren't familiar with Lambda function versioning and aliases, see AWS Lambda Function Versioning and Aliases .

AutoPublishAliasを有効にした場合、
Lambdaファンクションのソースコードに変更があった場合はリパッケージされた
Lambdaのバージョンが発行され、指定したエイリアス名とバージョンが紐づくように設定されます。

今回、この「AutoPublishAlias」を利用して、
Lambdaのエイリアスを複数管理しようとしてうまくいきませんでした。
何故うまくいかなかったのか、「AutoPublishAlias」の挙動結果を述べつつ下記に記します。

エイリアス名を変更した時は、変更前に指定したエイリアスが消える

下記の画像のように「dev」が指定されているとします。
これを、「prod」に変更してデプロイしてみます。
f:id:yasay:20181213163719p:plain

すると、「dev」エイリアスが消えて、「prod」エイリアスのみが残りました。
「dev」エイリアスが削除されてしまったんです。
f:id:yasay:20181213163807p:plain

「AutoPublishAlias」をコメントアウトすると、変更前に指定したエイリアスが消える

例えば、下記の画像のようにエイリアス指定をコメントアウトすると・・
f:id:yasay:20181203165003p:plain

エイリアスが消えてしまいます。
f:id:yasay:20181213165309p:plain

絶対消しちゃダメなエイリアスをSAMで指定するのは不安かもしれない

私はAlexaカスタムスキルで利用するエンドポイントにLambdaのエイリアスを利用しています。
例えばAuboPublishAliasで「Prod」が指定されている状況から「dev」に切り替えた時に、
想定外の処理がAlexaカスタムスキルで実行されることになります。

つまり・・私のエイリアスの使い方・・間違っている?
f:id:yasay:20181213154441p:plain

一つのLambdaファンクションにおいて、エイリアスを指定して開発や本番を指定したい時はどうするべきか

消えちゃいけないエイリアス(prodなど)は個別にエイリアスを発行。
それ以外は$LATESTを参照すればよいと思います。

つまり・・私の運用では「AutoPublishAlias」の設定は不要ということです。

・・・じゃぁ、そもそもAutoPublishAliasってどこで使うの?

API Gatewayなどで指定されているLambdaエンドポイントに
エイリアスが指定されている状況において、SAMテンプレートの更新と同期する形で、
エイリアスとバージョンの紐づけを付け替えたい状況
ですかね。

今の私のAlexaカスタムスキルのように
一つのLambdaファンクションで環境を分ける用途になりますと、
最新のバージョンが「prod」エイリアスなどの本番環境に適用されちゃいけないんです。
つまり、私の利用ケースには適さないということですね。

もちろん、一つのLambdaファンクションで開発や本番を定義するという私の考え自体が、
ベスト・プラクティスに則ってない可能性は否定できません。

しかしながら、APIゲートウェイにステージという概念があるように、
Lambdaにもステージという概念があってもいいと思うんですよ。

それを実現するためにエイリアスと「AutoPublishAlias」を活用しようとしていました。

今回の調査により、「AutoPublishAlias」も結局のところ適材適所のパラメータなのだと思いました。
いいアウトプットにはなりました!

以上です!

技術情報をGoogleで検索する時に英語のインプットを増やす方法

プログラマやエンジニアの技術情報は、まず最初に英語でやってきます。

しかしながら、普段何気なくGoogle検索を利用していると、
日本語の検索結果が多く混じってきます。

個人的には、まず英語でInputを吸収、
その後に日本語のドキュメントがあれば吸収していきたいと
思っていますので、そのための設定をエントリーします。

PCの場合

Googleアカウントと連携していないChromeユーザを作成して検索する。

その時、Googleの検索設定を英語に変更するようパラメータを付与して、
ブックマークに登録しておくことがおすすめです。

# 以下のURLをブックマークとして登録
https://www.google.com/webhp?gl=us&hl=en&gws_rd=cr&pws=0

Androidの場合

上記の英語検索用URLを異なるブラウザで開く

Chromeで英語検索用のURLを開いても、日本語のGoogleアカウントが紐付いている場合に
やはりノイズが混じってしまうようで。私はDuckDuckGoを利用しています。
play.google.com

英語のインプットを増やし普段から英語と接することは、
エンジニアにとってメリットしかないと思います。

以上です!

JJUGナイトセミナー「Oracle Groundbreakers APAC Tour in Tokyo」のセッション「Microservices Gone Wrong!」レポート

エキスパートを招いたナイトセミナーですごく良質なセッションが聞ける勉強会でした。
今回はイベントスタッフとして参加しました。
jjug.doorkeeper.jp

[Java Track]の最後のセッション「Microservices Gone Wrong!」に参加することができたのでレポートしていきます。

「Microservices Gone Wrong!」レポート

私たちはAmazon / Nettlixから何を学ぶことができますか?

f:id:yasay:20181115105915j:plain

  • コスト削減や過度の構造化に最適化されていない
  • コスト削減の代わりに先取りに重点を置く
  • 市場へのスピードに焦点を当てる(最初のムーバーの優位性)
  • 狂気の成長を助長するために自然のように組織された
  • クラウドは戦略的な利点です!

私たちはAmazon / Netflixのふりをするべきではないのですか?

f:id:yasay:20181115111532j:plain

  • ほとんどの通常の企業は、コスト削減とリストラを求めています
  • ほとんどの普通の会社はAmazon / Netfixの規模を持っていません
  • ほとんどの通常の企業は、コストを節約する方法としてクラウドをまだ見ています
  • あなたがふりをするならば。あなたは無料でインフラの問題をすべて解決します

Microservicesを成功裏に採用した企業は...

f:id:yasay:20181115112129j:plain

  • ...彼らは金融/ヘルスケア/トレーディング/ショッピングサービスを提供するIT企業であると判断した
  • ...クラウド(技術)を戦略的優位性として受け入れる
  • ...固体のCl / CDプラクティスを確立し、1日に複数回プロダクション環境にデプロイ
Companies that have successfully adopted Microservices have...
- ...determined that they are an IT company which happen to offer financial/healthcare/trading/ shopping... services
- ...embraced Cloud (technologies) as a strategic advantage
- ...established solid Cl/CD practices, and deploy to production multiple times per day

実際にはどういう意味ですか...

f:id:yasay:20181115112847j:plain

  • 組織がソフトウェアアーキテクチャと互換性があることを確認する
  • あなたの(マイクロサービス)アーキテクチャがあなたの組織が構造化されている方法を反映していない場合、その方法を気にしないでください!
  • それはあなたのチームがクロスファンクショナルでなければならないことを意味します。構築、維持、生産に必要なものはすべてチームの一員でなければなりません
What it actually means...
- Make sure the organization is compatible with the software architecture
- If your (microservices) architecture does not reflect the way your organization is structured, dont even bother going that way!
- It also means that your teams should be cross-functional. Everyone you need to build, maintain and get it into production must be part of the team

マイクロサービスを正しく行うための単一の方法はありません!

f:id:yasay:20181115112910j:plain

There is no single way to do microservices right!

Struggles

f:id:yasay:20181115112932j:plain

  • データ戦略
  • (非)同期プログラミングモデル
  • オーケストレーションとコレオグラフィー
  • トラップを再利用する
  • テスト戦略
  • 失敗に対処する
Struggles
- Data Strategy
- (A)synchroncus programming model
- Orchestration vs Choreography
- Re-use Traps
- Test Strategy
- Dealing with Failure

A truly, asynchronous...

f:id:yasay:20181115112956j:plain

真に非同期で、完全に分散されたイベント駆動型アーキテクチャは、心配気のないものではありません!

A truly, asynchronous, fully distributed, event-driven architecture is not for the faint of hearted!

分離

f:id:yasay:20181115113022j:plain

  • バルクヘッドを適用してカスケード接続を避ける
  • 転送中には、プロセスを区画に分割し、違反があった場合には封鎖することができます
  • ソフトウェアでは、カスケード接続によるシステム全体の不具合を防ぐためにサービスを分離する
Isolation
- Avoid cascading failures by applying bulkheads:
- In shipping: partition the load into sections allowing you to seal them off if there is a breach
- In software: isolate services to prevent cascading failures to cripple the entire system

ルーズカップリング

f:id:yasay:20181115113053j:plain

  • 障害ユニット間の結合を減らす
    • 非同期通信
    • 場所の透明性
    • 緩やかな時間的制約
    • 偶数性
    • 自己封じ込め
Loose-coupling
- Reduce coupling between failure units through
  - asynchronous communication
  - location transparency
  - relaxed temporal constraints
  - idempotency
  - self-containment

レイテンシ制御

f:id:yasay:20181115113118j:plain

  • イムリーでないレスポンスを検出して処理し、カスケード障害を回避します。
    • タイムアウト
    • 回路ブレーカ
    • ファンアウト&すばやい返信
    • 束縛されたキュー
    • シェッドロード
Latency control
- Detect and handle non-timely responses to avoid cascading failures through:
  - Timeouts
  - CircuitBreaker
  - Fan-out & quickest reply
  - Bounded queues
  - Shed load

脆弱性

f:id:yasay:20181115113144j:plain

Anti-fragility
- Try to make code less breakable by correctly applying:
  - Encapsulation (OOP)
  - Open/Closed principle
  - Test Driven Development (TOD)

Microservices are NOT...

f:id:yasay:20181115113211j:plain

マイクロサービスは、あらゆる組織のエンタープライズアーキテクチャの論理的な次のステップではありません

Microservices are NOT the logical next step for enterprise architecture in every organization

Microservices are...

f:id:yasay:20181115113237j:plain

  • 独立して導入可能なサービスのスイートで、ビジネス機能を中心に編成
  • あなたの頭の中に収まるように十分小さいので、それらを捨てることができます
  • システムレベルでのモジュール性の促進
  • ..継続的な展開で繁栄します。 DevOps、およびインフラストラクチャー
  • いくつかの組織でビジネスの機敏性を達成する正当な方法
  • 間違った理由のために適用されたとき悪夢が永遠に起こります!
Microservices
- ..are suites of independently deployable services, organized around business capabilities
- ..are small enough so they can fit in your head and you can throw them away
- ..are all about promoting modularity at the system level
- ..are thriving on continuous deployment. DevOps, and infrasructure auicomaticn
- ..are a legitimate way of achieving business agility in some organizations
-  ..will cause nightmares forever when applied for the wrong reasons!

所感

Microservices関連は日本でも多くの登壇資料が存在していて、それだけ注目を集めています。
ユースーケースにおいて、日本人も海外の人も同じような内容を共有しているなと感じました。
それだけ、日本と海外でMicroservicesに関する認識齟齬が少ないということなのかもしれませんね。

↓の写真はOracleのサーバラック明治神宮野球場
こういう機会がないとサーバラックはなかなか拝めないかも。
f:id:yasay:20181115113927j:plain:w350

f:id:yasay:20181115113947j:plain

以上です!