momota.txt

hello, hello, hello, how low?

ねこの画像をランダムに表示する Slack Command

心の平穏のために、猫の画像をランダムに表示してくれる Slack command /neko を作った。

Slack で /neko と打つと、Cloud Functions にリクエストが飛び、Functions が TheCatAPI からランダムに猫画像 URL を取得するもの。

slack neko command

使ったもの 用途
Google Cloud Functions バックエンド
Python 3.7 Functionsの実装言語
Serverless framework 1.40.0 GCPへのデプロイ

Google Cloud Functions で Slack (Slash) Commands をつくる

Slack commands を Google Cloud Functions で実装する。

Slack commands は slack 上で /command arguments 形式で入力すると何かしらの応答を返す仕組み。/ から始まるのでSlack Slash command とも呼ばれるようだ。 詳細は公式 API ページを参照: Slash Commands | Slack

過去につくった Slack Bot が動かなくなったので、GCP を利用して作り直そうというのが背景。

クラウドへのデプロイについては serverless framework を利用した。

今回は、slack で /ping というコマンドを実行したら、pong と返すような slack command を作る。 できあがりは以下のような感じ。

slack command screenshot

[参加レポート]Google Cloud Kubernetes Day

  • 2019/03/26(火)、渋谷で行われた Google Cloud Kubernetes Day への参加レポート。
  • 会場の約半数が k8s をすでに利用、サービスメッシュは1割程度という感じで、プロダクション環境での採用をやっていかないとまずいという雰囲気だった。
  • ハッシュタグ: #gc_k8sday
  • 資料が公開されたらリンクを張ったりアップデートする予定。

Serverless Framework による AWS Lambda ローカル開発

serverless framework logo

Serverless Framework を使うことにより、FaaS (AWS Lambda, GCP Cloud Functions, Azure functions, など) の開発をローカルで実施できる。 ローカル環境で自分の好きなエディタ・IDEで開発やテストが可能になるし、デプロイも容易になる。

AWS には AWS SAM もあるが、他のクラウドプロバイダでも開発物やノウハウが使い回せることが期待できるので、3rd パーティ製の Serverless Framework を選ぶ。

本稿では、Serverless Framework の導入と、Hello Worldアプリ (AWS Lambda) のデプロイについて書く。

環境

1
2
3
4
5
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS"

Kong でアクセス制御

kong diagram

Kong を利用して、各 API に対して上記のようなアクセスを制御する。

  • Consumer aaa は API a に対してアクセスできる。しかし、API b にはアクセスできない。
  • Consumer bbb は API b に対してアクセスできる。しかし、API a にはアクセスできない。

Kong のプラグイン key-authacl により実装する。

各設定をまとめると以下。

ユーザ service route (kong path) api key consumer group
aaa aaa-api /aaa aaaaaaaaa aaa aaa-group
bbb bbb-api /bbb bbbbbbbbb bbb bbb-group

API アグリゲーション: Kong

kong-logo

Kong の概要

  • Kong は、オープンソースの API ゲートウェイソフトウェア
  • 低レイテンシー、スケーラブルなアーキテクチャ
  • フロントはNginx、バックエンド DB は PostgreSQL or Cassandra で構成される
  • 複数のマイクロサービス (API) をアグリゲーションし、以下のような機能を統合的に提供する
    • 認証
      • Basic 認証
      • API キー
      • OAuth2
      • JWT
      • HMAC
      • LDAP
    • セキュリティ
      • ACL
      • CORS
      • IP制限
      • ボット検出
      • SSL
    • トラフィック制御
      • レート制限
      • 応答速度制限
      • リクエストサイズ制限
    • 変換
      • リクエスト変換
      • レスポンス変換
      • Correlation ID
    • ロギング
      • TCP、UDP、HTTP、ファイル、Syslog、StatsD、Loggly
    • 分析
      • Datadog、Galileo、Runscope
    • ロードバランシング
    • サーキットブレーカー

最近はあまり流行っていないらしく、Web 上の記事が古かったので、使い方に関するメモ。といってもほぼチュートリアル通り。

古いなと感じたのは、たとえば、マイクロサービスの流行りを受けてか、api という概念が service に置き換えられている感じだった。

環境

  • Azure
  • Kong: 0.14.1