ASGを使用してインスタンス化された新しいEC2インスタンスに既存のEBSボリュームを再利用できるように(それらのボリュームに永続的なデータがあるため)、ASGを作成したいと考えています。これは可能ですか?
コメントからコピーされた更新
私の元の質問を明確にするために、私はEBSボリュームを2つのEC2インスタンスに同時に接続することを試みていません。むしろ、1つのEC2インスタンスが終了したときに、新しいEBSボリュームを作成する代わりに、以前のEBSボリュームで新しいEC2インスタンスを起動したい
番号。
自動スケーリンググループは複数のEC2インスタンスを開始します。各EBSボリュームは、単一のEC2インスタンスにのみアタッチできます。したがって、これを行うべきではなく、おそらく不可能です。複数のボリュームと複数のインスタンスがある場合、おそらくそれを機能させるためにいくつかの複雑なロジックを実装できますが、そうすべきではありません-単純なアーキテクチャが最も良い傾向があります。
あなたができることは、ASGがアクセスするNFSを介してデータを共有するEC2インスタンスを実行すること、または AWS Elastic File System を使用することですが、レイテンシが比較的高いことに注意してください。
要件とユースケースを拡張すると、より役立つ回答が得られる場合があります。
更新
追加の要件に基づいて、おそらくそれは可能です。これは標準的な要件ではないので、これに対する明示的なサポートはないと思います。
私はおそらく、ボリュームをEC2インスタンスに関連付けてからマウントするなんらかの起動スクリプトを作成することを検討しました。 ここで答える があり、これは役に立つかもしれません。 SNSとLambdaを使用して何らかの設定を行うことでおそらくそれは可能ですが、EC2インスタンスは、ボリュームをマップするために実行する何かがまだ必要になるでしょう。
他の誰かがあなたにもっと多くの情報を与えることができるかもしれません、私はこのようなことをする必要がありませんでした。
IMO、あなたはこのようにすることができます(私は似たようなことをしますが、Elastic Network Interfaceを使用します)。これは、AWS CloudFormation
サービスまたはAWS CLI
の知識があることを前提としています。
AutoScaling group
を作成します。これにより、異常な状態になったときの唯一のインスタンスが、新しい正常なインスタンスに置き換えられます。UserData
リソースのLaunchConfiguration
セクションからボリュームをインスタンスに接続します。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
InService
状態になる前に、ボリュームを接続できます。グループに続行するように指示するまで、この状態のままになります(それ以外の場合は、デフォルトで1時間のタイムアウトがあります)。これは、スケールアウトイベントの場合、または新しいインスタンスが起動された場合です。終了またはスケールインされると、シグナルを待機することもできます。ボリュームを切り離して、終了を継続するようにシグナルを送ります。AWS CLI
コマンドは、インスタンスが適切なIAMインスタンスプロファイルをアタッチしていることを前提としています。これにより、EBSボリュームのアタッチ/アタッチ解除またはそれらの記述が可能になります。