実現したいこと
ECSのサービス内にあるタスクを一度削除してしまったので、改めて「タスクの実行」をしたところ、「API の失敗 理由: RESOURCE:CPU」というエラーが出てきてしまったので、こちらのエラーを解消させたいです。
前提
起動タイプはEC2でECSにデプロイさせています。
・SSL化は完了している(ALBと紐付け完了済み)
・ECRにDockerイメージをpush済み、イメージが正常にリポジトリに登録されているか下記コマンドで確認済みです。
一度デプロイを完成させています。
発生している問題・エラーメッセージ
タスクを実行させた時 API の失敗 理由: RESOURCE:CPU サービスのイベント service onsen-service was unable to place a task because no container instance met all of its requirements. The closest matching container-instance feb※※ has insufficient CPU units available. For more information, see the Troubleshooting section of the Amazon ECS Developer Guide.
該当のソースコード
■ECSタスク作成 タスク定義名:onsen-task タスクロール:ECS-Exec-role2 タスク実行ロール:ecsTaskExecutionRole ネットワークモード:bridge ボリュームの追加 名前:sockets タイプ Docker ドライバー:local スコープ:task タスクメモリ (MiB)512 タスク CPU (単位)512 ■VPC VPC:VPC_for_onsen IPv4 CIDR ブロック:10.0.0.0/24 ■サブネット作成 上記VPC作成に伴いサブネットが1つ勝手に作られるが、名前がデフォルトなので修正。 onsen-Subnet-1a もう一つサブネットを作成。 VPC:VPC_for_onsen サブネット名:onsen-Subnet-1c IPv4 CIDR ブロック:10.0.1.0/24 ■コンテナの定義 onsen-nginx-container イメージ:{AWSの12桁ID}.dkr.ecr.ap-northeast-1.amazonaws.com/onsen-nginx ポートマッピング:0:80 マウントポイント コンテナパス:/app/tmp/sockets ソースボリューム:sockets ログ設定チェックON onsen-container イメージ:{AWSの12桁ID}.dkr.ecr.ap-northeast-1.amazonaws.com/onsen コマンド: ["bundle","exec","puma","-C","config/puma.rb"] ポートマッピング:0:3000 マウントポイント コンテナパス:/app/tmp/sockets ソースボリューム:sockets ログ設定チェックON 環境変数 DB_HOSTNAME {RDSのホストARN} DB_NAME {アプリDB名} DB_PASSWORD password DB_USERNAME root RAILS_ENV production RAILS_MASTER_KEY {Railsのconfig/master.keyの値} RAILS_SERVE_STATIC_FILES true ■ELB作成 ・ターゲットグループ作成 名前:onsen-Target-Group Choose a target type:Instances 他そのまま ・ロードバランサー作成 Application Load BalancerInfoを選択 名前:onsen-ELB VPC:上記と一緒 サブネットも2つ選択する。 セキュリティグループ選択 リスナーに上記ターゲットグループを選択 ■ECSクラスター EC2 Linux + ネットワーキングを選択 クラスター名:onsen-cluster プロビジョニングモデル:オンデマンドインスタンス EC2 インスタンスタイプ:t2micro インスタンス数:2 EC2 AMI ID*:そのまま ルート EBS ボリュームサイズ (GiB):そのまま キーペア:上記で作成したキーペア VPC:上記のもの サブネット:Publicのサブネットどちらか1つ指定すればOK? パブリック IP の自動割り当て:サブネット設定を使用 セキュリティグループ:今回作成したものを割り当て コンテナインスタンスの IAM ロール:ecsInstanceRole ■サービスの 起動タイプ:EC2 タスク定義:上記のもの クラスター:上記のもの サービス名:onsen-service サービスタイプ:REPLICA タスクの数:2 最小ヘルス数:50 最大率:100 デプロイサーキットブレイカー:無効 デプロイメントタイプ:ローリングアップデート ロードバランサーの種類:ALB サービス用の IAMロールの選択:AWSServiceRoleForECS ロードバランサー名:onsen-ELB ロードバランス用のコンテナ:nginxを「ロードバランサーに追加」ボタンクリック
試したこと
メモリが不足している可能性があったので、EC2 インスタンスタイプを「t2.micro」から「t2.small」に変更しました。
新しくタスク定義を作成するために、タスクサイズを
タスクメモリ (MiB)512
タスク CPU (単位)512
だったものを
タスクメモリ (MiB)1024
タスク CPU (単位)1024
に変更しました。
参考サイト
https://repost.aws/ja/knowledge-center/ecs-change-container-instance-type
https://repost.aws/ja/knowledge-center/allocate-ecs-memory-tasks
補足情報
ECS作成時の参考サイト
https://qiita.com/saongtx7/items/f36909587014d746db73
ECSはまだまだ浅学なため、知識もまだまだ不足しています。
なので拙い説明となってしまい申し訳ありません。
AWS公式等色々と読んで試してみても、解決の糸口を見つけられなので、お力添え頂けるよう、よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。