CloudFormation操作の順序を制御する唯一のメカニズムは、DependsOn
です。しかし、それはこの特定の問題を解決しません。
CloudFormation は、ボリュームが取り付けられていることを知らないので、あなたはここで説明する問題が発生します。あなたは私がaws
コマンドのようなものになるだろうと仮定しますが、EC2のブートストラップを使用して、説明するように別のメカニズム(、を通してそれを添付例えば、EC2インスタンスユーザデータスクリプト上で)。
代わりに、CloudFormationにボリュームを添付します。そのようにして、CloudFormation は、ボリュームが接続されていることを知っていて、ボリュームを切り離さなければならないことも知っています。
これを行うには、タイプAWS::EC2::VolumeAttachment
のリソースを使用する必要があります。そのためのYAMLスニペットは次のようになり、何かのように:
Resources:
MyInstance:
Type: AWS::EC2::Instance
Properties:
...
MyVolume:
Type: AWS::EC2::Volume
Properties:
...
MyVolumeAttachment:
Type: AWS::EC2::VolumeAttachment
Properties:
Device: /dev/sdf
InstanceId: !Ref MyInstance
VolumeId: !Ref MyVolume
*Attachment
かなりの数のリソースタイプは、この正確な目的のために、CFNにあります:あなたは、あなたがリソースへのRef
を指定CFNがあなたにリソースを添付させていますCFNは「注文」を知っています(つまり、2つのリソースを最初に作成してから接続するか、削除すると最初に切り離してから両方のリソースを削除します)、CFNはプロセス全体を処理できます。
ありがとうございました。 EC2インスタンスの起動は、ASGとLaunch Configurationによって処理されます。その場合、インスタンスID解決をどのように処理できますか? – Srini
@Srini - アップデートいただきありがとうございます。あなたのユースケースを本当に理解するもう1つの質問は、ブートストラップ中にインスタンスによって作成されたASGによって作成された各インスタンスに新しいボリューム(空でもスナップショットからも作成されたボリューム)あるいは、他の場所で作成された "外部"ボリュームのようなもので、単にインスタンスに接続するだけですか?その場合、どのように既存のボリュームIDを取得しますか?これらの質問は、正確なシナリオを理解するのに役立ちます。 –
こんにちは、私はボリュームを作成し、特定の命名形式でタグ付けし、ブートストラップにボリュームを添付するawsコマンドを書いています – Srini