GeekFactory

int128.hatenablog.com

二回目の育休日記(生後3ヶ月)

娘3歳、息子3ヶ月になりました。 最近は以下のスケジュールで生活しています。 7:00 起床 3人分の朝食を作る 着替え、顔を洗う、歯磨き(自分) 娘を起こす 朝食を食べる 着替え、顔を洗う、歯磨き(娘) 食器を洗う 保育園の荷物をまとめる 8:45 出発 9:00 …

Go Modulesに移行した

GitHubで公開しているツールをGo Modulesに移行したので、やったことをメモしておきます。 ソースコード これまではGOPATHの内側(e.g. ~/go/src/github.com/int128/example)に作業フォルダを置く必要がありましたが、Go Modulesに移行するとGOPATHの外側で…

二回目の育休日記(生後1ヶ月)

第二子が生まれてから1ヶ月が経ったので記録を残しておく。 産前産後 今回は里帰りではなく東京で出産することにしたので、生まれる前から休むことにした。男性の場合は産前産後休業がないため、子どもが生まれてからでないと育休を取得できない制約がある。…

NGINX Ingressで複数ドメインを1つのALBに集約する

AWSでKubernetesを利用する場合、Ingress Controllerの選択肢にはaws-alb-ingress-controllerやkube-ingress-aws-controller、nginx-ingressなどがあります。 aws-alb-ingress-controllerやkube-ingress-aws-controllerではKubernetesのレイヤでALBを管理で…

HackMDでGitLab認証を利用する

HackMDは同時編集が便利なコラボレーションツールです。HackMDは認証なしでも十分に使えますが、外部認証を利用するとさらに便利に使えます。公式リポジトリのドキュメントによると、HackMDは以下の認証方式に対応しています。 GitHub Twitter GitLab (self …

WZR-HP-AG300Hのファームウェアを書き換える (macOS)

macOSでWZR-HP-AG300Hのファームウェアを書き換える方法を説明します。DD-WRTの書き込みや純正ファームへの書き戻しに使えます。 まず、WZR-HP-AG300HのLAN側ポートを有線LANでMacBookに接続します。IPアドレスは以下を設定します。 IPアドレス: 192.168.11.…

TerraformでプライベートサブネットとNATゲートウェイを管理する

AWSのNATゲートウェイ構成をTerraformで管理する方法を調べたのでまとめます。 NATゲートウェイ構成とは下記のような構成を指します。 次の図は、NAT ゲートウェイを使用した VPC のアーキテクチャを示しています。メインルートテーブルは、プライベートサブ…

Googleフォトに写真をアップロードするツールを作った

Googleフォトに写真をアップロードするコマンドラインツールを作りました。 github.com このツールは先月に公開されたGoogle Photos Library APIを利用しています。 Getting Started APIにアクセスできるように初期設定が必要です。 https://console.cloud.g…

Google Photos Library APIで写真をアップロードする

Google Photos Library APIが使えるようになったので、写真のアップロードを試してみました。 アクセストークンの取得 https://console.cloud.google.com/apis/credentials から新しいOAuth Clientを追加します。Client IDとClient Secretが表示されるのでメ…

Debian and Kubernetes optimized Kernel in kops

kopsが利用するAMIについて調べたのでまとめておく。 kopsでサポートされているOSは https://github.com/kubernetes/kops/blob/master/docs/images.md に書かれている。デフォルトではDebianが選択される。他にCoreOS、Ubuntu、CentOS、RHELがサポートされて…

Slack公式のJIRA連携機能を試した

Slackが公式に公開しているJIRA連携機能を試してみました。 get.slack.help JIRA連携機能はJIRA CloudとJIRA Serverに対応しています。今回は個人で運用しているJIRA Serverを利用しました。 以下の手順でSlackとJIRAを連携できます。詳しくは公式ページを参…

開発基盤ツールのHelm charts

開発基盤ツールをKubernetesで運用する時に使えるHelm chartsを調べたのでまとめました。開発支援ツールやDevOpsツールという言い方もあるかもしれません。 Atlassian JIRA Software オフィシャルのHelm chartやDockerイメージはありません。検索したところ…

Helmfile supports inlined values in YAML

HelmfileはKubernetesクラスタのHelm releasesを管理するツールです。 helmfile.yaml にデプロイしたいHelm chartを書いて helmfile sync を実行するだけでインストールやアップグレードを冪等にやってくれるので便利です。 例えば、Kubernetes DashboardとH…

Read dynamic type values from YAML in Golang

GolangでYAMLを読み込む際、要素の型が実行時に決まる場合を考えます。例えば、以下のYAMLでは values で数値、文字列、マップの値が列挙されています。 values: - 100 - foo - key: value このようなYAMLを読み込む場合、型宣言を interface{} にすると実行…

kubectl getでカスタムカラムを表示する

kubectl getはデフォルトでは以下のカラムを表示するが、どのカラムを表示するかはオプションで変更できる。 % kubectl get po --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE 特定のカラムを表示するには -o custom-columns オプションを渡せ…

Upgrade to Kubernetes 1.9 using kops

個人用のKubernetesクラスタを1.9.3に更新したのでログを残します。 % kops version Version 1.9.0 kops upgrade cluster コマンドでS3の構成情報を更新します。 % kops upgrade cluster Using cluster from kubectl context: hello.k8s.local ITEM PROPERTY…

AWS CodeBuildとJenkinsの連携

TL;DR AWS CodeBuildとJenkinsを連携させると、これまでJenkins Agentで実行していたビルド処理をAWS CodeBuildに置き換えることができます。以下のメリットがあります。 AWS CodeBuildは無限に*1スケールするので、ビルドキューの待ち行列がなくなる ビルド…

AWS CodeBuildとGitBucketの連携

TL;DR GitBucketはGitHub API互換なので、GitHub Enterpriseとして振る舞うことができる。 AWS CodeBuildはGitHub Enterpriseに対応している。 CodeBuildからGitBucketにgit cloneしてビルドを実行できる。 今のところWebhookは使えない。 Getting Started G…

新しい技術を学ぶ時のアプローチ

新しい技術を学ぶ時にどのようなアプローチを踏むことが多いのか書き出してみました。具体的には、新しい言語、フレームワーク、インフラ、アーキテクチャ、プロセス、考え方などを学ぶことを考えます。 名前を知る(ポータル、SNS、Podcast等) 特徴を知る…

GradleからNexusに成果物を公開する

TL;DR Gradle 4, Nexus 3を前提とする。 Gradleに標準で含まれる maven-publish プラグインを利用してNexusに成果物を公開できる。追加のプラグインは必要ない。 Gradleの repositories ブロックでNexusのリポジトリURLを指定する。成果物の公開、取得ともに…

特定URLへのアクセスを契機としたHTTPサーバのGraceful Shutdown

Goで特定のURLへのアクセス(例:GET /shutdown)を受けたらHTTPサーバを停止するにはどうすればよいか考えてみました。 HTTPサーバを停止する http.Server にはGraceful Shutdownを行う Shutdown メソッドがあります。/shutdown へのリクエストを受けた契機…

Visual Studio Code on Windows Subsystem for Linux

wsl

TL;DR Windows 10 build 17120から、Visual Studio Code for Linux(vscode)がWindows Subsystem for Linux(WSL)で動くようになります。 Windows 10 Build 17120のWSL (Debian)でVisual Studio Codeが動いた!うれしい!— int128 (@int128) 2018年3月20日…

kubeloginコマンドを利用してOpenID ConnectでKubernetesにアクセスする

TL;DR Kubernetesの認証はクライアント証明書やID/パスワードだけでなく、OpenID Connectに対応している。 RBACを設定することで、ユーザやグループによるアクセス制御ができる。 以下の設定が必要になる。 Keycloak(OpenID Connect IdP) kube-apiserver(…

KeycloakのOpenID ConnectでKubernetes Dashboardにアクセスする

TL;DR Keycloakはオープンソースの統合ID管理ツールでOpenID ConnectやSAMLに対応している。 Kubernetes DashboardはOpenID ConnectのIDトークンによる認証に対応している。 RBACを設定することで、ユーザやグループによるアクセス制御ができる。 以下の設定…

Gradle Swagger Generator PluginがSwagger UI 3に対応

Gradle Swagger Generator Plugin 2.10.0をリリースしました。 github.com 新しいリリースではSwagger UI 3に対応しました。Swagger UI 3になってから使い勝手が大きく改善されています。 このプラグインを利用すると、下記のようなビルドスクリプトを書くだ…

Helm ChartsをGitHub Pagesで公開する

KubernetesではHelmというパッケージマネージャが広く使われています。HelmではChartという単位でパッケージを管理します。有名なソフトウェアであればOfficial Chartsが公開されていますが、場合によっては自分で書いたChartを公開したいこともあるでしょう…

JIRAの更新をSlackやMattermostに通知する

JIRAの更新をSlackやMattermostに通知するBOTを作りました。 このBOTは実際にお仕事で使っていて、いい感じの粒度で通知されるように改善を重ねています。 Dockerで簡単に実行できます。 docker run --rm -p 3000:3000 \ -e SLACK_WEBHOOK=https://hooks.sla…

EBS volume type standard not working on Kubernetes

The EBS volume type standard seems not working as a storage class on Kubernetes. Reproduce the issue Adding the following storage class: kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: standard labels: k8s-addon: storage-a…

Prometheus/GrafanaでPersistent Volumesの空き容量を取得する

TL;DR KubernetesのPersistent Volumesの容量をPrometheusで取得するには以下のMetricsを使用する。 kubelet_volume_stats_available_bytes (使用可能バイト数) kubelet_volume_stats_used_bytes (使用済みバイト数) kubelet_volume_stats_capacity_byte…

Keycloakでユーザを一括追加するツールを作った

Keycloakにユーザを一括追加するツール Keycloak Bulk を作りました。 Keycloakで多数のユーザを追加したい場合、一人ずつ手作業で登録する必要があります。JSONでユーザリストを書けばインポートできるようですが、やや複雑な作業が必要になります。使いや…