kasei_sanのブログ

かせいさんのIT系のおぼえがきです。胡乱の方はnoteとtwitterへ

Nginxのライフサイクルポリシーおぼえがき

はじめに

こんなもの見ないで原点にあたるのが良いです

www.nginx.com

Nginxのバージョニング

  • stable : 安定版 と mainline : 主流版がある
  • 偶数バージョンが stable
  • 奇数バージョンが mainline
  • 毎年4月に、mainline の最新版から分岐する
  • 2020/06 現在は、 stable が 1.18、mainline が 1.19

stable と mainline の違い

  • mainline はupdateやbugfix がドンドン入る
  • stable は重大な修正のみ

本番で使うべきは stable と mainline どっち?

stable 一択

信頼性は高いですが、いくつかの実験的なモジュールが含まれている可能性があり、いくつかの新しいバグがある可能性もあります

docs.nginx.com

旧バージョンの安定版はサポートされないの?

最新の stablemainline 以外は、deprecated だそうです

1.12, 13 Release時の記事

以前の安定版ブランチである 1.10 は非推奨となっており、今後はアップデートやサポートを行う予定はありません

www.nginx.com

serverless のバージョンが古いまま、lambda ruby 2.7 を使うと The security token included in the request is invalid エラーが出てハマるので最新版にしよう

というお話です

出てくるエラー

ruby 2.7 で serverless invoke を実行すると --aws-profile を設定していても The security token included in the request is invalid が出ます

Error raised from handler method
{ 
  "errorMessage": "The security token included in the request is invalid.",
  "errorType": "Function<Aws::SSM::Errors::UnrecognizedClientException>",
  "stackTrace": [
    "/var/runtime/gems/aws-sdk-core-3.94.1/lib/seahorse/client/plugins/raise_response_errors.rb:15:in `call'",
    "/var/runtime/gems/aws-sdk-core-3.94.1/lib/aws-sdk-core/plugins/jsonvalue_converter.rb:20:in `call'",
    "/var/runtime/gems/aws-sdk-core-3.94.1/lib/aws-sdk-core/plugins/idempotency_token.rb:17:in `call'",
    "/var/runtime/gems/aws-sdk-core-3.94.1/lib/aws-sdk-core/plugins/param_converter.rb:24:in `call'",
    "/var/runtime/gems/aws-sdk-core-3.94.1/lib/aws-sdk-core/plugins/response_paging.rb:10:in `call'",
    "/var/runtime/gems/aws-sdk-core-3.94.1/lib/seahorse/client/plugins/response_target.rb:23:in `call'",
    "/var/runtime/gems/aws-sdk-core-3.94.1/lib/seahorse/client/request.rb:70:in `send_request'",
    "/var/runtime/gems/aws-sdk-ssm-1.76.0/lib/aws-sdk-ssm/client.rb:7859:in `send_command'",
    "/var/task/handler.rb:6:in `hoge'"
  ]
}

原因

serverlessのバグです

github.com

対応方法

最新版の serverless をインストールしましょう

macでMS公認の無料window10使用版を使う方法と、初期設定のメモ

事前準備

仮想マシンクライアントのVirtualBoxをダウンロードする

www.virtualbox.org

  • 無料です

MS公式の動作確認用のwindows仮想マシンイメージをダウンロードする

https://developer.microsoft.com/en-us/microsoft-edge/tools%E3%81%A1/vms/

  • 無料です
  • 使用期限は90日
  • ログインパスワードは Passw0rd!

VirtualBoxのGuest Additionsをインストール

仮想マシンと本体とのやりとりを便利にする、色々な機能をインストールする

  • 仮想マシンの電源をOFFにする
  • VirtualBoxの Machine -> Settings... -> Storage で新しくDVDデバイスを追加
  • 仮想マシンを起動した後、devices -> Insert Guest Additions CD を選択
  • 表示される手順に沿ってインストール & 再起動

日本語化 & macのキーボードを使えるようにする

こちらの (5) を参照

qiita.com

共有ディレクトリ

  • VirtualBoxの Machine -> Settings... -> Shard folder から追加
  • ゲストマシン側からは、ネットワークドライブとして見えるようになる

画面サイズをvirtualboxのウインドウサイズに追従させる

View -> Auto Resize Guest Display を選択

ソフトウェアアップデートで勝手に再起動しないようにする

  • 仮想マシン内のwindowsの設定から、「更新とセキュリティ」を選択
  • 「アクティブ時間の変更」から、作業時間を選択すると、その時間以外に再起動するようになる

スナップショットを取る

ここまでやったらスナップショットを取って、90日経ったらこのスナップショットからまた起動するようにしておけば楽

ruby3.0で「hashをキーワード引数に自動変換する機能」の削除がリスケされた流れを自分なりに理解する記事

なにこれ

ruby3.0で「hashをキーワード引数に自動変換する機能」を削除する予定だったけど、延期もしくは中止する

と、Matzがrailsのフォーラムでコメントしていたので、その経緯とかを把握するために記事にしました

discuss.rubyonrails.org

そもそも、hashをキーワード引数に自動変換する機能って?

def a(hoge:)
  p hoge
end

a(hoge: 'a')
a({hoge: 'b'})

こんな感じに、メソッドがキーワード引数の場合、hashを引数に渡しても良い感じに解釈してくれる機能

なんで自動変換機能が削除されるの?

この機能のために、バグが発生したり、機能の追加が面倒という欠点があったので、2017年頃には、ruby 3.0.0 からは削除されるという話が出ていた

また、その前準備の期間として、ruby 2.7では、非推奨の機能とされ、Warningが出るように変更された

上のコードをruby2.7.1で実行すると警告が出る

01.rb:6: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call
01.rb:1: warning: The called method `a' is defined here

techracho.bpsinc.jp

なんで自動変換機能が削除が延期されたの?

Railsフォーラムで、上記の警告が大量に出過ぎて鬱陶しい & 対応がすごい大変という話が上がった(らしい)

それに対して、Matzが以下のようにフォーラムにコメントした

  • 多すぎるWarningがノイズになっているのを認識している。2.7.2ではWarningを消すか減らす
  • 移行コストを低く見積もりすぎていた
  • 上記のために、ruby3.0でキーワード引数をどうするか(延期/中止)検討する

👇リスケに関しての記事

techracho.bpsinc.jp

今後どうするの?

Ruby側は、以下のissueで議論するらしい

bugs.ruby-lang.org

感想

  • Rails使っていて、rubyのアップデート考えている人は、Ruby側の結論と、それに対してのRails側の反応を見てから、どうするか決めたほうが良いんじゃないですかね
  • ruby2.7系については、APIレベルでの非互換性がある変更は無いはずなので、特に慌てることは無いのでは

AWS WAF Regionalの情報を取りたい場合、使うのは Aws::WAFRegional::Client だよ! というお話

これで2H程度ハマってしまった...

言いたいこと

  • AWS WAFには、グローバル(CDN用)と、Region単位の Regional がある
  • ruby SDKでWAFの情報を取りたい場合、グローバルとRegionalでは使用するclientが異なる
    • グローバルならば、 Aws::WAF::Client
    • Regional ならば、 Aws::WAF::WAFRegional

Aws::WAF::Client もドキュメントでは、引数に region を指定できるので、ここを指定すれば、Regional の情報が取れると勘違いしていた...

Amazon EventBridge おぼえがき

Amazon EventBridge って何?

Amazon EventBridge は、独自のアプリケーション、統合 Software-as-a-Service (SaaS) アプリケーション、および AWS のサービスからのデータを使用して、アプリケーションを簡単に接続することを可能にするサーバーレスイベントバス

aws.amazon.com

つまり?

SaaSとAWSのサービスをグルーコードなしで接続できるサービス

例えば、今までだったら Mackerel -> Webhook -> API Gateway -> lambda とかで実現していた処理を Mackerel -> EventBridge -> lambda とかでシンプルに実現できる

どんなSaaSと接続できるの?

ここから見れる

自分が使いそうなところだと

  • PagerDuty
  • Datadog
  • New Relic
  • Mackerel

どうやって連携するの?

例えばMackerelだと、ヘルプページに詳細が書かれてる

mackerel.io

これに沿って設定をすれば、例えばmackerelのアラート発生時に lambda を叩くみたいなのを、API Gatewayを経由せずに実行したりできる

Amazon EventBridge の特徴。イベントバス

イベントバスって?

要はこういうものらしい

f:id:kasei_san:20200327230502p:plain

  • 送信者が受信者を意識せずに、イベントを送信できるサービス
  • イベントバス管理者が、どのように誰が受信するかを制御する

AWSのアカウント毎にイベントバスが存在し、Amazon EventBridge はそこからイベントを取り出す

それって、Amazon SNSでよくない?

1つのアカウントでサービスが完了していたらSNSで良いはず

しかし、Amazon EventBridgeのイベントバスは他のアカウントにイベントを飛ばすことができる...! ので、こういった組織間でイベントを連携したい場合に使える

f:id:kasei_san:20200327231215p:plain

まとめ

  • Amazon EventBridge はイベントバスを制御することで、イベントのやり取りを簡単にするサービス
  • 送信側は最終的な受信先を意識する必要は無く、イベントバスに送るだけでよい
  • イベントバスの管理者が、受けたイベントをどうするか管理する
  • イベントバスでは、SaaS、アプリケーション(カスタムイベント)、CloudWatchEvent、他アカウントからのイベントなどを受けることができる
  • 1アカウント単体で使用する場合も、SaaSとAWSの連携にグルーコードが不要となるというメリットがある(通常のwebサービスだとこっちがメインの使い方になるはず

参考

http://d1.awsstatic.com/webinars/jp/pdf/services/20200122_BlackBelt_EventBridge.pdf

  • AWS BlackBelit の EventBridge 解説記事

SNSの代わりにEventBridgeを使用すべき5つの理由| ルミゴ

  • SNSではなくEventBridgeをつかう5つの理由を解説