タケユー・ウェブ日報

Webシステム受託会社の業務の中での気づきや調べごとのメモ。

コレクションキャッシュでキャッシュのキーをカスタマイズする方法

コレクションキャッシュについてコードリーディングを行ったところ、キャッシュキーのカスタマイズ方法がわかったのでメモ。

cron の代わり CloudWatch Events + Lambda + RunCommand でタスク実行を冗長化するCloudFormationテンプレート

AWSでサーバーレスなcron代替を構成する方法を紹介します。 この構成ではスケジューリングサーバーの管理なしに、冗長な定期タスク実行の仕組みを実現できます。

EC2インスタンスにSSH接続せずに任意のLinuxコマンドを実行する

AWS Systems Managerを利用すると、任意のLinuxコマンドを、外部から実行することもできます。

cron の代わり CloudWatch Events + Lambda + RunCommand でタスク実行を冗長化する

AWSでサーバーレスなcron代替を構成する方法を紹介します。 この構成ではスケジューリングサーバーの管理なしに、冗長な定期タスク実行の仕組みを実現できます。

AWS WAF v2 を使って特定のURLパスにアクセス元IPアドレス制限をかける

やりたかったこと ALB 配下のWebサーバーの特定のURLパス( /admin/ )には特定のIPアドレスからのみアクセスできるようにする IPアドレスの数は1個~たくさん 断念したこと ALBのリスナールールで制限 リスナールールの条件の数は上限が5個で許可対象のIPア…

Rails + PostGIS (activerecord-postgis-adapter) で矩形内に含まれるレコードを検索する

# == Schema Information # # Table name: places # # id :bigint not null, primary key # geom :geography not null, point, 4326 # # Indexes # # index_places_on_geom (geom) USING gist class Place < ApplicationRecord end class CreatePlaces < Act…

Docker Compose で PostGIS を使った開発環境を構築する

postgis/postgis イメージがあるのでそれを使います。 hub.docker.com このイメージは公式のpostgresイメージをベースに作成されていて、安心感があります。 Postgres の各バージョンと、PostGIS の各バージョンそれぞれの組み合わせから選べるので、多くの…

Rails で言語別に複数形変換 pluralize をカスタマイズする

言語特有の複数形やイレギュラーは、Rails標準の `pluralize` では正しく変換することができません。このようなときは、 `config/initializers/inflections.rb` に独自のルールを定義します。

Google API Client for Ruby でGoogleDriveにアップロード

S3などのオブジェクトストレージと比べて面倒 フォルダを作る必要がある 同名のフォルダを複数作成できてしまう gem 'google-api-client' require 'googleauth' require 'google/apis/drive_v3' FOLDER_ID = "xxxxxxxxxxxxxxxxxxxxxx" # https://drive.googl…

JavaScript (TypeScript) でビデオキャプチャーからの映像を表示したり、スナップショットを取ったりしたい!

USBビデオキャプチャーからの映像は、ブラウザからはWebカメラと同じように扱えます。 従って `getUserMedia` を使うことで簡単に取得することができます。

JavaScript (TypeScript) で画面全体や他のウインドウのスクリーンショットを取りたい!

Webアプリでデスクトップや他(ブラウザ以外の)ウインドウのスクリーンショットを撮りたい場面がありました。 こういうことです。 ブラウザで画面をキャプチャ&ショット サンプル See the Pen wvMGvWp by Yuichi Takeuchi (@takeyuweb) on CodePen. 動作確…

rails new したときにライブラリのインストールをしない

docker-compose などで動かしたいとき、ホストへライブラリのインストールをなるべくしたくない。(依存パッケージの関係でそもそも pg が入らない、とか) bundle install と rails webpacker:install を避ける rails new myapp --skip-bundle --database=p…

S3からGoogle Driveに同期する(Lambda Ruby + CDK)

やりたかったこと S3にアップロードされたアイテムをGoogleDriveの共有フォルダに同期する S3のオブジェクト作成イベントでLambdaを実行して処理 対象のバケットやLambda関数などはCDKで作成する この記事に書いたこと Lambda Ruby で gem を使う方法 AWS SD…

Ruby で SSLサーバ証明書の内容を確認する

cert_content = <

Ruby による Amazon Personalize の使い方

AWSの機械学習レコメンデーションサービスである Amazon Personalize を案件で利用したのでSDKの使い方メモです。 Amazon Personalize aws.amazon.com Amazon Personalize は、機械学習の知識がなくても、簡単にレコメンデーションをアプリに組み込むことが…

OpenAPI Specification からTypeScript型定義を生成するジェネレータ、swagger-to-tsを試す

GraphQLにおける graphql-codegen のような、 OpenAPI のSpecification から TypeScript の型定義を作ってくれる swagger-to-ts を触ってみました。 github.com まとめ VSCodeの補完が効いてうれしい typoやパラメータの不足などのミスを防ぐ 使い方 型定義…

Stoplight Studio を試す

OpenAPI の定義ファイルの作成と管理のためのツールを探していて、Stoplight Studio が良いと聞いたので試してみることにしました。 stoplight.io Stoplight Studio Stoplight Studio の触れ込み Next gen editor for API design & technical docs (API設計…

Lambda から EC2 インスタンス内でコマンドを実行する

Amazon SSM を利用することで、Lambda を使って、EC2インスタンス内で任意のコマンドを実行することができます。 これを CloudWatch Events と組み合わせると、従来CRONによって行っていたような定期実行タスクを、特定のEC2インスタンスをSPOFにすることな…

CloudFormation で CloudWatch Events + Lambda による定期実行タスクを作成する

AWSで定期的な処理を行いたいときは、CloudWatch Events を使い、 Lambda ファンクションの実行をスケジューリングすることで行います。 docs.aws.amazon.com 設定画面 CloudWatch Events のルール Lambdaファンクションの実行権限設定 CloudFormation テン…

DockerCompose + PostgreSQL Replication

Railsの複数データベース機能を開発環境でも有効にしたかった docker-compose up でセットアップから起動まで一発で動くようにしたい Docker Compose docker-compose.yml version: "3" volumes: pg_primary_data: driver: local pg_readonly_data: driver: l…

Ruby で Firebase User を作成

動機 Firebase Auth を使ったWebアプリの Rails System Spec を書きたい フロントエンドで Firebase JavaScript SDK を使っているため、バックエンドでのstubでは書けない サンプルコード(一部抜粋) Google::Apis::IdentitytoolkitV3::IdentityToolkitServ…

rspec で Firebase ID Token を stub

class SessionsController < ApplicationController def create id_token = params.required(:id_token) user = User.from_firebase(id_token) # (snip) end end class User < ApplicationRecord CIRTIFICATE_URL = 'https://www.googleapis.com/robot/v1/me…

rspec で ActionMailer の deliver_later のジョブはすぐに処理する

ActiveJob へのキューインの spec で示したように ActiveJob::Base.queue_adapter = :test を使うと、 perform_later のジョブはキューに溜まるようになる。 しかし、 ActionMailer の deliver_later で非同期送信を使っている場合にまでキューインされてし…

ActiveJob へのキューインの spec

まとめ ActiveJob::Base.queue_adapter = :test を使うと、 ActiveJob::Base.queue_adapter.enqueued_jobs にジョブが入る have_enqueued_job マッチャーでジョブが入っていることを expect する サンプルコード it 'enqueues PaymentIntentSuccessedJob' do…

aws-sdk-ruby で AWS CodeCommit の SSH キーを登録する

まとめ SSHキーペア生成は OpenSSL::PKey::RSA#generate を使う アップロードは Aws::IAM::Client#upload_ssh_public_key を使う 事の起こり 開発中のWebシステムでは、必要に応じてAWS上のリソースを生成しています。 CodeCommitへのコミットに使用するIAM…

WSLのバックアップ

まとめ wsl --export を使う .bat を書けばバックアップをとってからシャットダウン、もできる forest.watch.impress.co.jp 事の起こり WSL2をゴリゴリ仕事で使っている 何かあったとき戻せるようにしたい ツール類の再インストール作業などなるべくしたくな…

AWS SDK for Ruby で EC2 ImageBuilder のパイプラインを作成する

まとめ Aws::Imagebuilder::Client クラスを使う 事の起こり EC2 ImageBuilder でゴールデンAMIを作成している EC2 ImageBuilder のコンポーネントを変更する際、それを使うようにパイプラインを更新するには、コンポーネント、レシピ、パイプラインとそれぞ…

ApplicationLoadBalancer で Basic認証

まとめ リスナールールで Authorization ヘッダーをチェックする Lambda で WWW-Authenticate: Basic を返す アプリケーションの実装なしに簡易認証できて便利 事の起こり ALB をフロントに置いたWebサイト 全体に認証をかけたい サーバー側コード等の変更は…

特定のActionで読み込み専用のレプリカを使う

ActiveRecord::Base.connected_to で包む class PostsController < ApplicationController around_action :set_reading_role, only: %i[index show] def index @posts = Post.all # :reading end def show @post = Post.find(params[:id]) @post.touch # => …

ACMでCAAエラーが発生したとき

まとめ CAAレコードが1つでも指定されている場合、指定にない認証局によるSSLサーバ証明書発行は失敗する CAAレコードに amazon.com が必要 事の起こり AWS Certificate Manager を使い、クライアント指定のドメインのサブドメインで Amazon 発行のSSLサー…