web-dev-qa-db-ja.com

AWS ASGでEBSボリュームを再利用できますか?

ASGを使用してインスタンス化された新しいEC2インスタンスに既存のEBSボリュームを再利用できるように(それらのボリュームに永続的なデータがあるため)、ASGを作成したいと考えています。これは可能ですか?

コメントからコピーされた更新

私の元の質問を明確にするために、私はEBSボリュームを2つのEC2インスタンスに同時に接続することを試みていません。むしろ、1つのEC2インスタンスが終了したときに、新しいEBSボリュームを作成する代わりに、以前のEBSボリュームで新しいEC2インスタンスを起動したい

10
steve landiss

番号。

自動スケーリンググループは複数のEC2インスタンスを開始します。各EBSボリュームは、単一のEC2インスタンスにのみアタッチできます。したがって、これを行うべきではなく、おそらく不可能です。複数のボリュームと複数のインスタンスがある場合、おそらくそれを機能させるためにいくつかの複雑なロジックを実装できますが、そうすべきではありません-単純なアーキテクチャが最も良い傾向があります。

あなたができることは、ASGがアクセスするNFSを介してデータを共有するEC2インスタンスを実行すること、または AWS Elastic File System を使用することですが、レイテンシが比較的高いことに注意してください。

要件とユースケースを拡張すると、より役立つ回答が得られる場合があります。

更新

追加の要件に基づいて、おそらくそれは可能です。これは標準的な要件ではないので、これに対する明示的なサポートはないと思います。

私はおそらく、ボリュームをEC2インスタンスに関連付けてからマウントするなんらかの起動スクリプトを作成することを検討しました。 ここで答える があり、これは役に立つかもしれません。 SNSとLambdaを使用して何らかの設定を行うことでおそらくそれは可能ですが、EC2インスタンスは、ボリュームをマップするために実行する何かがまだ必要になるでしょう。

他の誰かがあなたにもっと多くの情報を与えることができるかもしれません、私はこのようなことをする必要がありませんでした。

6
Tim

IMO、あなたはこのようにすることができます(私は似たようなことをしますが、Elastic Network Interfaceを使用します)。これは、AWS CloudFormationサービスまたはAWS CLIの知識があることを前提としています。

  1. EBSボリュームを作成する
  2. 最小/最大サイズが1に設定されたベアAutoScaling groupを作成します。これにより、異常な状態になったときの唯一のインスタンスが、新しい正常なインスタンスに置き換えられます。
  3. AutoScaling UserDataリソースのLaunchConfigurationセクションからボリュームをインスタンスに接続します。
  4. では、インスタンスが終了すると、ボリュームはどうなりますか? AutoScalingグループが新しいサービスを立ち上げました。古いボリュームが終了するまで、ボリュームは接続されたまま/使用中のままになります。その後、ボリュームは再び使用可能になり、新しいインスタンスに接続できます。
  5. ボリュームのアタッチ/再アタッチは、そのようなアクションのタイミングに関するものです。ボリュームが再び利用可能になった後、UserDataが実行されると盲目的に推測できます(インスタンスは「すぐに」終了しますか?)。または、ボリュームメタデータの説明、その状態の確認、使用されていないときの再接続など、いくつかのステータスチェックを実行できます。

Linux bash Shellの簡単な例:

INST_ID='i-xyzxyzxyz' 
VOL_ID='vol-xyzxyzxyz'
VOL_STATUS=''
until [ "x$VOLUME_STATUS" == "xattached" ]; do
    VOL_STATUS=$(aws ec2 describe-volumes --volume-ids $VOL_ID --query 'Volumes[0].State')
    sleep 5
done

aws ec2 attach-volume --volume-id $VOL_ID --instance-id $INST_ID --device /dev/sdh
  1. より弾力性が必要な場合は、 AutoScalingライフサイクルフック を使用してみてください。インスタンスがInService状態になる前に、ボリュームを接続できます。グループに続行するように指示するまで、この状態のままになります(それ以外の場合は、デフォルトで1時間のタイムアウトがあります)。これは、スケールアウトイベントの場合、または新しいインスタンスが起動された場合です。終了またはスケールインされると、シグナルを待機することもできます。ボリュームを切り離して、終了を継続するようにシグナルを送ります。
  2. すべてのAWS CLIコマンドは、インスタンスが適切なIAMインスタンスプロファイルをアタッチしていることを前提としています。これにより、EBSボリュームのアタッチ/アタッチ解除またはそれらの記述が可能になります。
10
dsmsk80