😺

コードで学ぶAWS入門をやってハマった点

2024/07/30に公開

はじめに

仕事でデータセンター関連の業務に携わることになり、データセンターでどんな事をやっているんだろうということを身をもって知るため、下記のハンズオンをやってみることにした。

https://tomomano.github.io/learn-aws-by-coding/

結論から言うとテキストの内容は一応完走。しかし、いくつかつまずいたところがあり、この記事ではそれらを備忘録も兼ねてまとめておきたいと思う。

なお、ほぼ自分の環境やAWS側の仕様変更によってつまずきが生じていた。テキスト自体の
内容は素晴らしく、感謝の意味を込めて下記書籍版を購入した。
(この記事はWeb版をもとに書いている。)
https://amzn.asia/d/a7Jdo90

実行環境

  • Macbook Pro (2018)
    • CPU Core i7 2.7GHz Quad core
    • メモリ 16GB
    • SSD 1TB
    • Mac OS 14.4

用意されているDocker imageは使用ぜず実行した。

私のクラウド歴

データセンター関連の業務に携わると最初に書いたが、どちらかというとデータセンターで使われる設備に関わるもので、クラウド上で何かを開発する立場ではない。AWSはおろかAzureなども一切触ったことがなく、クラウドでの開発に関しては超初心者である。
(一応 AWS のアカウントは10年くらい前に取得していたのですがずっと休眠でした。)
あと、Web 関連も疎く、ウン十年前の HTML や Perl言語 で CGI を書いていた頃の知識で止まっている状況。

各ハンズオンでつまずいたところ

Hands-on #1: 初めてのEC2インスタンスを起動する

アカウントがロックされている

4.4.4. デプロイを実行でいきなり Resource handler returned message: "This account is currently blocked and not recognized as a valid account. とエラーが出て止まってしまった。
Webのコンソールなどではログインできていたので、Elastic Compute Cloud (EC2) の使用に制限がかかっていたようである。

サポートセンターに連絡して解決

エラーメッセージの後ろに、サポートセンターにコンタクトせよとURLとともに書かれていたので、そこにアクセスしてみた。
最初に "アカウントと請求" のサポートか "技術" のサポートかの2択が出るが、私が入っているBasic Support Plan では前者しか受け付けていないようだ。今回はアカウントがロックされているように見えるので前者の方でサポートしてもらえそうであった。エラーメッセージをコピペして投げてみた。
半日ほどしてサポートの方から返信があり、「ログイン情報の更新としてパスワードリセットと MFA の設定が必要なため」制限がかかっていたとのこと。実はこのハンズオンの前準備でパスワードリセットとMFAの設定は済ませていたのですが、制限が解除されていなかったようだ。
担当の方に制限の解除の手続き依頼をしていただき、暫くするとアカウントのロックは解除された。

Key pair が存在しないと言われることがある

上記が解決しても Resource handler returned message: "The key pair 'HirakeGoma' does not exist というエラーで止まることがある。

環境変数 AWS_DEFAULT_REGION を毎回設定して解決

Key pair は Region ごとに作成するので、環境変数 AWS_DEFAULT_REGION が正しく設定されていないとダメなようだ。テキストの指示通り進めると、~/.aws/config の中に default region の設定を書くようになるが、cdk ではこの設定が効かない? (aws cli向けのみの設定?)。
~/.aws/credential の内容は cdk でも有効なのか、AWS_ACCESS_KEY_ID と AWS_SECRET_ACCESS_KEY については改めて環境変数として設定しなくても良さそうである。

Hands-on #2: AWS でディープラーニングを実践

インスタンスの起動上限数がわからない

テキストの最初に以下のように書かれており、私のアカウントも例に漏れず Limit が 0 であった。

初期状態の AWS アカウントでは, GPU 搭載の Gタイプのインスタンスの起動上限が0になっている>ことがある. これを確認するには, AWS コンソールから EC2 の画面を開き,左のメニューから Limits を選択する. その中の Running On-Demand All G instances という数字が G インスタンスの起動上限を表している.
もし,これが 0 になっていた場合は, AWS の自動申請フォームから上限緩和のリクエストを送る必要がある. 詳しくは 公式ドキュメンテーション "Amazon EC2 service quotas" を参照のこと.

そして申請フォームから上限数変更を入力するのが、はて、上限を幾つにして良いかわからない。

最低でもLimit=4 にして解決

最初は恐る恐る Limit=1 で申請したが依然NG。エイやっとLimit=5 で申請したら動くようになった。申請すると反映まで数時間だった。ちなみに実際に動かしたら必要な数は4だった。

なお、2024年5月現在、EC2の画面の左メニューに"Limits"は存在していないようだ。
サービスの中から、Serveice Quotasを選択し、Service Quotas → AWS services →
Amazon Elastic Compute Cloud (Amazon EC2) →
Running On-Demand G and VT instances と辿ると確認や設定が可能であった。

Hands-on #3: AWS で自動質問回答ボットを走らせる

このハンズオンは特に問題なく進められた。

Hands-on #4: AWS Batch を使って機械学習のハイパーパラメータサーチを並列化する

nodejs12.x をもうサポートしていないと言われる

cdk deploy すると、Resource handler returned message: "The runtime parameter of nodejs12.x is no longer supported for creating or updating AWS Lambda functions.
おかしい、このハンズオンでは AWS Lambda を使っていないはずだが、cdk が吐いた cdk.out/SimpleBatch.template.json には確かに下記のような記述があり、S3 の AutoDelete機能?によって自動生成された Lambda の使用に関連があると推測される。

'''
"CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F": {
"Type": "AWS::Lambda::Function",
"Properties": {
"Code": {
... (中略)
"Runtime": "nodejs12.x",
'''

cdk の revision を上げてみる

上記エラーメッセージを検索すると、cdk の version を上げる解決法がちらほらあったので、まずはそれを試してみた。(そういえばこのハンズオンはテキストの最初に注意書きがあるように非常に古い cdk を使うことになっている。)
しかし、依然として解決しなかった。cdk の Versionを上げても、まだ要求する nodejs の Version には届かないようである。
結局こちらは現状うまい解決方法が見つかっていない。

(後半へ続く)

Discussion