年中アイス

いろいろつらつら

golang

aws-sdk-go-v2でassume roleしてAPIを呼ぶ

クロスアカウントを使うことがあったのと、そろそろv2をちゃんと使わないとなということでaws-sdk-go-v2を使ってassume roleする方法を調べました。EC2のDescribeInstancesを呼んでインスタンスリストを出すだけのサンプルを実装しています。コード全体はこ…

GoのContext.Done()、closeされたchannelは何度でも受信できる

moguraのcontext化を進めていく中で、変な挙動が起きて調べたら、channelの仕組みをちょっと知れたのでメモ。 先に結論 Goのchannelは複数のgoroutine間で使うことができ、channelをcloseすることで、全てのgoroutineに終了を通知することができます。Contex…

GoReleaser+GithubActionsを使って、releaseファイルのアップロードとhomebrew対応を自動で行う

※2021/04/06 動かなくなってた部分があったので対応を後半に追記しました。 先日、rnzooに機能を追加して、久しぶりにリリースをしようとしたら、色々動かなくなっててハマりました。しばらくやってなかったので、Rubyのバージョンアップや、hubコマンドの再…

GoでSSH port forwarding

今までPort Forwardingはbashrcに書いて呼び出していましたが、量が多い時など手間が多くなっていたので、Goで呼び出せるようにしようと調べてみました。ちょうど同時期にGoで実装している方がいたので、参考にしてサンプル実装を作ってみました。 go-memo/s…

Goでファイルの特定位置から読む

bashで組んでたログの検知スクリプトを、メンテナンス性と拡張性考えてGoで書き直すことにしました。 ファイルを定期的にtailして一定行数読み込んで処理する方式を取っていましたが、最後に読んだとこから後にしたいと調べていたら、Mackerelが似たようなこ…

GoでJSONの数字/数値を扱う

JSONはデータの表現形式です。表現はできますが、項目があるかや、型が何であるかを検査する仕組みはありません。*1 そのため、システムや実装が分かれている場合に、数値を期待しているが、JSONの表現上、数値か数字かがずれていることが起き得ます。どうい…

GoでJSON文字列を整形し直す

Goで、JSONを返すWebAPIを呼んだ時、普通は結果をプログラムで使うので、対応する構造体を用意して、json.Unmarshal()などで変換します。 しかし、JSONをそのまま整形だけして出力したい場合があります。例えば、WebAPIを呼んで、そのレスポンスを見せるだけ…

Apexでlambda slack POSTにGoを使う

以前のエントリで、Lambda Node.js 4.3を使ってSlackにPostしていました。 reiki4040.hatenablog.com 普段Javascriptは書かないので、Goで書いてApexでデプロイする版を試しました。 ApexはLambdaのコードを管理(?)、デプロイするツールで、PythonやNode.js…

AWS CodeBuildでGoプロジェクトをビルドする

AWS TokyoリージョンにもCodeBuild等のCodeシリーズ(?)一式揃い、使ってみようということで、まずはCodeBuildを試してみました。 公式にGoのサンプルはあるんですが、他のライブラリ使ってないhello worldなので、CodeBuildの説明だけという感じでした。vend…

golangのHTTPサーバを構成しているもの

golangのHTTPサーバは、少量のコードで動くものを作ることができます。内部的には、net/httpパッケージのServerとHandlerで構成されます。 Serverは名前の通り、Serveするもので、HTTPをどのネットワークソースで提供するかを定義するものです。 Handlerは、…

rnzoo 0.2.0をリリースしました。

golangで書き直した新しいrnzoo version 0.2.0をリリースしました。(ssh呼び出しが有るので、rnsshはshell) Release version 0.2.0 · reiki4040/rnzoo · GitHub今回のバージョンの目的は、導入のハードルを下げるために、boto(Python)からgolangにしたことで…

golangでのシグナルハンドリング

golangでデーモンやWebサーバなどの設定再読み込みなどをどうしようかなと考えてた時に、fluentdがシグナルでいろいろやってたな*1と思ったので、golangだとどうやるか調べてみました。全体はこれ 動作の確認 ビルドして実行ファイル作成 go build 実行しま…

golangとPythonでの可変長引数(variable arguments)の扱い方

ltsv_pipe/ltsv_filterではフィルタするラベルを渡すのに、可変長引数を使用しています。 reiki4040/ltsv_pipe · GitHub rnzoo/ltsv_filter at master · reiki4040/rnzoo · GitHub 可変長引数は、引数の個数を固定せずに渡された個数分が関数わたるようにな…