2017-01-01から1年間の記事一覧
2017年のアウトプットを振り返り。 ブクマとスターを合わせて多い順から。 2018年もよろしくお願いします。
kopsで運用しているKubernetes nodesをMulti-AZからSingle-AZに移行したので作業メモを残しておきます。 us-west-2b や us-west-2c にあるNodesとPersistent Volumesを us-west-2a に移行します。Masterは us-west-2a のままにします。 kops 1.8.0, Kubernet…
AWSでALBを使う場合に、Security Groupでインターネットからアクセス可能なIPアドレスを制限しながら、VPC内部から同じFQDNでサービスにアクセスできるようにしたい。 TL;DR Requirements: インターネットから https://api.example.com でサービスにアクセス…
KeycloakとGitLabでSAML SSOを設定する方法を説明します。ユーザ管理をKeycloakで行いながら、GitLabやMattermostにSSOできるのでとても便利です。 TL;DR Keycloakはオープンソースの統合ID管理ツールです。OpenID ConnectやSAMLによる認証を提供しています…
GitLabでRDS for PostgreSQLを使う場合にハマったのでメモです。 TL;DR GitLabを起動した際のマイグレーションスクリプトで CREATE EXTENSION pg_trgm; が実行されるが、一般ユーザは CREATE EXTENSION の権限を持っていないのでエラーが発生します。 あらか…
GKEでHTTPSを使う場合のメモです。 kube-legoのサンプルに書いてある通りですが、一部注意が必要です。 github.com まず、kube-legoをデプロイします。 cd lego vim configmap.yaml #...snip data: # modify this to specify your address lego.email: "int1…
AWSでメールを受信してLambdaで処理するには以下の方法があります。 SES→S3, SES→Lambda SES→SNS→Lambda 大きなメールを受信したい場合は1を選びます。1はS3にメールを格納してから読みに行くため、サイズの大きなメールも受信できます。2では160kB以下のメ…
This will explain how to upgrade ownCloud on Docker Compose. Pull a new image. # docker-compose pull owncloud Run migration. # docker-compose exec --user www-data owncloud /bin/bash $ php occ upgrade If error occurred, remove /apps and ext…
WSL(Bash on Windows)でIDEA(IntelliJ)を使い始めて少し経ったので雑感をまとめてみます。 IDEAにはJDKなしとJDKありがあります。IDEAに同梱されているJDKはフォントレンダラーが改善されているため、JDKありを使った方がフォントが綺麗になります。これ…
Spring MVCでリクエストとレスポンスのログを出力する方法を説明します。 リクエストログだけなら CommonsRequestLoggingFilter もしくは AbstractRequestLoggingFilter を使う方法が簡単です。詳しくは下記の記事で説明しています。 int128.hatenablog.com …
AppEngine/Java + Spring Sessionを使っていて気づいたのですが、セッションの使い方によってクッキーにセッションIDが出力されない場合があります。具体的には以下の場合があります。 Spring SecurityのCSRFフィルタ:OK Spring Securityのログイン:OK Con…
JavaScriptでURLエンコードされた文字列を変換するには decodeURIComponent を使用しますが、UTF-8以外の場合(Shift-JIS等)は文字コード変換が必要です。encoding.jsを使うと下記のように書けます。 github.com Encoding.codeToString(Encoding.convert(En…
ZipkinのトレースIDを引き継ぐ方法のメモです。 ブラウザ or 外部サービス ↓ フロントエンド(トレースIDを生成) ↓ ↓ X-B3-TraceId: xxxx ↓ バックエンドAPI(トレースIDを中継) ↓ ↓ X-B3-TraceId: xxxx ↓ バックエンドAPI フロントエンドがPHPの場合は以…
CircleCI 2.0でGoogle App Engine (Java8 Standard) をデプロイする方法を調べたのでメモ。 google/cloud-sdk イメージを使う。 App Engine SDKとGradleでJavaが必要になるので、 google/cloud-sdk:alpine イメージに openjdk8 を追加する。DebianはJavaの依…
第二十回 #渋谷java で、複数チームの並行開発におけるSwagger(OpenAPI)の活用についてお話しさせていただきました。 speakerdeck.com TL;DR 複数チームが並行開発を行う場合はインクリメンタルなAPI設計は避けられない。 OpenAPI YAMLからAPI Server, Cli…
GradleでSpring Boot Pluginを利用している場合、依存関係のバージョンが勝手に下がることがあります。例えば、 テスティングフレームワークのプロジェクト → spock-core-1.1-groovy-2.4 アプリのプロジェクト → テスティングフレームワークのプロジェクト …
Gradle Swagger Generator Plugin 2.6.0をリリースしました。OpenAPI YAMLのバリデーション、コード生成、Swagger UI生成を行うためのプラグインです。 github.com New features 複数のOpenAPI YAMLを扱う場合に簡潔に記述できるようになりました。これまで…
AWSでCloudFront → ELB → EC2の構成を採用する場合に、IPアドレスによるアクセス制御を行う方法を説明します。 方法1: EC2上のWebサーバによるアクセス制御 CloudFrontやELBはリクエストを受けると x-forwarded-for ヘッダにクライアントのIPアドレスを付与…
OpenAPIで同じキーのパラメータを複数受け取りたい場合は collectionFormat: multi を使います。 collectionFormat Determines the format of the array if type array is used. Possible values are: csv - comma separated values foo,bar. ssv - space se…
本記事ではGitHub APIを利用してコミットを作成する方法を紹介します。通常はGitクライアントでcommitとpushを行うことでコミットを作成しますが、GitHub APIだけでもコミットを作成できます。 まずはGitのデータ構造を把握しておく必要があります。下図のよ…
Swagger(OpenAPI)では必須チェック(required: true)や数値型チェック(type: integer)などが用意されており、コード生成時にバリデーションコードを出力できます。しかし、複雑なバリデーションルールを定義するには正規表現に頼らざるを得ないため、YA…
以前に Circle CIでCloud Functionをデプロイする - GeekFactory というエントリを書きましたが、gcloudコマンドでデプロイする方が簡単でした。gcloudコマンドでデプロイする手順を説明します。 GCPの設定 デプロイに使用するサービスアカウントを作成しま…
Spring Security OAuthでアクセストークンの取得に失敗した場合のリトライを設計するため、エラーケースと例外の対応を調べてみました。 アクセストークンの取得をリトライするには以下の2つの方法があります。 アクセストークン取得(AccessTokenProvider#o…
プロダクトが成長するにつれてCIの所要時間が長くなる悩みを抱えている方は多いと思います。本稿では、テストケースの並列実行でスローテストを乗り越える方法を検討します。 CIの所要時間を短縮する戦略 CIの所要時間が長くなる主な原因はテストです。だが…
Circle CIからGoogle Cloud Functionsに関数をデプロイする方法を調べたのでメモします。 具体的には、GitHub → Circle CI → Cloud Source Repository → Cloud Functionの流れで継続的インテグレーションと継続的デプロイを行います。 開発者がGitHubのリポ…
第10回Jenkins勉強会に参加しました。 今回はMultibranch Pipelineの話が多かったですね。GitHub + Jenkinsでチーム開発する時のデファクトですね。 私は本番環境のリリースを自動化したエモい話をしました。 speakerdeck.com LTだったので技術的な話は省き…
Twitterの検索結果をRSSフィードで提供するサービスはいくつかありますが、リフレッシュ間隔がいまいちだったのでGoogle Cloud Functionsで自作することにしました。 Twitter Search APIの結果をRSSフィードに変換して返して、SlackでRSSフィードを購読しま…
Spring MVCのアプリケーションでリクエストログを出力するには CommonsRequestLoggingFilter を使うと簡単です。 リクエストログの設定 Spring Bootの場合は以下のように設定します。 @Configuration public class AppConfiguration { @Bean public CommonsR…
Spring Bootアプリケーションのログファイル運用についてメモ。 前提 EC2などのクラウドのインスタンスで運用する場合を想定する。 ログ基盤に転送して蓄積する。 インスタンスに残っているログファイルは基本的に見ない。 Spring Bootのログ Spring Bootの…
ApacheのSetEnvIfでヘッダがない場合の条件の書き方を調べてみました。下記のように正規表現に ^$ を指定すると、ヘッダなしにマッチしてくれます。 # x-forwarded-forヘッダがない場合、環境変数noelbを設定する SetEnvIf x-forwarded-for "^$" noelb 例え…