【気をつけよう!】はじめての無限ループ

記事タイトルとURLをコピーする

CI部の古川(と)です。最近はゴーヤにはまっています。

ITの世界に足を踏み入れ1年4か月経ち、初めて「無限ループ」を体験しました。 とても恐ろしかったです。

本ブログは自分に対する戒めと共に無限ループには気をつけようという啓蒙を意図しています。

はじめに

S3へファイルをPUTしたことをトリガーにしてStep Functionsステートマシンを起動させたい!
という思いで、以下の公式チュートリアル「Amazon S3 イベント発生時にステートマシンの実行を開始する」を実施していました。
docs.aws.amazon.com

チュートリアルを実施して1週間後、Step Functionsを見たところ、なんと!ステートマシンの実行履歴が1万6千回を超えていました。(こわい)

f:id:swx-tomoe-furukawa:20210818171216p:plain

何も考えずに手順に従うとこうなるのかぁ…と実感したので、無限ループが発生した原因と該当チュートリアルで無限ループをさせないための方法を書いていきたいと思います!

無限ループが発生した原因

今回AWS公式チュートリアルで作成した構成はこんな感じです。

f:id:swx-tomoe-furukawa:20210818180752p:plain

S3バケットにファイルをPUTすると
CloudTrailでS3のPUTイベントを検知

EventBridgeが発火

Step Functionsステートマシン起動

といった流れで動く構成です。無限ループどこで発生するの?という感じですが、S3バケットが1つしかない点がポイントです◎

そうです……
EventBridgeのトリガーとなるS3バケットCloudTrailのログを吐くS3バケットが同一です!!

図に示すとこんな感じ。
f:id:swx-tomoe-furukawa:20210824163453p:plain

この構成でS3バケットにファイルをPUTすると
①CloudTrailがPUTイベントを検知

②CloudTrailにログが出力され、そのログをS3バケットにPUT

①CloudTrailがPUTイベントを検知

②CloudTrailにログが出力され、そのログをS3バケットにPUT

①CloudTrailがPUTイベントを検知

・・・ を無限ループします!!!!!

無限ループしている間、毎回EventBridgeが発火し、Step Functionsステートマシンが起動します。

その結果、1週間後にStep Functionsステートマシンの実行数が1万6千回となっていたということです。

該当チュートリアルで無限ループさせない方法

これはとっても簡単ですね。
CloudTrailがログを書き込む用のS3バケットを作成しましょう◎ f:id:swx-tomoe-furukawa:20210824163520p:plain これで無限ループとは決別できます!(あんしん)

ちなみに料金は...

無限ループが発覚した際に一番怖かったのが料金です。クラウドの良さ「従量課金」が、とてつもなく恐ろしいことに思えた瞬間でした。

結果は...

大した額にはなりませんでした!!良かった!!

  • EventBridge

    • EventBridgeは、イベントソースがAWSリソース(今回の例ではS3)だったため、無料でした。
  • Step Functions

    • Step Functionsの料金体系は、「0.025USD/1,000 回の状態遷移」となっており、かつ1 か月あたり 4,000 回の状態遷移が無料利用枠です。

    • 今回は以下画像の定義でステートマシンを作成しているため、状態遷移は4回(Start→Hello→World→End)です。
      f:id:swx-tomoe-furukawa:20210824152848p:plain

    • 状態遷移4回 × ステートマシン実行数16,000回=68,000回
      68,000回 - 無料利用枠4,000回=64,000回
      64,000回 × 0.000025 USD = 1.60 USD
      約160円でした!

安いサービスでほんとうに良かったです。

参考: aws.amazon.com aws.amazon.com

最後に

IT業界に入ってから、無限ループ怖いぞ!とはよく聞くものの、まさか自分が無限ループを無自覚でやってしまうとは思っていませんでした。

比較的値段が高いAWSサービス(機械学習系とか)で無限ループしていたら……と思うと恐ろしいですね。

気をつけよう!無限ループ!

古川智絵 (執筆記事の一覧)

2020年新卒入社 技術課(SRE1課)に所属 好きな食べ物はみそ汁