APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

Goで重み付き乱択アルゴリズムを書く

はじめに 先進サービス開発事業部の山岡です。 重み付き乱択アルゴリズムとは結果に偏りのある抽選の事で、身近な例でいえばソシャゲのガチャでしょうか。ガチャはアイテムの抽選結果に偏りがあり、一般にそのアイテムの有用性が高いほど入手確率が低く設定…

GolangのgrpcwebでCORSエラーが出る時はOriginFuncを確認しよう

はじめに 先進サービス開発事業部の山岡です。 小ネタですがgrpcweb *1 の検証をしている時にCORSエラーでハマったので対処法をメモしておきます。 *1:https://github.com/improbable-eng/grpc-web/tree/master/go/grpcweb

GolangでgRPCを試してみる

はじめに 先進サービス開発事業部の山岡です。 仕事で使う機会がありそうなのでgRPC *1 に入門しました。まずは定番のHello, Worldからやってみたのでその内容を共有したいと思います。 *1:https://grpc.io/

GoPacketでネットワークと直接お喋りしよう

はじめに 先進サービス開発事業部の山岡です。 Go言語は標準でかなり強力なネットワーク用のライブラリーがありますが、GoPacket *1 を使うと更に細かいところをイジれるようになります。 仕事でパケットをごにょごにょしたところ結構面白かったのでここで紹…

LinuxのNetwork Namespaceで手元にネットワークテスト環境を作る

はじめに 先進サービス開発事業部の山岡です。 最近Raw Socketで通信するプログラムを書いているのですが、試しにパケットを送って他所と上手く通信できるか確認したい時に実機を使うのは大変面倒です。こういった場合にLinuxのNetwork Namespaceを使えば手…

EC2でインスタンスを再起動せずディスク領域を拡張する(Amazon Linux)

AWS

はじめに 先進サービス開発事業部の山岡です。 1年半ほど前に趣味でソリューションアーキテクト・プロフェッショナルを取得したものの最近とんとAWSと戯れていなかったのですが、再起動無しでEC2の拡張ができることをClassmethodさんの記事 *1 で知り興味を…

goenvとdirenvでGo Modules有無両対応な開発環境を作る

はじめに 先進サービス開発事業部の山岡です。 Go ModulesはGo1.11から実験的にサポートされ1.13から正式ツール(デフォルトで有効)となる予定である依存関係管理機能です *1 。これは export GO111MODULE=on することで使えるようになり、詳細は省きますが…

Google App Engineの2nd Generationとは?

はじめに 先進サービス開発事業部の山岡です。 Google App Engine(GAE)は所謂PaaSでサーバーやネットワークの管理を気にせずアプリの開発に集中することができます。 最近これに関するホットな話題として2nd Generationへの移行がありますが、色々と情報が飛…

GAE/Go1.9から1.11にマイグレーションしようとして躓いたところ

はじめに 先進サービス開発事業部の山岡です。 GAE/Goは1.6, 1,8, 1.9, 1.11, 1.12(beta)と随時新しいGolangバージョンに対応してきていますが、1.11からはGAEのバックエンドがgVisorベースの2nd Generationとなり大きな変更点が複数ありました。 *1 1.11で…

CI環境で react-scripts build が失敗する場合の場当たり的対処方法

はじめに 先進サービス開発事業部の山岡です。 開発時にローカルの環境では問題無く react-scripts build できるにも関わらず、CircleCIで同様にビルドを行うと Failed to compile. というエラーが発生してしまうという問題が起きました。 同じ問題にハマっ…

実サーバー無しでLet's Encryptの証明書を発行する

はじめに 先進サービス開発事業部の山岡です。 先日所用で手元の端末にLet's Encryptの証明書を発行したのですが、これには公式推奨ツールであるcertbotを使う必要があります。 単純にインストールする方法の他にDockerを使って使い捨てることもでき、今回そ…

WSLの色を見やすくする

はじめに Windows Subsystem for LinuxはWindows環境でLinuxのネイティブバイナリーを動かすことができ非常に便利なのですが、デフォルトで設定されている色はギンギンでとても見辛いです。 公式から編集できるツールも用意されているようですが、面倒な場合…

mercari.go #6 参加レポート

はじめに 先進サービス開発事業部の山岡です。 今日はいつもと趣向を変え、先日参加させて頂いたmercari.go #6のレポートを書きたいと思います。 ※資料は後日公開されるとのことなので公開されたらそちらへもリンクを貼ります JavaとGo言語を比較した話 @ken…

GAE/GoのテストでDatastoreの状態を確認できるようにする

始めに 先進サービス開発事業部の山岡です。 GAE/Goでは goapp test を使うことでローカル環境に仮のGAEを再現しDatastoreのアクセスや非同期処理の挙動を確認することができますが、テスト終了後にその環境は自動で破棄されてしまいDatastoreがどのような状…

GCP DatastoreのKindを一括削除する

はじめに 先進サービス開発事業部の山岡です。 GCP DatastoreはSQLコマンドを直接叩いてデータを操作する、というようなことができません。一応GUIから内容を確認して削除したりすることはできますが、簡易的なものであり特に大量のデータに対しては全くの無…

EKS上にConcourse CIをデプロイする

はじめに 先進サービス開発事業部の山岡です。 今回はEKSで構築したKubernetes上にCI/CDツールをデプロイしてみた結果について書きたいと思います。「Kubernetesで上手く使えそうか?」という観点の簡易的な動作確認を行う内容なので、このまま商用利用する…

Terraformを使ってEKSを構築する

始めに 先進サービス開発事業部の山岡です。 Terraformを使ったEKSの構築を試してみる機会があったのでEKSに関する解説とコード、注意が必要と思ったポイントについて書きたいと思います。 EKSの解説 EKSは何をしてくれるのか? EKSはKubernetesのマスターノ…

Golangの独自型を使い引数の順番ミスを減らす

先進サービス開発事業部の山岡です。 Golangには他のプログラミング言語と同様関数があり、これに引数として値を渡すことで見通し良く様々な機能を作ることができます。しかし関数に複数の引数を渡す場合、時折順番間違いが問題となることがあります。 例え…

testeratorで高速にGAE/Golangのテストをしよう

始めに 先進サービス開発事業部の山岡です。 GAEにはローカルでクラウドの環境をそこそこ再現できるSDKが用意されており、疑似的にDB(Datastore)等が再現され動作確認を行うことができます。実環境へのアップには1,2分はかかり、ちょくちょくアップしながら…

NEEDLEWORKで any any 試験の実行を検討する

始めに 先進サービス開発事業部の山岡です。 弊社製品の一つにファイアーウォールのポリシーテストを自動化するNEEDLEWORKがあります。詳細はリンクを見て頂くとして、簡単に言えばCSVに試験シナリオ(プロトコルやSrc/Dstアドレス等々)を定義しそれを実行…

Datastore Import/Exportの結果をレポートする

先進サービス開発事業部の山岡です。 GCP DatastoreのバックアップにはImport/Exportというサービスを使いますが、これには結果をレポートする機能が無く運用する上で不便です。今回APIをポーリングしSlackにレポートする仕組みを作りましたのでその知見を共…

if文を読みやすくしよう

先進サービス開発事業部の山岡です。 例えばGAEでバッチ処理を行う際に、商用環境では必ず実行・それ以外の検証環境等では手動起動でのみ実行したいという要件があった時のことを考えてみましょう。 どの環境であるかは appengine.AppID(ctx) でProjectのID…

Datastore Import/Exportの紹介(2/2)

始めに 先進サービス開発事業部の山岡です。 前回の記事の続きで、Datastore Import/Exportによる定時バックアップについて書きたいと思います。 旧世代の仕様ではGAEのcronを使い特定のURLを叩くことで起動することができました。新しい方式でも大筋は同じ…

Datastore Import/Exportの紹介(1/2)

始めに 先進サービス開発事業部の山岡です。 私がバックエンドを開発しているNEIGHBORSはAppEngine(Go)の上に構築されており、データベースはCloud Datastoreを使用しています。 Datastoreはスケーラビリティに優れたNoSQLデータベースで、容量が無制限、Ent…

シェルスクリプトでAppEngineへ簡単・安全にデプロイする

始めに 先進サービス開発事業部の山岡です。 私がバックエンドを開発しているNEIGHBORSはAppEngine(Go)の上に構築されています。 デプロイやトラフィック切り替えの際にはSDKに付属しているappcfg.pyやgcloudを使用することになりますが、極々簡単なスクリプ…