AWS コンテナ設計・構築[本格]入門 でつまずいた箇所
書籍 AWS コンテナ設計・構築[本格]入門 のハンズオンを行った際に、エラーが出た箇所や、私の設定凡ミス集について記載しています。
前提
- Cloud9 の Platform には現時点で推奨されている「Amazon Linux 2023」を使用
- AWS の スクリーンショット画面 は 2024年9月時点 のもの
1. Cloud9 の環境の下準備でのエラー
P.240:フロントエンドアプリケーション内で読み込むパッケージを取得するため、Node.jsとYarnを導入する際に下記のエラーが発生しました。
- エラー文
npm warn deprecated nvm@0.0.4: This is NOT the correct nvm. Visit https://nvm.sh and use the curl command to install it.
npm
からインストールした nvm
が正しくないといわれています。
公式の方法でnvm
(Node Version Manager)をインストールするするため、下記の手順で対応しました。
- 既存の
nvm
をアンインストールする
sudo npm uninstall -g nvm
- 公式の
nvm
をインストールする
公式のインストール方法を使います。以下のコマンドを実行してください。
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
- シェルを再読み込みする
nvm
を使えるようにするために、シェルを再読み込みします。
source ~/.nvm/nvm.sh
- Node.js のインストール
nvm
を使って、書籍で指定されている Node.jsのバージョン14.16.1
をインストールします。
nvm install 14.16.1
- 設定を確認する
現在使用しているNode.jsのバージョンを確認します。
node -v
v14.16.1
これでNode.jsのバージョンがハンズオン通りとなり、以降の作業が進められるようになりました❗
もし使用するNode.jsのバージョンがv14.16.1
になっていない場合は、下記のようにバージョンを指定します。
nvm use 14.16.1
2. CodeDeploy でのデプロイエラー
P.314~:書籍の公式サイトにて下記のようにアナウンスされています。
AWS Secrets Manager→シークレット→sbcntr/mysqlページにある「シークレットの値」で、
キー :dbname
シークレットの値:sbcntrapp
を追加したうえで手順を進めてください。
参考:「4-6 データベースの構築」のSecret Manegerの設定の手順追加
上記対応を行わないと、CodeDeploy の Install 以降のイベントが一向に進まなくなります。未対応でエラーが起きてしまった場合、一度デプロイを停止します。
停止したタスクは、クラスタ > タスク > 希望するステータスをフィルタリング で「停止済み」を選択すると、下記のように確認できます。
3. DB接続するコンテナの起動エラー
P.331~:DB接続するフロントエンドアプリケーションのコンテナイメージ「sbcntr-frontend:dbv1」をdocker build
した際にはとくにエラーも表示されませんでしたが、ECR にpush後タスクを起動すると、下記のエラーが出ていました。
Error: Cannot find module '/app/.next/prerender-manifest.json'
尚、Cloud9上で同コンテナイメージを起動してみましたが、.next
フォルダは生成されているものの同じエラーが発生し'/app/.next/prerender-manifest.json'
は生成できていないことを確認しました。
もし解決方法がわかりましたら追記したいと思います。
4. CodeCommit の新規利用不可
P.337~:CodeCommit リポジトリの作成は、新規利用は不可になっていますので、以降のCodeCmmitを使用したハンズオンは他のリポジトリと連携して進める必要があります。
作成しようとすると、下記のエラーメッセージが表示されます。
尚、既存リポジトリがあるアカウントには、制限がありません。
参考:2024年7月27日時点におけるAWS CodeCommitとAmazon CloudSearchの新規利用に関して
おまけ
以降は
- Cloud9 の Platformに「Amazon Linux2」を利用した際の
docker build
エラー - 私の設定凡ミス集
の内容を記載しています。
コマンド「docker build」のエラー
P329:「Amazon Linux2」でDB接続するフロントエンド用のコンテナイメージをbuildする際、下記のエラーが発生しました。
- エラー文
error An unexpected error occurred: "https://registry.yarnpkg.com/@material-ui/icons/-/icons-4.11.2.tgz: ESOCKETTIMEDOUT".
原因:ダウンロードのタイムアウト(時間切れ)
yarn install
コマンドでのダウンロードに時間がかかりすぎると(上記の例ではicons-4.11.2.tgz)、ネットワークが正しくつながってないと誤認されインストールが途中で中断されます。
タイムアウトの時間を延ばすため、下記のようにsbcntr-frontend の Dockerfileを修正しました。
--network-timeout 600000
を追加し、ダウンロードのタイムアウトの待ち時間を10分に設定しています。
# install all dependencies including devDependencies
RUN yarn install --pure-lockfile --network-timeout 600000
1時間かかりました(笑)
尚、Cloud9 の Platform「Amazon Linux2023」上で実行した際は「 Building 634.1s 」で処理が完了しています。
セキュリティグループ の未付与
Cloud9からECRへの認証のためaws ecr get-login-password
コマンドを実行した際、下記のエラーが発生しました。
Connect timeout on endpoint URL: "https://api.ecr.ap-northeast-1.amazonaws.com/"
Error: Cannot perform an interactive login from a non TTY device
VPCエンドポイントのセキュリティグループで、セキュリティグループ「sbcntr-sg-management」からのアクセスを許可しているため、上記対応を行わないとブロックされてしまいます。
エラー文Error: Cannot perform an interactive login from a non TTY device
の内容を調べると、下記のような原因が列挙されていた為1つ1つ確認していましたが、私の場合はただの設定ミスでした。。
- AWS CLI バージョンの競合していないかの確認
- 有効な認証情報が設定されているかの確認
- AWS CLI コマンドの構文が正しいかの確認
参考:エラー: Cannot perform an interactive login from a non TTY device (TTY 以外のデバイスから対話型ログインを実行できません)
コマンドミス
DBユーザーを作成し、データをnpm run migrate:dev
で投入するまで、コマンドの打ち間違いで時間がかかりました。
正しい SQL (GRANT) コマンド
GRANT ALL ON `prisma_migrate_shadow_db%`.* TO migrate@'%' WITH GRANT OPTION;
このコマンドは、prisma_migrate_shadow_dbで始まるすべてのデータベースおよびその中のすべてのテーブルに対して、migrateユーザーにすべての権限を付与し、その権限を他のユーザーにも付与できるようにするものです。
その前までのコマンドでは「'」を入力していたため、淡々と打っていたら間違えていました。
正しい 環境変数設定
export DB_USERNAME=migrate
export DB_PASSWORD=sbcntrMigrate
export DB_HOST=sbcntr-db.cluster-xxxxxx.ap-northeast-1.rds.amazonaws.com
export DB_NAME=sbcntrapp
尚、環境変数が使用されているファイルは、下記コマンドで確認できます。
:~/environment/sbcntr-frontend (main) $ cat .env
以上、どなたかの参考になれば幸いです。
えみり〜でした|ωΦ)ฅ
Discussion
ですが、恐らく以下のコメントが関連すると思われます。
私も同様の問題に直面しており未だ未確認ではありますが、取り急ぎ情報提供まで。
smarkさま
コメント頂き、誠に有難うございます。
また、同様の事象として当ブログのリンクも貼り付けてくださり有難うございます。
共有いただいた内容を追記し、Issueも併せてフォローさせて頂きましたので、随時本記事も更新していたいと思います🙇(大変助かります。。!)