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触ったけどこれからどうなることやら、、、