New user sign up using AWS Builder ID
New user sign up using AWS Builder ID is currently unavailable on re:Post. To sign up, please use the AWS Management Console instead.
Amazon ECS コンテナインスタンスを保護するために、ベストプラクティスと強化手法を実施する方法を教えてください。
使用している Amazon Elastic Container Service (Amazon ECS) インスタンスまたは基盤となる Amazon Elastic Compute Cloud (Amazon EC2) インスタンスで、予期しない終了、再起動、スケーリングの問題、データ損失などの問題が発生しました。Amazon ECS コンテナインスタンスを保護したいです。
簡単な説明
Amazon ECS で Amazon EC2 起動タイプを使用する場合、EC2 インスタンスで発生する終了、再起動、パフォーマンスのボトルネックなどの問題により、コンテナが影響を受けます。これらの問題を解決するには、Amazon ECS コンテナインスタンスを保護するためのベストプラクティスを実施し、Amazon EC2 のメンテナンス、スケーリング、トラブルシューティングに対処してください。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
Amazon ECS コンテナインスタンスを保護する
AWS アカウントの root ユーザーアクセスを制限する
アカウント設定の変更や root ユーザーパスワードの変更など、必要な場合以外は root アカウントを使用しないでください。代わりに AWS Identity and Access Management (IAM) ロールとポリシーを使用して、最小特権のプリンシパルに準拠したアクセスを設定してください。さらに、root アカウント用に多要素認証 (MFA) を設定します。
セキュリティ強化を実施する
セキュリティグループを使用して、インバウンドとアウトバウンドのトラフィックを必要な IP アドレスとポートのみに制限します。Amazon ECS コンテナインスタンスに定期的にパッチを適用して更新します。Amazon Inspector を使用して脆弱性を特定することもできます。
暗号化を使用します。たとえば、転送中の機密データには HTTPS などを使用し、保存中のデータには Amazon Elastic Block Storage (Amazon EBS) ボリュームなどを使用します。詳しくは、「インフラストラクチャの保護」を参照してください。
AWS Systems Manager を使用すると、Amazon ECS コンテナインスタンスのパッチ適用とメンテナンスを合理化できます。Amazon ECS 最適化 Amazon マシンイメージ (AMI) にプリインストールされている AWS Systems Manager Agent (SSM Agent) を使用して、自動パッチ管理ワークフローを実装します。たとえば、定期メンテナンス期間やインスタンス交換戦略を実装します。詳細については、「Amazon ECS コンテナインスタンスを交換し、パッチを自動化する」を参照してください。
ログ記録と監視を有効にする
AWS CloudTrail を設定し、API アクティビティをログ記録します。ベストプラクティスは、Amazon CloudWatch アラームを設定し、CpuUtilization、DiskReadOps、DiskWriteOps、NetworkIn、NetworkOut の値が高くなったときにアラートを行うことです。
コンテナインスタンスのパフォーマンスとリソースの使用状況を監視するために、Container Insights を有効にします。
バックアップと復元戦略を設定する
障害復旧計画の一環として、Amazon EBS スナップショットを使用するか、AMI を作成します。詳細については、「AWS Backup を使用して Amazon EC2 のバックアップと復元を行う」を参照してください。
重要: EBS ボリュームを削除した場合は、Amazon EBS スナップショットまたは AMI バックアップが作成済みである場合のみ、ボリュームを復元できます。
メタデータ、インスタンスログ、アプリケーションデータを収集してエクスポートするには、SSH を使用してインスタンスに接続します。次に、以下の AWS CLI コマンド describe-instances を実行してインスタンスのメタデータをエクスポートします。
aws ec2 describe-instances \ --instance-ids i-abcdxyz\ -- query "Reservations[].Instances[]" \ -- output text > file.txt
インスタンスログをエクスポートするには、次の get-console-output コマンドを実行します。
aws ec2 get-console-output --instance-id i-abcdxyz --output text
注: 上記のコマンドで、i-abcdxyz は実際のインスタンス ID に置き換えます。
EC2 インスタンスでの問題のトラブルシューティング
予期しない終了や再起動のトラブルシューティング
Amazon ECS マネージドインスタンスをドレインすることで、Spot の中断や同様のイベントの発生時にワークロードが適切に停止し、安定したインスタンスに移行するようにします。
Amazon EC2 はセキュリティとパフォーマンスを確保するために、再起動、停止と起動、廃止など、インスタンスに関する一連のメンテナンスイベントを定期的にスケジュールしています。AWS Health Dashboard を使用すると、完了に数分を要する可能性があるイベントを追跡できます。定期メンテナンスイベントの後に実行できるアクションについては、「スケジュールされたイベントに影響される Amazon EC2 インスタンスでの推奨される対応」を参照してください。
Spot インスタンスが終了した場合は、「Amazon EC2 により Spot インスタンスが中断した理由を知りたいです」を参照してください。
Amazon EC2 は、定期メンテナンスの一環としてインスタンスを終了することがあります。このようなインスタンスの終了を管理するには、Amazon EC2 Auto Scaling のライフサイクルフックを使用することがベストプラクティスです。
リソース使用率が高い場合のトラブルシューティング
CPU またはメモリの使用率が高くなったことを確認するには、アプリケーションログおよび、インスタンスの CloudWatch メトリクス CpuUtilization、NetworkIn、NetworkOut、DiskReadOps、DiskWriteOps をレビューします。さらに、Container Insights メトリクス MemoryUtilized を確認します。
現在の構成ではインスタンスのリソースニーズを満たせない場合は、インスタンスをスケールアップしてください。
または、Amazon ECS キャパシティプロバイダーを使用することで、クラスターのコンピューティングリソースを動的にスケーリングして最適化することもできます。キャパシティプロバイダーを作成するには、Amazon ECS コンソールを使用します。または、次の例のような create-capacity-provider コマンドを実行します。
aws ecs create-capacity-provider --name "example-capacity=provider" --auto-scaling-group-provider "autoScalingGroupArn=arn:aws:autoscaling:us-east-1:123456789012:autoScalingGroup:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111:autoScalingGroupName/MyAutoScalingGroup,managedScaling={status=ENABLED,targetCapacity=100,minimumScalingStepSize=1,maximumScalingStepSize=100},managedTerminationProtection=ENABLED"
ディスク容量不足の問題を解決する
Amazon ECS タスクを実行している EC2 インスタンスのプライマリストレージは、次の原因で容量不足になる可能性があります。
- アプリケーションログ
- コンテナイメージの保存容量が過剰である
- 実行中のコンテナインスタンスによって作成された一時ファイル
各ファイルまたはディレクトリは、サイズに関係なく 1 つの inode を使用することに注意してください。その結果、複数の小さなファイルがあることが原因で、inode のクォータを超える可能性があります。inode のクォータを超えると、ディスク容量に空きがあっても新しいファイルを作成できなくなります。
Amazon ECS 設定を使用してタスクとイメージのクリーンアップを自動化し、停止したタスクや使われていない Docker イメージを削除します。さらに、ECS_RESERVED_MEMORY 変数を使用することで、タスクが使用可能なメモリをすべて消費することを防ぎます。
リポジトリ内の古いイメージや使われていないイメージを自動的にクリーンアップするには、Amazon Elastic Container Registry (Amazon ECR) のライフサイクルポリシーを使用します。イメージ、コンテナインスタンス、ボリューム、ネットワークなどの使われていないオブジェクトをクリーンアップするには、Docker prune コマンドを使用します。詳細については、Docker Docs のウェブサイトで「使用していない Docker オブジェクトの削除(prune)」を参照してください。
マウントされているすべてのファイルシステムが使用しているディスク容量を確認するには、次のコマンドを実行します。
df -h
特定のファイルシステムが使用しているディスク容量を確認するには、次のコマンドを実行します。
df -h /
注: 上記のコマンドでは、ルートファイルシステムのデータのみを表示します。
使用可能な inode が少ないことが原因で、リソースの問題が発生する可能性があります。inode の使用状況を確認するには、次のコマンドを実行します。
df -i
特定のディレクトリが使用している合計ディスク容量を確認するには、次のコマンドを実行します。
du -sh /path/to/directory
注: directory は、実際のディレクトリ名に置き換えます。
アプリケーション内の最大のディレクトリまたはファイルを一覧表示するには、次のコマンドを実行します。
du -ah /path/to/directory | sort -rh | head -n 10
注: 上記のコマンドでは、最も大きいファイルまたはディレクトリの上位 10 件を一覧表示します。10 は大きなファイルとディレクトリの表示数に置き換え、directory は実際のディレクトリ名に置き換えます。
ディレクトリ内の各サブディレクトリのサイズを確認するには、次のコマンドを実行します。
du -h --max-depth=1
使用可能なキャパシティを最適化するには、EC2 インスタンスでスポットフリートまたはキャパシティプロバイダーを使用します。詳細については、「スポットフリートで Amazon ECS クラスターをサポートする」を参照してください。
関連情報
SSH を使用して Amazon EC2 Linux インスタンスへの接続をトラブルシューティングする方法を教えてください

関連するコンテンツ
- 質問済み 1年前lg...
- 質問済み 4年前lg...