原田です。今回は業務で利用している社内メールが送信されないことがありましたので調べてみました。
AWS上に構築したフォームに入力があると、それらを集計して毎朝通知するメール処理を行っています。
この通知機能をリリースした時は毎日通知していましたが、いつの頃か通知されない日が不定期に発生しました。(業務には直接影響しない通知なのでこの不具合を放置していましたが)改善したいと思い調べることにしました。
まずは通知処理を実行しているステートマシン(AWS Step Functions)の実行状況を確認しました。不定期に失敗している様子が伺えます。
ステートマシンは以下の流れで各処理を実施していますが、「Get log」が赤く表示されて失敗していることが分かります。 この画面ではエラーメッセージなども確認できます。
「Get log」で実施しているGetlog*****
はRubyで作成したAWS Lambdaです。このLambdaでは以下の処理を実施しています。
プログラムのことをご存知の方には難しいことをしているように見えないと思います。ただし上記イメージに記載されているエラーメッセージRate exceeded
は、AWSサービスのAPIを短時間に大量に呼び出している時に発生するエラーです。
そこでCloudWatchサービスに定義されているクォータ(制限値)を確認しました。Getlog*****
で使用しているAPIはDescribeLogStreams
とGetLogEvents
で、これらAPIを(条件に一致するログを取得するため)繰り返し呼び出しています。
Lambdaの失敗が不定期に発生しているので、「Getlog*****
で実施しているAPIリクエストの呼び出し回数が(ログストリームやログイベントの量によって)クォータを超えたためRate exceeded
が発生しているのかも」と思いました。
短時間でAPIを呼び出していることが原因のようなので、sleep
メソッドを組み込むことでAPI呼び出しを待たせることにしました。
loop do resp_streams = client.describe_log_streams(param_streams) resp_streams.log_streams.each do |log_stream| ... loop do resp_events = client.get_log_events(param_events) resp_events.events.each do |event| ... # ログを取得 end break if resp_events.next_forward_token == param_events[:next_token] param_events[:next_token] = resp_events.next_forward_token sleep(0.3) end end break unless resp_streams.next_token param_streams[:next_token] = resp_streams.next_token sleep(0.3) end
サービスクォータはAWSアカウントごとに定義されています。同時間帯に別の処理で同じようなことを実施するとRate exceeded
が発生することもあり得ます。そこでステートマシンにリトライ処理(Exponential Backoff)を組み込みます。
上記の改善はまだ動作確認をしていませんのでリリースは少し先になりますが、うまく動作すると信じています。今回の改善で以下のことが分かりました。
【スタッフ募集中】
弊社ではAWSを活用したソリューションの企画・設計・構築・運用や、Ruby on Rails・JavaScriptフレームワークなどを使用したアプリケーション開発を行うスタッフを募集しています。採用情報の詳細
弊社での勤務に関心をお持ちの方は、知り合いの弊社社員・関係者を通じてご連絡ください。
![]() |
My Redmineのログダウンロード機能のログファイルが解凍できない事象を改善。 |
![]() |
RedmineのMy Page機能で利用者ごとのダッシュボードが作れます |
![]() |
台湾で開催されたCOSCUP 2023に初めて参加 |
![]() |
台湾で開催されたCOSCUP 2023というオープンソースのイベントでRedmineの発表を中国語で行いました |
![]() |
Redmine Japan Vol.3における発表と協賛企業としてブースを出展 |
![]() |
社員研修に伴うサポート体制変更・休業のお知らせ(5/20〜23) 社員研修に伴い、5月20日〜23日はサポート体制の変更および休業とさせていただきます。 |
![]() |
オープンソースカンファレンス2025 Nagoyaに弊社代表の前田が登壇(ブース出展あり) オープンソースカンファレンス(OSC)2025 Nagoyaに弊社代表の前田が登壇。『Redmineの意外と知らない便利な機能(Redmine 6.0 対応版)』をテーマに発表します。 |
![]() |
エンタープライズプラン向け「優先サポート」を開始 My Redmineでは、エンタープライズプランをご契約のお客様向けにサポート対応を優先的に行う「優先サポート(プライオリティサポート)」を開始いたしました。 |
![]() |
プロジェクト管理ツール「RedMica」バージョン 3.1.0をリリース Redmine互換のオープンソースソフトウェア ファーエンドテクノロジー株式会社は、2024年11月19日(日本時間)、Redmine互換のプロジェクト管理ソフトウェア「RedMica 3.1.0」をリリースしました。 |
![]() |
Redmineの最新情報をメールでお知らせする「Redmine News」配信中 新バージョンやセキュリティ修正のリリース情報、そのほか最新情報を迅速にお届け |