2017-10-17 6 views
0

私の実際のタスクは次のとおりです。CloudFormationが停止インスタンスからルートデバイスを取り外すこと

  1. CloudFormation外のAMIを作成します
  2. 使用CloudFormationは、AMIからインスタンスを起動する
  3. デタッチ(ルートおよびデータボリュームを含む)すべての既存のボリューム
  4. 最新のスナップショットから作成された新しいボリューム(ルートとデータ)を添付します。

インスタンスからボリュームを切り離すためにCloudFormationスクリプトをビルドすることに悩まされています。 ボリュームを切り離すための提案やCFスクリプトの作成(root &データ)?

答えて

0

ここでは、このに近づくことができる一つの方法です:

  1. AMIを作成しますの外側AWS CloudFormation
  2. 使用AWS CloudFormationとるLambda-backed custom resourceを作成しているAMI
  3. からインスタンスを起動するにはAWS SDKを使用して、現在EC2インスタンスに接続されているボリュームを検索し、それらを1つずつデタッチします。
  4. あなたがタイプAWS::EC2::VolumeAttachment

キーテイクアウトのリソース使用して添付したいものは何でもボリュームをアタッチ:あなたはCloudFormationがネイティブにサポートしないことをカスタム操作を実行したい場合は、ラムダ担保カスタムリソースを試してみてくださいを。

0

BlockDeviceMappingsEC2Instanceを使用すると、インスタンスのすべてのEBSボリュームを指定できます。 EBSプロパティの1つがSnapshotIdです。それが変更された場合、ボリュームは更新時に置き換えられます。 snapshotIdをパラメータとして渡すだけです。

例:

{ 
    "Type": "AWS::EC2::Instance", 
    "Properties": { 
     "BlockDeviceMappings": [ 
      { 
       "DeviceName": "/dev/sda1", 
       "Ebs" : { "SnapshotId" : {"Ref": "Snapshot1Id"} } 
      }, 
      { 
       "DeviceName": "/dev/sda2", 
       "Ebs" : { "SnapshotId" : {"Ref": "Snapshot2Id"} } 
      }, 
      { 
       "DeviceName": "/dev/sda3", 
       "Ebs" : { "SnapshotId" : {"Ref": "Snapshot3Id"} } 
      } 
     ], 
     "ImageId": { "Ref": "InstanceAmi" } 
} 
関連する問題