タケユー・ウェブ日報

Ruby on Rails や Flutter といったWeb・モバイルアプリ技術を武器にお客様のビジネス立ち上げを支援する、タケユー・ウェブ株式会社の技術ブログです。

技術

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 と wsl --import インポートした後はデフォルトのユーザーが root になってしまうので、設定してやる必要がある .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サー…

CodePipeline のアクションで AWS Lambda を実行する

まとめ CodePipeline のアクションとして AWS Lambda を実行すれば、いろいろなことができる たとえばRailsのdb:migrateをデプロイ時に自動設定したり、ECSスケジュールタスクを登録したり Lambdaのタスクロールを適切に指定すればAWSアクセスキーなしにAWS …

Windows10標準の機能でVSCode(でなくてもよい)+マイク音声を録画する

まとめ Windows 10 の標準機能 GameBar を使うと、任意のアプリケーションを録画できる マイクからの音声を含めることができる 事の起こり タケユー・ウェブでは、お客様からの技術的な質問に対してお答えする顧問的な業務もあります。 その中でVSCodeを使っ…

EC2 ImageBuilder コンポーネントのデバッグ

まとめ Terminate instance on failure を false にしてもテスト用のインスタンスは殺される S3へのログ保存は絶対に有効にしろ ステップはなるべく小分けに 事の起こり EC2 ImageBuilder でゴールデンAMIを作っている ある日昨日まで成功してたテストをパス…

AMI(EBSスナップショット)の使用量と料金を確認する

まとめ ボリュームサイズとスナップショットの使用量は別 スナップショットの使用量を知るにはコストエクスプローラーを使う EBS:SnapshotUsage (GB-Month) 使用タイプとコスト配分タグを組み合わせる 事の起こり 現在、EC2 ImageBuilder で作成したGolden A…

AmazonLinux2にgcc6をインストール(標準のgcc7と共存させる)

AmazonLinux2 標準の gcc は 7.x ですが、6.xがほしいときもあります。そんなときは Environment modules を使います。

Rais.env.development? みたいな文字列がその値か?真偽値をとれるやつを使いたい

こういうのです。 Rails.env.production? # Rails.env == "production" と同じ ActiveSupport::StringInquirer クラスを使います。 role = ActiveSupport::StringInquirer.new("admin") role.admin? #=> true ActiveSupport::StringInquirer activesupport/l…

Active::Recordのトランザクション復習

user = User.find(2) user.name = 'takeyuweb' user.save! User.transaction do # A user.name = 'takeyuweb(trA)' user.save! User.transaction do # B user.name = 'takeyuweb(trB)' user.save! end User.transaction do # C user.name = 'takeyuweb(trC)'…

RHEL6(CentOS6)のPerlでMTを動かすとき、MTEntriesのcategoryモディファイアで中国語を含むAND/ORを行うとエラー

こんなエラーが。 category属性でエラーがありました: (新闻 OR 其他) AND common 5.8.8 ・・・ エラーなし 5.10.1 ・・・ エラー(MT5.2 / MT6どちらでも) 5.14.2 ・・・ エラーなし というわけで、どうやらPerlのバグっぽい。正規表現(パターンマッチ演算子)でこ…

ERST: Error Record Serialization Table (ERST) support is initialized.

Logwatchを眺めていると --------------------- Kernel Begin ------------------------ WARNING: Kernel Errors Present ERST: Error Record Serializa ...: 1 Time(s) ---------------------- Kernel End ------------------------- Kernel Errors Present…

Object#to_param / Object#to_query(key)

https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/object/conversions.rb https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/object/to_param.rb https://github.com/rails/rai…

Object#acts_like?(ActiveSupport)

https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/object/acts_like.rb クラスに`acts_like_xxxx?`というメソッドを定義しておくことで、安全にダックタイピングできるようになります。 例えば、ActiveSupportによっ…

IDEA 13.0 から 13.1 にアップデート後、リモートインタプリタで /home/xxxx/.rubymine_helpers/rb/testing/patch/testunit/minitest/unit.rb:24:in `<top (required)>': LoadError (LoadError)

/home/xxxx/.rubymine_helpersを一度削除してから、リモートインタプリタを登録し直す。

yum updateしたら、nokogiriがエラーを吐いてサービスが停止した。

不覚。 クライアントから連絡が来て、障害発覚。 godで動かしていたrails scriptが再起動後起動に失敗していた。 [ec2-user@app-production-001 current]$ sudo service app-god status delayed_job: delayed_job-0: start delayed_job-1: start delayed_job…

MT::Mailで添付ファイル付きメールを送信する

MT::Mail自体には添付ファイル付のメールを組み立てる機能はないが、自分でヘッダーやBodyを作成してパラメータとして渡すことで、送信することはできる。 確認環境 MovableType 6.0 MIME::Entity (MIME-tools) MT5でも動くと思う・・・たぶん・・・ サンプルコー…

IDEA 13 Keymaps: Emacs メモ

Keymaps: Emacs 標準keymapsとEmacsバインドがかぶってるところなどどうなっているのかメモ(随時追加予定) 入力補完 Basic Code Completion Alt + / 標準のCtrl + Spaceは選択開始で使用しているので。 もうちょっと空気を読んで、たとえばnewを入力したと…

ELB + EC2 + nginx 環境でアクセス元IPアドレスによる制限をかける

ELB + EC2 (nginx + unicorn + Rails)環境で運用中のサービスに対して、あるIPアドレスからディレクトリトラバーサルなどの攻撃を受けたので、その対応メモ。 取り急ぎ該当IPアドレスからのアクセスを遮断しようと考えたが、EC2の為、セキュリティグループで…

Data API + Location プラグインでAndroid地図アプリを作ってみる

いまさらですがMovableType Data APIとLocationプラグインのサンプルとして、かんたんなAndroid地図アプリを作成してみました。 機能としては以下のような基本的な検索&更新があります。 地図表示範囲内の記事データを取得してGoogle Maps Android API v2上…