kawabatas技術ブログ

試してみたことを書いていきます

Golang+EchoのAPIにIPアドレスによるアクセス制限を設ける

go

概要 Golang + Echo の API に IPアドレスによるアクセス制限を設けたのでメモ。 実装 ほぼほぼこちらを参考にさせていただいた。 package main import ( "net" "os" "strings" "github.com/labstack/echo" ) // InternalIpFilter returns an middleware whi…

docker-compose で postgres -> mysql に変えたら起動できなくなった

概要 docker-compose で postgres -> mysql に変えたら起動できなくなりました。 無事解決できたのでメモです。 起動時のエラー $ docker-compose up -d $ docker-compose ps Name Command State Ports ---------------------------------------------------…

Golang Lambda を AWS X-Ray で表示する

概要 Golang Lambda で DynamoDB のトレース、外部HTTPリクエストのトレースをした際のメモです。 Lambda のトレースの有効化 Lambda での AWS X-Ray のセットアップにあるように、 「アクティブトレースを有効にします」にチェックを入れれば、Lambda の起…

Lambda から EC2 へ TCP 疎通を確認する

概要 セキュリティグループのインバウンドルールで TCP を許可している EC2 に対して、 VPC 内にアクセス可能にした Lambda、そうでない Lambda からの疎通確認をしてみました。 Lambda のランタイムは Go です。 Lambda のコード package main import ( "lo…

GitHub Actions で Go のテストを実行する

go

概要 GitHub Actions で Go の超シンプルなテストを実行してみたのでメモ。 GitHub Actions 現在 limited public beta で、使いたい人はこちらからエントリーが必要。 コード サンプルリポジトリはこちら。 .github/main.workflow を作成しただけ。 $ tree -…

【Go言語のtest】HTTPリクエストのテスト

go

概要 HTTP モックサーバがほしいなら、標準の httptest パッケージを使えばよいとわかったのでメモ。 コード GET リクエストを投げる ping 関数 func ping(url string) int { client := &http.Client{ Timeout: 5 * time.Second, } res, err := client.Get(u…

【Go言語のtest】interface を利用して mock を使う

go

概要 外部 API や DB が関わるコードのテストでモックを使いたい場面は多々あると思う。 interface を使って、テストでモックに切り替えることができるのでメモ。 インターフェイスを定義 type DB interface { Add(name string) error Delete(name string) e…

はじめての Go のテスト

go

概要 go を触り始めたばかりで、go のテストのことが少しわかったので、メモ。 書き方 テストのファイルは *_test.go main.go だったら main_test.go testing ライブラリを import して、func TestXXX(t *testing.T) という関数を作成する package main func…

go fmt をディレクトリ階層まとめて行う

go

go fmt をサブディレクトリ配下のすべてのファイルにまとめて行える $ go fmt ./...

Mac で Go の環境構築

go

概要 go の開発環境を設定し、go のプロジェクト作成までやったのでメモ。 goenv のインストール goenv は、go 言語のバージョンを管理するもの。 go 言語版の rbenv や nodebrew のようなもの。 リポジトリはこちら $ brew install goenv $ echo 'export GO…

【環境変数の管理に便利!】direnv を Mac に設定

env

概要 ステージング、本番など環境ごとに環境変数を用意すると思いますが、 ローカルの環境変数の管理には direnv が便利なので、その設定方法をメモです。 リポジトリはこちら direnv をインストール $ brew install direnv $ echo 'eval "$(direnv hook bas…

sam で swagger.yaml を使う

aws

概要 sam で swagger.yaml を使う時にハマったのでメモ。 コード template.yaml AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: > sam-app Sample SAM Template for sam-app # More info about Globals: https…

AWS SAM デプロイ時のエラーの調べ方

aws

概要 AWS SAMで、サーバレスアプリケーションを開発し始めた。 デプロイ時のエラーをAWSマネジメントコンソールから確認できることを知ったのでメモ。 デプロイ時のエラー $ make deploy aws cloudformation deploy --template-file output-template.yaml --…

Amazon API Gateway でプライベート API を作成する

aws

概要 Amazon API Gateway でプライベート API を作成した際のメモ。 AWS ドキュメント VPC エンドポイントの作成 サービス -> VPC -> エンドポイントでエンドポイント作成。 サービスカテゴリ「AWS サービス」 サービス名「com.amazonaws.<リージョン名>.exe…

Firebase で公開したサイトに IP でアクセス制限をかける

概要 Firebase Hosting で公開した一部のページに特定のIPからのみアクセス可能にしたいという要望を実現したときのメモ。 実装 IP制限をかけたいページへアクセスがあると、Cloud functions の関数を実行し、動的にhtmlを生成して返す。 ほぼほぼこちらの記…

Container Registry の image を削除する

gcp

概要 Google Container Registry の appengine の image を一気に削除するスクリプトを残しておく。 #!/bin/bash set -e # 例 us.gcr.io HOSTNAME= PROJECT_ID= image_lists=`gcloud container images list --repository=$HOSTNAME/$PROJECT_ID/appengine | …

gem activejob-google_cloud_tasks を作成した

概要 Google Cloud Tasks の ActiveJob 用のアダプタの GEM を作成した。 https://rubygems.org/gems/activejob-google_cloud_tasks 使い方と、初めての gem 公開にあたっての反省と、更新の手順をメモしておく。 使い方 前提条件 Creating App Engine Queue…

ruby で複数の CSV で使われる ID を置換する

概要 Voice.csv の ID をリネームし、VoiceId カラムを持つ他の複数の CSV もリネームに対応するという機会があったのでメモ。 require 'csv' class Voice def self.rename(str_id) case id = str_id.to_i when 1..988 return 0 + id - 0 when 989..1196 ret…

Unity で複数の Firebase プロジェクトを使用する

概要 Unity で Firebase プロジェクトを開発環境と本番環境を分けました。 その際に行ったことのメモです。 ドキュメントを読んで こちらが「複数のプロジェクトを構成する」ドキュメントになります。 iOS アプリケーションで複数の環境をサポートするでは、…

Unity iOS ビルドし、iPhone実機のログをみる

概要 Unity で iOS ビルドし、iPhone 実機で実行し、Unity のログを見るときのメモ。 Unity ビルド Unity で File > Build Settings を開き、 Platform を iOS Run in Xcode as を Debug Development Build にチェック Script Debugging にチェック Build を…

Ubuntu 16.04 LTS に rbenv を root でインストールする

概要 GCE の起動スクリプトで rbenv をインストールしたときのメモ #!/bin/bash set -e RUBY_VERSION="2.5.1" apt-get update apt-get install -y git build-essential libssl-dev libreadline-dev zlib1g-dev libmysqlclient-dev nodejs mysql-client git c…

Railsのコード内で引数ありのRakeタスクを実行する

bin/rails sample:task[a,b] 引数 a, b を扱う sample:task を実行する場合、 require 'rake' Rails.application.load_tasks Rake::Task['sample:task'].execute(Rake::TaskArguments.new([:a, :b], [a, b]))

Mac のローカル環境で開発中の Rails で mysql のバージョンアップでエラーが発生した

概要 Homebrew の mysql をアップデート(5.7 -> 8.0)したところ、Mac のローカル環境で開発中の Rails でエラーが発生したのでメモです 開発環境について ローカルの rbenv, bundler を利用 mysql などのミドルウェアは docker-compose で立ち上げたものを利…

Google Cloud Next in Tokyo '18 参加レポート

gcp

9/19,20 の2日間にわたって開催された Google Cloud Next in Tokyo '18 に参加してきたので、 講聴したセッションの内容や感想、全体を通じて感じたことを報告します。 共有しようと思ったこと AutoML を利用すれば、コードを書かずに、カスタムモデルを作れ…

Rails + AppEngine を試してみる

概要 現在、k8s 上に構築している rails アプリを app engine に移行することを考え、app engine を試してみたので、そのメモ。 環境ごとに GCP プロジェクトを分けるか ドキュメント 重要: 各 Cloud Platform プロジェクトには、1 つの App Engine アプリケ…

Rails のマイグレーションファイルをまとめる

概要 jalkoby/squasher を使って、マイグレーションファイルをまとめたのでメモ。 db/structure.sql でスキーマ情報を管理している。 インストール gem 'squasher' bin/squasher を作成 $ bundle binstub squasher 使う application.rb の下記をコメントアウ…

Tensorflow で学習モデルを自作してみる

ML

概要 先日、BigQuery ML が発表されたり、ML がますます進展している。 少しずつ学んでいきたいと思い、とりあえず、学習モデルを自作することをしてみた。 だいぶ前に、Tensorflow の手書き文字のチュートリアルをやったことがあるが、機械学習について一切…

GKE 上で Locust を試す

gke

概要 Locust。Python 製の負荷試験ツール。 シナリオが Python で書けるので、複雑なシナリオも作れそう。 Helm があるが、tasks の中を書き換える必要があり、fork して tasks を書き換え、helm chart を公開するのは面倒なので、Google公式のチュートリア…

Mac から GCE 上の JMeter サーバークラスタを制御する

gcp

概要 GCE 上に JMeter サーバークラスタを作成し、ローカルの Mac 上の JMeter クライアントから制御し、結果を取得してみたのでメモ。 GoogleのJMeterのドキュメント(古い...) JMeter Remote Testing こんな感じのイメージ 手順 とりあえず、jmeter server …

Terraform を travis ci で実行する

概要 terraform の実行を travis ci 経由で行うようにしたので、メモしておきます。 メルカリが開発しているOSSの tfnotify を使い、master ブランチへの PR 作成時、terraform plan を実行し、結果をPRにコメント マージ時、terraform apply を実行 するよ…