QnapにCloudflare Zero Trustで外部から安全にアクセスする

Cloudflare Zero Trustを使用してQnapのNASに外部からアクセスできるようにします。 安全にアクセスするためにGoogleアカウントによる認証を挟むようにします。 このやり方には独自ドメインが必要になるため、所持していない場合はTailscaleを使う方法がオス…

IntelliJ IDEAで大きなファイルがインデックスされないときの解決方法

GoLandやIntelliJ IDEAなどJetBrainsのIDEで大きなファイルがインデックスされないときの解決方法を紹介します。 TL;DR Help > Edit Custome Properties... をクリック 開かれたファイルに idea.max.intellisense.filesize=10000000 と追記する 発生した問題…

GitHub ActionsからGCPにOpenID Connectでアクセスする

GitHub ActionsがOIDC (OpenID Connect)に対応したと公式から発表があったため、GCPへのアクセスを行ってみました。 github.blog GCPのWebコンソールやgcloudコマンドを使ったやり方は公式ドキュメントで紹介されているため、ここではTerraformを使ったやり…

client-goでDynamic Clientを使用して複数のマニフェストを適用する

client-goで単体のリソースを作成する場合は以下のように明示的に対象のclientを作成することで行うことができます。 func main() { ... deployment := &appsv1.Deployment{} deploymentsClient := clientset.AppsV1().Deployments(apiv1.NamespaceDefault) …

KubernetesのJobを管理するカスタムコントローラーを作成した

KubernetesのJobは完了しても登録したJobは削除されず kubectl get job などを実行したときの視認性がよくありません。 これを解消するための設定として .spec.ttlSecondsAfterFinished がありますが、長いことalpha版でGKEでは使用することができません。 …

Ubuntuで開発環境を整える

MacのDocker周りの遅さに嫌気が差したのでUbuntuに移行してみることにしました。 自分用のメモも兼ねて構築の流れを残しておきます。 WSL2にしなかった理由 最初はWSL2で構築する予定でしたが、検証していると問題が発生したため辞めました。 中でも致命的だ…

vimの補完プラグインasyncomplete-around.vimを作りました

vim

asyncomplete-around.vimとは asyncomplete-around.vimは prabirshrestha/asyncomplete.vimのSourceプラグインです。 github.com 現在のカーソル位置を中心として上下20行(デフォルト値)に存在する単語を補完対象として表示します。 asyncomplete.vimは補…

Pull RequestのコメントからGitHub Actionsを実行する

GitHubのPull Requestのコメントから任意のGitHub Actionsを実行する必要があり、やり方に少々癖があったので紹介します。 issue_comment ドキュメントを眺めているとPull Requestに関連するイベントはいくつかありますが、Pull Requestのコメントをトリガー…

LFSをやってみたので振り返る

長期休暇を利用してLFSをやってみたので振り返ってみたいと思います。 きっかけ 日頃から業務でLinuxを使ってサービスを運用していますが、最近はクラウドやコンテナなどを使うことがほとんどでLinuxのほんの一部だけを知っていれば運用できています。 しか…

TerraformのStateをS3からTerraform Cloudに移行する

TerraformのStateをチームで管理するときに、複数の環境からplanやapplyを実行できるようにするためにS3などのクラウドのストレージをバックエンドにすることが多いと思います。 通常のストレージをバックエンドにしていると、複数の環境から同時にapplyが実…

Kubernetes上で動くGoサーバーでプロファイラを動かしWeb UIで表示する

Goにはプロファイラとして標準パッケージにpprofが搭載されています。 pprofの使い方としてはすでに多数の優良記事が存在するため、ここでは扱いません。 今回はpprofをk8s上で動くサーバーに対して実行し、結果をWebUIで表示する必要があったのでそのやり方…

Magiskのroot化を維持したままOTAアップデートする

Magiskでroot化するとOTAアップデートが無効化されるため、セキュリティパッチなどのOSのアップデートを行うことができなくなります。 しかし、適切な手順を踏むことでroot化を維持したままOTAアップデートを行うことができます。 検証環境 Pixel3 Android 1…

Magiskでroot化したPixel3のテザリング制限を解除する

民泊系と呼ばれるSIMを使っている場合、制限がかかっていてテザリングをすることができません。 しかしMagiskでroot化していればこの制限を解除でき、民泊系の数百GB/月という容量を使ってテザリングをすることができます。 前提 Pixel3 (XL) Android 10 必…

MacのCLI環境の構築を自動化する

前回、IDEをやめてvim-lspと独自コマンドに移行したことを紹介しましたが、あれだけだと少し問題があります。 akaimo.hatenablog.jp PCを買い替えたときやクリーンインストールをしたときなどに同じ環境を簡単に構築することができないともう一度構築するこ…

IDEをやめてvim-lspに移行したのでCLI環境を整える

先日メインで使っているマシンを修理にださなければいけなくなり、1週間ほど古いスペックの低いマシンを使うことになりました。 その環境では複数個のIDEを起動しておくのが難しく困っていたところLanguage Server Protocolの存在を思い出し使ってみること…

HelmでKubernetesのマニフェストファイルを管理する

Helmを使って公開されているChartをインストール方法はたくさん紹介されていますが、独自のChartを作成する方法が簡潔に紹介されている記事が無かったので紹介します。 Helm自体の紹介やインストール方法などは省略します。 環境 Helm 3.0.0 Kubernetes 1.15…

fastlaneのpilotでThis request is forbidden for security reasons - The API key in use does not allow this requestとエラーになったときの対処法

環境 fastlane 2.131.0 エラー内容 Spaceship::UnexpectedResponse: [!] This request is forbidden for security reasons - The API key in use does not allow this request /Users/travis/build/xxx/xxx/vendor/bundle/ruby/2.4.0/gems/fastlane-2.131.0/…

gRPCサーバーのデバッグとServer Reflection

gRPCはRPCの1つでProtocol Buffersでシリアライズ化することで高速な通信を実現させています。そのため、通常のREST-likeなWEB APIのデバッグでつかうcurlやPostmanのようなGUIツールでデバッグすることができません。 そこで今回はgRPCで開発するときに役…

Digdagのbackfillを無効化する

Digdagでスケジュール実行の設定をしているワークフローを一時停止したあとに停止を解除した場合は、停止していた期間に実行されるはずだったセッションを実行するBackfillという機能があります。 GUIでPAUSEした後にRESUMEしたときや、CLIでのenable/disabl…

Go ModulesなプロジェクトのDockerビルドを高速化する

Go Modulesに対応させたプロジェクトをDocker内でビルドして実行するとします。 単純にDockerfileを書いてしまうとソースコードに変更が入るたびにModulesのダウンロードが走ってしまい、とても時間がかかってしまいます。 そこでDockerのイメージレイヤのキ…

KubernetesのPodでDockerコンテナを実行する

KubernetesのPodでDockerコンテナを実行する方法を紹介します。 Dockerコンテナ内でコンテナを起動する方法のことをDinD (Docker inside Docker)などと言われていますが、同じことをKubernetesのPodで実行するには少し工夫する必要があります。 アプローチと…

QtでMacアプリを作ってみる

QtでMacのアプリをビルドし、.appの形式として書き出します。 環境 MacOS Mojave Xcode 10.2.1 Qt 5.12.3 事前準備 使用するXcodeのCommand Line Toolsを設定します。 $ sudo xcode-select -s /Applications/Xcode10.2.1.app Command Line Toolsが正しく設定…

DockerのCMDでログファイルをtailする

Dockerは標準出力に出力したログなどはlogsコマンドで確認することができますが、Dockerで動かすアプリケーションがファイルにログを出力している場合はlogsコマンドで確認することができません。 このような場合は、CMDでtail -fすることが多いと思います。…

自作したiOSライブラリの更新手順

iOS

自作したiOSのライブラリをCocoaPodsとCarthageで公開する記事はたくさんありますが、新バージョンの公開に関する記事はほとんど無く毎回困るのでまとめます。 Carthage Carthageで公開しているライブラリの新バージョンをリリースするのは簡単で、GitHubで…

複数のPodのログをまとめて表示する

Kubernetesを開発環境として使用しプロダクションと同じような環境で開発すると、複数のアプリケーションが可動することになると思います。 そうするとログも複数の場所に出力されることになります。 複数個のターミナルを立ち上げ1つずつログを表示しても…

GKEでプリエンプティブインスタンスを使いこなす

GCPにあるプリエンプティブ インスタンスをGKEでうまいこと使えないか、試行錯誤した結果をまとめます。 プリエンプティブ インスタンスとは 一言で言ってしまえば、AWSにあるスポットインスタンスのGCP版です。 公式ドキュメントにはこのように書いてありま…

GKEからCloud SQLに接続する

GKEからCloud SQLに接続するやり方としてCloud SQL Proxyを使う方法が推奨されています。 公式ドキュメントで解説されているやり方は、Cloud SQLにアクセスしたいコンテナが入っているPodにサイドカーとしてProxyを入れる方法です。 公式の例だと、wordpress…

Istioで使うTLS証明書をcert-managerで作成する

Istioは0.7まではIstio IngressというIngress Controllerの一種を使用してトラフィックを受け入れていましたが、0.8以降はGatewayを使うようになりました。 Istio Ingressでは他のIngressと同様のやり方でTLS証明書を扱えたのでcert-managerと組み合わせるの…

route53で管理するドメインの証明書をcert-managerで管理しGKEで使用する

GCPでKubernetesを使用する場合、AWSと違いTLS証明書を発行してくれるサービスが存在しません。 有料の証明書を購入すれば良い話ではありますが、機能は同じなので無料でいきたいところです。 そこで、今回はLet's Encryptを利用したいと思います。 しかし、…

Kubernetesのdashboardをingressから表示する

Kubernetesの状態が知りたいなと思い調べたところ、公式のWebUIであるdashboardをみつけました。 README通りにやれば簡単にインストールできますが、proxy経由でしか表示させる方法が書いてなく不便だったので、ingressを使用して表示させる方法を書きます。…