あきろぐ

いろいろめもするよ🐈🐈🐈

ElasticsearchのAnalyze APIとExplain APIを使いこなそう

Elasticsearchを使って日本語の全文検索機能を実装することはよくあるケースですね。 大量のドキュメントをインデックスに登録し運用していると、想定したドキュメントがヒットしない、関連性が低いドキュメントのスコアが高くなっている等、意図していない…

Google Cloud Vision APIとOpenAIのFunction Callingを使ってみた

今回はGoogleのCloud Vision APIを使って画像からテキストを検出し、そのテキストとOpenAIのFunction Callingを用いて構造化データを抽出していきたいと思います。 Cloud Vision API Googleが提供している画像を分析し情報を抽出できるサービスです。OCRによ…

/etc/environmentで環境変数を読み込む場合の制約について

1024bytesを超える環境変数は値が切り捨てられる /etc/environmentに環境変数を設定する場合、値に入れる文字数が多いと正しく読み込まれないことがあります。具体的にいうと1024bytesを超える値を設定しようとすると切り捨てられ、ログファイルには以下のよ…

AWS LambdaでExifToolを使う Ruby編

何をしようとしたか Lambda上で動画や画像のメタデータ取得するためにExifToolのRubyラッパーツールを導入しました。 しかし、ExifToolをLambda上で実行するには一筋縄ではいかなかったので、その解決方法をまとめてみます。 環境 AWS Lambda Ruby3.2 server…

対象日から過去1週間のユニークユーザー数を出したい

SQL

何かしらのイベントのデータ分析をする際に、特定イベントのデイリーのユニークユーザー数を出すだけでなく、その日から過去1週間のユニークユーザー数を出したい場合があるかと思います。 例えば、2023-04-16のユニークユーザー数と2023-04-16から過去1週…

FactoryBotでデータを大量に作成する2パターンの速度比較をしてみた

背景 Rspecでテストを行う際にテストデータが大量に必要だったので、create_listを使ってデータ作成していましたが、create_listを使うよりbuild_listしたものをbulk_importした方が高速化できると教えてもらいました。 bulk_importはActiverecord-Importと…

Railsで時間をJSON形式の文字列に変換するときに気をつけたいこと

前提 Railsでcreated_atを含む文字列をJSONに変換したものを受け取った後、そのJSON文字列からcreated_atを取り出し、DBにデータを取りに行くような実装がされていたとします。 その際、想定通りのデータがDBから取得できずに困ったので、その調査&原因をま…

Elasticsearchの調査系コマンド&便利な使い方

基本的なElasticsearchのコマンドは、たくさんまとまった記事があると思うので特に困らないと思いますが、プラスαとしてElasticsearchクラスタを運用していく上で知っていると便利かもと感じたコマンドや使い方を備忘録としてまとめてみました。 定期的に追…

FactoryBotでインスタンスを一気に作成するときに値をユニークにしたい

create_listは、複数のインスタンスを作成するときに便利なメソッドですが、作成されるインスタンスのテストデータは同じになってしまいます。 create_list(:article, 3, title: 'test', description: 'test') createメソッドで愚直に1つずつインスタンスを…

【Rails】カラムの中身を別のカラムにコピーする3パターン

1つ目 あるテーブルに新しくカラムを追加し、既存のカラムデータを新規カラムにコピーする ModelName.update_all(new_column = old_column) 2つ目 テーブルサイズが大きい場合、レコードを分割して処理を実行することも可能 ModelName.in_batches(of: 10000)…

PostgreSQLを入れ直したらrails db:prepareできなくなった

何が起きたのか PostgreSQLが立ち上がらなくなってしまったので、再度インストールし直した後rails db:prepareを実行したところ、以下のようなエラーが発生した。 rails aborted! LoadError: dlopen(/Users/xxx/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/g…

Google CalendarをCLIで扱えるnpmを作成しました

作ったもの Google CalendarをCLIで扱えるnpmを公開しました。機能はシンプルですが、ターミナル上でGoogle Calendarのイベントを表示、登録、編集、削除することができます。 www.npmjs.com 作成動機 最近Javascriptを勉強していたこともあり、外部APIを使…

CodeDeployで"TaskDefinitionTemplateArtifact"パラメータを見直してくれって言われたときの回避策

aws

どんなエラー? 遭遇したエラーは以下の通り。 タスク定義の検証に失敗したので、CodePipelineのアクションに記述されている"TaskDefinitionTemplateArtifact"のタスク定義を見直してほしいとのこと。 別のデプロイパイプラインも同じ構成となっているのに関…

Rubyのoptparseについて掘り下げてみる

これは、「フィヨルドブートキャンプ Part 2 Advent Calendar 2021」2日目の記事です。 adventar.org part1もあるので、こちらもどうぞ! adventar.org はじめに 何かしらのプログラミング言語を使ってコマンドを実装する場合、付属するオプションを自前で解…

aws-cli + pecoを使ってセッションマネージャー接続を楽にする(aws-vault ver.)

aws-cliを使ってEC2インスタンスに接続するの面倒くさいので、簡単に接続できるようにMakefileを書きました。 タグで特定のenvironmentの稼働中インスタンスの名前とインスタンスIDをpecoに渡して、選択したインスタンスIDをHOSTに入れてます。 ssm-ec2: ech…

Terraform v0.12からv0.15にupgradeするときにつまったところ

やっとTerraformのアップグレードに手をつけました。 そのときにつまったときのメモを残しておきます。 リソースに存在しない属性がサポートされていない aws_codedeploy_appリソースに存在しない属性がサポートされていないというエラーが0.13にアップグレ…

AWS WAFv2導入でつまずいた&考慮したほうがいいところ(rate limit編)

aws

概要 AWS WAFv2を実際に使って検証したので、その際につまずいたところや考慮したほうがいいところなどまとめます。 今回はレートベースのルールを使ってリクエストの発生元の IP アドレスが同一のものからリクエストが閾値以上になったらブロックする設定に…

aws-vaultコマンドのエラー対応

aws

こんにちは。 久しぶりにブログ書きます。 aws-vaultコマンド便利ですよね。 色々触っていたらエラー吐くようになったので調査したときのログです。 今回のエラー 雑な意訳:ネストに気をつけてね。$AWS_VAULTを強制的にアンセットして。 なにこれ? aws-vau…

ALBのヘルスチェックに失敗するときに確認すること

aws

概要 ALBのヘルスチェックにハマったので、そのときに見直すところのメモ。 構成 ALB ECS Nignxコンテナ Railsコンテナ 確認 ヘルスチェックのエンドポイントが間違っていないか ALBのターゲットグループに設定するヘルスチェックのエンドポイントが間違って…

aws firelensを使ってみる

aws

Firelensとは 去年ECSのログ出力先をカスタマイズできる「Firelens」機能がリリースされました。 それまでは、ECSコンテナのログはCloudwatchLogsか自前でFluendコンテナを立ててログ取集する仕組みを作るみたいなやり方だったと思います。 CloudwatchLogsは…

ECSコンテナインスタンスにSSMセッションマネージャを使えるようにする

aws

概要 今までECSのコンテナインスタンスの中に入ってDockerコンテナのデバッグするためには、踏み台サーバー経由して対象のインスタンスにsshする必要がありましたが、ECSエージェントのアップデートによりsshなし踏み台なしでコンテナインスタンスの中に入る…

ecs-cliを使ってみる

aws

概要 awsのコマンドラインツールはaws-cliがありますが、ecsに特化したecs-cliを使えば、ローカルからクラスタやタスクの作成や簡単なモニタリングをすることが可能です。 そのecs-cliの導入とちょっと使ってみたときのメモです。 導入 macOSの場合 ecs-cli…

Route53を使う

aws

AWS勉強ログ。 Route53 ドメイン管理機能 Route53で新規のドメイン取得や更新ができる 権威DNS機能 ドメインとIPアドレスを変換するシステム ドメインを取得するとき 取得したいドメインを入力し、「チェック」する 入力したドメインが使えるかどうか確認で…

CloudFrontを使う

aws

AWS勉強ログ。今回は、CloudFrontです。 CloudFrontとは HTMLファイルやCSS、画像や動画などの静的コンテンツをキャッシュして、オリジンサーバーの代わりに配信するCDN(Contents Delivery Network)サービス AWSは世界中にエッジロケーションが120あり、利…

ECSのタスクロールとタスク実行ロール

aws

ECSのタスクロールとタスク実行ロールは何が違うのかのメモ タスクロール AWSの開発者ガイドには以下のように書かれている。 Amazon ECS タスク用の IAM ロールを使用すると、タスクのコンテナで使用できる IAM ロールを指定できます。 上記の文言からだと分…

ECSタスクのCPUとメモリをチューニングする

aws

ECSのtask定義のメモリとCPUをチューニングするときのメモ メモリ制限 メモリは「ハード制限」と「ソフト制限」があり、2つの値を設定するとき必ず「ハード制限>ソフト制限」である必要がある。 「ソフト制限」は、コンテナに予約するメモリ量(MiB) 「ハ…

awsコマンドの'ecr get-login'が非推奨になったので'ecr get-login-password'を試す

aws

概要 クラメソさんの記事を読んでaws ecr get-loginがv1では非推奨、v2では使えなくなっていることを知ったので、自分の環境どうだったか確認をかねて新しいコマンドecr get-login-passwordを使ってみました。 dev.classmethod.jp 自分の環境 自分のawsコマ…

ansible-playbookのwith_itemsが肥大化するのを防ぎたい

概要 Ansible-playbookの1つのタスクで複数のユーザーを作成したり、色んなパッケージをインストールしたいときに役立つのがループ処理です。その代表的なパラメータがwith_itemsではありますが、このパラメータもうまく使わないとwith_itemsに羅列するパラ…

ECRのDockerイメージをローカルにプルしてビルドする

aws

概要 デバッグするために、ECRにあげているDokcerイメージをローカルにプルしてビルドするまでのメモ。 環境 mac10.14.6 aws-vaultコマンドをインストールしている 手順 AWS ECRにログインする 下記コマンドを実行するとDokcerにログインするためのアクセス…

codebuildでyum installが失敗する

aws

概要 今日の午後くらいから今まで動作に問題なかったcodebuildの失敗が連続していた。 原因を調査してみると、fedoraproject.orgの名前解決ができなくなっていた。fedraprojectのDNSサーバーが死んでる模様。同じような現象に遭遇している人もちらほらいるみ…