ラベル AWS の投稿を表示しています。 すべての投稿を表示
ラベル AWS の投稿を表示しています。 すべての投稿を表示

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

2021年12月11日土曜日

アマゾンのAWSはもうダメ?

 


PRESIDENT 2021年12.31号を見たら気になる記事が目に入りました。


大前研一氏の「日本のカラクリ」の記事の「次のGAFAM最強はグーグルだといえる理由」です。


途中、GAFAMの経営者はお金を持ちすぎておかしくなっていってしまっている、というのは、まあご愛敬として、「アマゾンのAWSはもうきたいできない?」です。

理由としては以下でした。

・同種のサービスがすぐ真似できる

・マイクロソフトやIBMあたりも遅ればせながら力を入れて大刀してくることも考えられる


うーん。

真似はできると思うけど、、、、

まだMicrosoftやIBMのクラウドは使おうとは思いませんね、、、

使うとすれば「安い」か「そこにしかない機能がある」かです。


もしベンチャーでとがった機能があれば、どちらも満たすようなサービスを出してくるかもしれない。しかし追い上げるのはどれも超大企業と呼ばれる企業ばかり。あまりとがった機能は期待できないです。


でも、Google Cloudであれば、ちょっと触ってみたいかな。

あ、この流れは、、、、

大前氏の記事の間にでかでかと書いてあった内容に、、、

「地球とサイバー空間はグーグルに支配される」


他にも、GAFAMのトップの人たちの写真が載ってて、あまり見ないショットだったのですが、

・なぜかイーロン・マスクだけちょっとカッコいい写真

・マークザッカーバーグの顔がなんか面白い

・Googleのトップ「サンダー・ピチャイ」って知らなかった、、、っていうかMicrosoftもAmazonも知らない人だ、、、


色々面白い記事でした。

もしよければ見てみてください。


2021年12月6日月曜日

【無料】AWSのサーバレス講座がいい! 第1回

 


AWSで最近サーバレスのシステムを(やっと)作りたいと思い、


本屋では4000円も5000円もするようなAWSの教科書はあきらめ、


何とかネットで勉強できないか、、、と調べていたら、ありました。


はじめてのサーバーレス ~ サーバーレスな会員制サイトを作ってみよう ~ 第 1 回


もう本当に感謝しかない。


AWS公式で分かりやすいページを作ってくれているなんて。


でもちょっとまってください。


かなり途中で躓きました。


私の知識が足りないだけかもしれませんが、今後サーバレスをなるべく無料で勉強したい方のために、私が躓いたところを共有して、時間の節約にしてもらえたらなと思います。


1・第3回まであるが、リンクが第1回から2回がつながっていない

あるあるですが、第1回から買い始めたページは、第2回を書くとき、そのURLがわからないので、第2回が作成されたとき、第1回からリンクを張ってあげるのが親切ですが、それがなかったです。

以下がすべての会となります。

はじめてのサーバーレス ~ サーバーレスな会員制サイトを作ってみよう ~ 第 1 回


はじめてのサーバーレス ~ サーバーレスな会員制サイトを作ってみよう ~ 第 2 回


はじめてのサーバーレス ~ サーバーレスな会員制サイトを作ってみよう ~ 第 3 回


2.最新版はGitにあり

第3回をみると、

AWS Cloud9 から Lambda を起動する手順が、昨年 11 月に変更

ということで、このGitにあるpdfを見ないと、説明通りの作業ができなくなってます。

この辺りは、変化の激しいAWSでは仕方のないことかもしれませんね。


3.Git資料でも追いつけてない

Gitの資料(Scenario.pdf)の中で、「5.1.1. Cloud9 環境のディスク容量拡張」という章があります。


Gitにある Serverlesshandson.zip の中にある resize.sh を Cloud9にアップロードする操作が書かれてあるのですが、これが今(2021年12月時点)では出てこない。


しょうがないので、メニューからではなく、いきなりドラッグ&ドロップでシェルファイルをアップして、とりあえずアップできたが、今度は「sh resize.sh 20」を実行しても、(Command not Found 等の)エラーが発生。サイズ拡張できません。

「エラーが出たときはresize.sh のファイルの中身をコピペしてcloud9に張り付けて」


と書かれていたので、それをしてもエラーは変わらず。


結局AWSのEC2の管理画面から以下の手順でやりました。

1.Cloud9管理画面の「Your environments」から、自分のCloud9の名前をクリック

  ※ Open IDE ではないので注意 



2.Cloud9管理画面の「Environment Detail」のなかの「EC2 instance」の「Go To Instance」をクリック



3.EC2管理画面の「インスタンス」画面に飛ぶので、そこで選択されたものがCloud9のEC2。

  インスタンスIDをメモっておく




4.EC2管理画面の「Elastic Block Store」の「ボリューム」をクリック

  「アタッチ済み情報」列の中で、3.で控えたインスタンスIDが書かれた行が

  Cloud9で使用しているEC2のEBSとわかる。



5.4.を右クリックする

  メニューが出てくるので「ボリュームの変更」をクリック



6.「ボリュームの変更」画面が出てくるので、「サイズ」に希望の数値を入れ「変更」をクリック



となります。


他にも引っ掛かりポイントがあったのですが、まだ解決できていないので

解決でき次第、またまとめたいと思います。





2021年11月19日金曜日

AWS CodePipeline で XMLParserError

 


AWS の CodePipelineを使って、EC2にデプロイしようとしてはまったので情報共有。


CodePipelineで「パイプラインを作成する」をクリック

「パイプラインの設定を選択する」

を押下。


「高度な設定」を展開すると、「アーティファクトストア」のところで


XMLParserError

というエラーが出ていました。

「高度な設定をやろうとしたときに毎回でてくるのかな、、、」

と思って、取り合えず次の画面に行こうとして、「次に」をクリックすると

そこでもエラー。

なにもしてないのに!!!!

調べた結果わかったのが、、、なんと、、、

AWS画面のリロード、再ログインで復旧しました。

どうもログインしている情報が、時間がある程度たつとなくなってしまっている感じ。

もし同様の事象が発生している方がいれば、「AWSの再ログイン」してみてください。