Carpe Diem

備忘録

CircleCI 2.0 でworkflowを使ったtagからのデプロイ

概要

CircleCI 2.0でtagからのビルド&デプロイをできるようにします。

主に使う機能としては

  • workflow
  • cache

です。workflowはビルドパイプラインのようなもので、実行ジョブを細かく分けて順に実行させることができます。

f:id:quoll00:20180215234304p:plain

上の例ではmasterブランチにマージ後、testジョブが実行されてからdeploy_devというdev環境にデプロイするジョブが実行されています。

続きを読む

TerraformでNLBを使う

概要

先日新しいL4のロードバランサーであるNLBがAWSからリリースされました。
ALBはL7のロードバランサーであるため、これまでgRPCはCLBの方でしか利用できませんでしたが、これからはNLBを使うことで対応が可能です。
terraform-provider-aws1.3.1から利用できるようになったので(1.3.0バグが有りました)、その使い方を紹介します。

環境

  • terraform 0.11.0
  • terraform-provider-aws 1.3.1

前提知識

NLBはこれまでのCLBやALBと幾つか仕様が異なるため、それを理解していないと躓きます。
特にSecurityGroup周りが大きく違っていて、以下のことを知っていないと疎通がうまく行きません。

続きを読む

Travis CIのslack通知のtokenを暗号化

概要

publicなリポジトリもslack通知させたいけど、slackのtokenが見えるのは嫌なので暗号化して設定する方法です。

環境

CLIのインストール

Travis CIが出しているコマンドラインツールをインストールします。

$ gem install travis --no-rdoc --no-ri
続きを読む

BLPOPで優先順位を付けてタスクキューを実行

概要

タスクキューを操作する時に、特定の処理が他の処理よりも先に実行できるよう優先順位を付けたいケースがあります。
RedisのBLPOPは複数のリストを処理してくれるのでそれを実現できます。

前提

以下の優先度を決めたキューがあるとします。

キュー名 優先度 入ってるタスク
queue:high ht1, ht2, ht3
queue:middle mt1, mt2, mt3
queue:low lt1, lt2, lt3
続きを読む

データ毎に実行スケジュールが異なる場合の実装方法を考えてみる

概要

Stripeの定期購読を使っていると、各ユーザの定期購読の更新タイミングでWebhook eventがちゃんと飛んできます。
ほぼリアルタイムで届くのでこのwebhookを使う側としては非常に助かる機能ですが、提供する立場から考えるとどうやるんだろう?と悩んだので幾つか自分でケースを考えてみました。

課題

今回やりたいことを実現する上で問題になるのは主に以下です。

  • タイムスケジューラをどうするか
  • データ量が増えたときにスケール可能か

cronのようなスケジューラだと、今回のような個々のデータに対するスケジューリングはできません。
またバッチ処理で扱おうとすると、データ量が増えた時に処理対象がどんどん増えるため、対象の抽出や処理自体に時間がかかって実行頻度を上げることが難しくなります。

手段

浮かんだのは以下の4つでした。

  1. 全ユーザの更新期限を毎回チェックしてイベントを飛ばす
  2. 更新日を迎えるユーザをあらかじめ別の場所に保持しておいて、それを定期的に処理
  3. Redisのzsetを使う
  4. Redis Keyspace Notificationsを使う
続きを読む

IAMグループのポリシーの管理

概要

IAMグループのポリシーをちゃんと役割に分けて管理しようという話です。

方針

admin, developer, operatorの3つの役割で分け、各グループに適切な権限を与えるようにします。
ただし

  • パスワード変更
  • MFAの設定

は各IAMユーザができるようにします。

付与する権限

グループ 権限
admin AdministratorAccess
developer PowerUserAccess
IAMUserChangePassword
AllowUsersToUseMFA
operator ReadOnlyAccess
IAMUserChangePassword
AllowUsersToUseMFA
続きを読む

ネットワークの疎通を確認する方法

概要

インスタンスのヘルスチェックに失敗したり、リクエストが届かなかったりするケースの調査のためにネットワークの疎通を確認する機会は多々あります。
今回はその中でよく使うコマンドをまとめてみました。

環境

  • Ubutnu 16.04

コマンド

ping

pingはICMPのエコー要求/応答機能を使った診断コマンドです。

疎通確認

$ ping google.com
PING google.com (216.58.200.206): 56 data bytes
64 bytes from 216.58.200.206: icmp_seq=0 ttl=54 time=2.329 ms
64 bytes from 216.58.200.206: icmp_seq=1 ttl=54 time=2.744 ms

ちなみにICMPはL3のプロトコルなのでポートは関係ありません

続きを読む