GPT-4V x LINE Bot を Cloudflare Workers で実現するためにやったこと・やらなかったこと

この記事では OpenAI が提供する Vision API (GPT-4V) を使用して、LINE に投稿した画像に反応する Bot を作成した際にやったこと・やらなかったことを書いています。

ローカルを固定のドメインで公開したい - Cloudflare Tunnel 編

最近の個人の開発では LINE Bot を作ったり OpenAI API で遊ぶことが多い。その時外部からローカルのサーバーへのリクエストを受け付けたいことがある。例えば LINE Bot だと webhook の URL がある。今回はこれを Cloudflare Tunnel を使って解決する。 Clo…

RDS の MySQL インスタンスにローカルから接続する

自分がメンテナンスしている AWS RDS の MySQL インスタンスは private subnet 内には配置されている。そのため自分のローカルなど外部からはネットワークレベルで接続できないようになっている。しかし稀に接続したくなることがある。昔だと SSH Port Forwa…

Pod の YAML ファイルに env を追加して再度 YAML ファイルを出力したい

今回はタイトルにあるように Pod が定義された YAML ファイルに任意の環境変数を追加して再度 YAML ファイルとして出力する。 満たしたい要件は Pod に env が定義されてなくても環境変数を追加できる すでに定義されている環境変数に対しては上書きをする …

Istio Proxy をビルド!!

この記事は Isito Proxy をどのようにビルドして任意の Docker registry (e.g. Docker hub) に push するかを記載しています。 背景 Istio では Envoy が Dataplane として使用されています。Envoy がそのまま使用されるわけではなく Istio に必要ないくつか…

Cloudflare Tunnel を使って Kubernetes の Service を外部からアクセスできるようにする

背景 AWS で Kubernetes クラスタを運用する中でサービスを外部に公開したい時に思いつく方法が ALB など AWS から提供される load balancer を使用することだと思います。今回は諸事情により ALB を使えないため代わりの方法を探していました。 やりたいこ…

Istio Proxy が使用している Envoy のバージョンを確認する

公式サイトだと実際に動いている istio-proxy を使用して確認をする。 $ kubectl \ exec \ -it productpage-v1-6b746f74dc-9stvs \ -c istio-proxy \ -n default \ -- pilot-agent request GET server_info --log_as_json \ | jq {version} { "version": "2d…

Istio で main thread と worker thread で Wasm module を動かす

hatappi.blog 前回の記事では最近作成した Wasm module を Envoy 上で動かす部分を解説しました。この記事ではそれを Istio 上で動かす部分を解説します。 Istio の Wasm 周りの歴史 実際の設定に入っていく前に Istio と Wasm の歴史を軽くおさらいしたいと…

Prxoy-Wasm で Envoy を拡張して AWS CloudWatch にメトリクスを送る

最近 Envoy の拡張手段の1つである Wasm filter に興味をもったので Proxy-Wasm の spec 読んだり、関連ドキュメントを読んでました。ただ折角やるなら学ぶだけでなく学んだことの確認もかねて何か作りたいなと思って1つ Wasm module を作成したので、この…

Proxy-Wasm を学ぶために見たアレコレ

最近 Proxy-Wasm が気になったのでドキュメント見たり動画を見たりしてキャッチアップした。この記事はそのメモ。 WebAssembly (Wasm) Wasm はなんとなく知っている程度だったので Proxy-Wasm を学ぶ前に Wasm とは何か?何を解決するためのものかを学んだ。…

Roppongi.rb を支える技術 ~Github Actions 編 その1~

背景 自分は数年前から Roppongi.rb のオーガナイザーをやってます。最近は他のオーガナイザーの方と一緒にイベントの方針を変えてオープンスペーステクノロジー(OST)というワークショップの手法の1つを採用してイベントを毎月1回開催しています。流れと…

Argo CD Image Updater を使用したコンテナイメージの自動更新

背景 プライベートでは web サービスや定期実行されるバッチ、Slack bot や LINE bot などを開発しています。これらはすべて Kubernetes 上で動いておりリリースには Argo CD を使用しています。 アプリケーションは基本別々のリポジトリで管理しており Argo…

kOps + Amazon VPC CNI で IP prefixes を使って多くのコンテナを EC2 インスタンスにたてる

2021年7月までは Kubernetes で AWS VPC CNI を使い EC2 を Node として使用していた場合の Pod の最大数は Elastic Network Interface (ENI) の数と各 ENI の IP Address の数に依存していた。 計算式は下記に記載されていて max Pods = ENI * (IPv4 per EN…

チェアコンシェルジュのススメ

自分は普段作業をする時は以前下記のブログでも書いた昇降台を使っている。 blog.hatappi.me 座って作業しつつ会議があったり気分転換したい時は立って作業ができるので昇降台は本当に買って良かったと思っている。 ただ座ってる時に使っている椅子はどこか…

Github Actions で OIDC を使ったクレデンシャルを取得する機能の Dependabot の挙動確認

先日 Github から OIDC を使用して AWS や GCP などの Cloud Provider からクレデンシャルを取得する方法に関する発表がありました。 github.blog これを使うことで今までのように Github Secrets に各 Cloud Provider のクレデンシャルを設定する必要がなく…

iTerm2 + tmux でトラックパッドを使ってスクロールする

タイトルの通りで iTerm2 + tmux を使っている時にtmuxのプレフィックスの ctrl + b から [ を押した時にスクロールモードになるのだけど、ここでトラックパッドでスクロールをすると、画面ごと?スクロールされて意図した通りに動かない。 調べると .tmux.c…

kOps v1.21.0 を使い Amazon EKS Pod Identity webhook をやめて IRSA を実現する

kOps の v1.21.0 が今月の頭にリリースされて、その中の1つに "Service Account Issuer Discovery and AWS IAM Roles for Service Accounts (IRSA)" という変更が入りました。 この変更を使うことで kOps は OIDC ディスカバリ ドキュメント を S3 に公開し…

Mac のキー入力が遅かった原因は Mac 標準の入力ソースだった

在宅勤務が続く中で仕事用の Mac と 個人用の Mac を切り替えて使っているときに体感で感じるほどに個人用の Mac のキー入力に対するディスプレイへの反応が遅いことに気がついた。 分かりやすい例だと長ーい文章を開いて↓矢印キーを押し続けたときに、画面…

FlexiSpot で脚を買って天板は自作した

タイトルの通り最近 FlexiSpot で脚を買って天板を自作しました。 このブログではなぜ買うことにしたのか、なぜ天板を自作したのか、どうやって自作したのかの過程を書いていきます。 なぜステンディングデスクを買うことにしたのか もともと自宅の開発環境…

IstioのEnvoyFilterでgzip圧縮をしていく

今回はIstioのEnvoyFilterでのgzip圧縮をしたのでそれを書いていきます。 gzip圧縮自体は Envoy が提供しているのでこれを使用するだけなのですが、EnvoyFilter を初めて使ったのでそれのメモがてらの記事でもあります。 https://www.envoyproxy.io/docs/env…

リリースノート作るのは Release Drafter で良さそう

自分の中でやりたいけどやらないことの1つにリリースノート作りがある。 手動で作るのは面倒なので、自動で作成したい。 後は個人で作っている Rails アプリケーションや Go で作った CLI などがあるので、言語とかアプリケーションに依存しない方法で探して…

Rails の Controller の params ってどうやって生成されているの?

Rails を使っている時 Controller で params を呼び出すと GET リクエストだったらクエリパラメータは取得できるし POST であれば Content-Type が multipart/form-data や application/json とかに関係なく値を取得できるようになっている。 便利!!! Rails …

Argo CD と Argo Workflows で SSO + RBAC

blog.hatappi.me 上記の記事で紹介したように最近プライベートKubernetesの構成を変更したことで複数のドメインを設定できるようになった(金銭面)ので、今まで Port Forward でアクセスしていた Argo Workflows を ALB にぶら下げて https 経由でアクセス…

ALB Ingress Controller から Istio Ingress Gateway + AWS Load Balancer Controller に変更する

ALB Ingress Controller から Istio Ingress Gateway + AWS Load Balancer Controller に変更しました

BAROCCO MD770 RGB BT を買いました。

blog.hatappi.me 前回キーボード買ったのが2018年12月21日なので、約2年いかないくらいのタイミングでキーボードを買い換えました。 キッカケとして何かのタイミングで前のキーボードを作ってるMistel社が新しいキーボードを今年出したのを知ったからです。 …

Gomodoroの記録をPixelaでつける

最近 Github の Profile を作ったけど、置くものも特になくてとりあえず Most Used Language だけ置いていた。 github.com しかしさすがに寂しいなと思ったので、何かを追加することにした。 そこで思いついたのが仕事やプライベートで作業する時にポモドー…

goplsをdaemon化して使う

普段コードは vim + vim-lsp で書いていて Go を書く時は language server として gopls を使っている。 engineering.mercari.com このイベントに参加した時に gopls が daemon で起動できるのを知って、今回 Mac で daemon 化して使用することにした。 公式…

GitHub Actions で失敗した時も step を実行する

今日ふと下記のようなことを思った。 Github Actionsでワークフロー失敗したらslack通知みたいなのどうやると良いかなと思ってたけどworkflow_runというイベント使って別のワークフロー作ってあげる感じかな?— はたっぴ (@hatappi) 2020年9月21日 たしかに …

Argo CD で 個人の Github アカウントでログインして権限管理をする

最近 Argo CD を使いはじめた。 argoproj.github.io ログインはID, Passwordによる方法も提供されていますが、SSO によるログインも可能になっています。 Github や Google アカウントを使う場合は Argo CD では build-in されている dexidp/dex というライ…

GCP のプロジェクトを Terraform で作成する

題名の通りで今回は GCP のプロジェクトを Terraform で作成します。 Google Provider には google_project があるので、これを使うだけなのですが、ちょっとハマったのでそのメモの記事です。 www.terraform.io まずは Terraform で GCP 上のリソースを扱う…