2022年4月14日木曜日

【解決】AWSのStep Functionsハンズオンにつまづく「ステートマシンを更新できませんでした。」

 




AWSのサーバレスの勉強中です。

AWS Batch と AWS Step Functions を使ってAWS Batch および AWS Step Functions を組み合わせて、動画処理ワークフローを作成する をやっているのですが、、、



保存できない!!!!


そして、理由がわからない!!!


数時間悩んでしまいました。。。。


そもそも、ハンズオンの内容と、実際のAWSの画面が違う。


恐らく古い資料だからかと思うのですが、これがミスを誘う。。。


間違っていたと思われるのが「ジョブ定義」


「プラットフォーム互換性」では

プラットフォームタイプとして「Fragate」と「EC2」が選択できる。

デフォルトは「Fragete」だが、おそらく最近のサービスなので、

サンプルでは「EC2」だったのだろう。

どちらでもよいかもしれない。


問題なのは以下の2つ

4.4 - [コンテナイメージ] に「137112412989.dkr.ecr.us-east-2.amazonaws.com/amazonlinux:latest」と入力します


[コマンド] を [Echo が動画トランスコーディングジョブを実行] に設定します。

1つ目のコンテナイメージが全く入れてなかった。

画面上は「イメージ」としか書いてなくて見落としていたと思う。


次に「[コマンド] を [Echo が動画トランスコーディングジョブを実行] に設定します。」だ。

意味が分からず読み飛ばしていたと思う。

AWSのキャプチャ画面を見てみると、どうやらコマンドの内容

「echo Performing Video Transcodeing Job」

を直訳してしまっているようだ。

・・・echoのあと、シングルクォーテーションで囲まなくてもよいのか???


メモリも1024と言っているのに、現在は2GBから。

まあ、多い分にはいいか。


さあ、次は「ステップ 5: ステートマシンでワークフローを作成する」です。

JSONで書かれた文字列をコピペして、、、

ちゃんとリージョンとAWSアカウント番号は更新して、、、

さあ保存!


だめだ。。。

状況変わらない、、、

もうだめだ、、、


ARN 内の 20 のアカウント参照がすべて置き換えられていることを確認します。


そうそう、一応書き換えたけどもう一回確認するか、、、

自分のアカウント番号で検索して、、、

1つ、2つ、、、、


4つしか変えていない!!!


これか!?

残りを一気に置換!

どうだ。


だめだ。。。

もう手掛かりなしか、、、?

まだだ、「データフローシミュレーター」でテストしてみよう

「ステート入力」に今のJSONを突っ込む、「次へ」

「InputPath」でInputPath の後の状態入力でエラー

「No results for path: '$.library' in state input JSON.」


ライブラリなんて何も使っていないよ。


「次へ」ボタンも押せないし、、、


ここでかれこれ数時間


結局「InputPath」に入っていた、「$.library」を消せば次に行けることが判明。

最後までとりあえず行けた、、、


5.6 - 次に、IAM ロールをワークフローに追加します。[IAM ロールの作成] を選択し、「StepsBatchTutorial_Role」という名前を付けます。Step Functions によってワークフローが分析され、ワークフローで使用されるリソースを含む IAM ポリシーが生成されます。ということは、JSON自体には悪いことはない・・・?


もしかして、、、権限が無いだけか?


5.6 - 次に、IAM ロールをワークフローに追加します。[IAM ロールの作成] を選択し、「StepsBatchTutorial_Role」という名前を付けます。Step Functions によってワークフローが分析され、ワークフローで使用されるリソースを含む IAM ポリシーが生成されます。
これ、やってないか、、、?

たしかに、、、StepsBatchTutorial_Role がない。

AWSの手順だと、ステートマシン作成中につくっているな。。。

後から自分で作れるか、、、?


多分「Step Functions」選べばいいんだよな、、、


ロールもよくわからないがSuperUserとか入れとけば、、、


いや待て


確かデフォルトのJSONは保存できていたぞ。


編集中のJSONはいったん別のファイルにバックアップして、、最初からやり直す


デフォルトで入っているJSONをちょっと修正して保存すると、、、、できる。


やっぱりサンプルのJSONがおかしいのか、、、、

いきなり修正は厳しいぞ。。。


でも「Workflow Studio」でちょっとずつ機能を削りながら、保存できるところまでいけば、問題は切り分けられるかもしれない。






思い切って下のほう削ってみた


どうだ。

ステートマシンを更新できませんでした。

   

No!


最初からエラーだったのか。


そもそもAWS Batchが動いていないのか?

StepFunctionとAWS Batchのシンプルなサンプルで試してみる。


・・・うごく


ジョブ定義を見てみる



リージョンが違う


いやでも説明で「自分のリージョンに変更して」って書いてないし。

ちょっとおかしいなと思ったけど

勝手に変えて動かなくなるのも嫌で、そのまま言われたとおりに書いてしまっていました。

※特にリージョンについての記載はない。


コンテナプロパティのイメージって、最初に作成したら、後から修正できないんですね。

しぶしぶ削除して再作成。


ジョブ設定のイメージに以下を設定します。

137112412989.dkr.ecr.ap-northeast-1.amazonaws.com/amazonlinux:latest


さあ今度はうまくいくか

ステートマシンを更新できませんでした。

   

まだ、きっとあとちょっとだ。

ジョブ定義を見直す


なんか改訂の数値が上がっている。

でも合わせてもダメ。

でも気づいた点が1点


「ステップ 4: ジョブ定義をセットアップする」で作成したジョブ定義名が以下ですが、、、

StepsBatchTutorial_TranscodeVideo

StepsBatchTutorial_FindFeatures

StepsBatchTutorial_ExtractMetadata


JSONに乗っているジョブ定義を抜き出してみると、、、

"JobDefinition": "arn:aws:batch:ap-northeast-1:xxx:job-definition/StepsBatchTutorial_ExtractMetadataa:4",

"JobDefinition": "arn:aws:batch:ap-northeast-1:xxx:job-definition/StepsBatchTutorial_ExtractFeatures:3",

"JobDefinition": "arn:aws:batch:ap-northeast-1:xxx:job-definition/StepsBatchTutorial_TranscodeVideo:3",


何か知らないのなくない?


StepsBatchTutorial_ExtractFeatures

→StepsBatchTutorial_FindFeatures でしょ。


直してみます。


ステートマシンを更新できませんでした。


まだ駄目か。

最後の手段は、View Jobボタンだ!

以下のボタンを押して、ちゃんと定義に飛べば存在するジョブやキューに行ける、

なんか出なかったら設定がおかしい。


みつけた!


2つ目のキューが必要だったのに作成できていなかったようです。

3.5 - [キュー名] に「StepsBatchTutorial_LowPriorityQueue」と入力します

[優先度] に 1 と入力します。

ドロップダウンボックスからコンピューティング環境 [StepsBatchTutorial_ComputeEnv] を選択します。

[ジョブキューの作成] をクリックします。

これで、2 つのキューが作成されます。

 

これでどうだ

ステートマシンを更新できませんでした。


もうエラー原因どこだか教えてください!!!


といっても答えてくれる人がいないので、調べます。


うまく動いたステートマシンとの差異を確認していくと、

うまくいったほうのIAMのポリシーが

BatchJobNotificationAccessPolicy

だめなほうのポリシーが

XRayAccessPolicy-xxxx

となっていました。


これか?

自分でIAMの画面で必要な権限を見つけてやろうとしたのですが

慣れておらず、「よくわからないがFullAccess系を」となりそうだったので、再作成します。

今度こそ、、、



で、できた、、、。


結局以下が原因かな。。

・「ジョブ定義」「ジョブキュー」の作成漏れ

・サンプルのJSONがハンズオン内の「ジョブ定義」名称と異なる

・ジョブ定義のコンテナのイメージ指定のリージョン指定ミス

・Step Functionsを実行するIAMの権限不足

今日はさすがに疲れた、、、

初めてAWS BatchとStep Function触ったけどこれからどうなることやら、、、