2016-12-10 15 views
3

cloudformを使用してボリュームを接続してマウントする方法が見つかりません。CloudFormationを使用してEC2インスタンスにボリュームを接続してマウントする方法

VolumeAttachmentを使用してボリュームを添付できます。しかし、EC2インスタンスが実行状態になってからlsblkを実行すると、この接続インスタンスがアンマウントされていることがわかります。

このインスタンスをCloudformationファイルからマウントする方法はありますか?私はこれをLinuxのコマンドを使ってマウントすることができますが、代わりに雲の情報からすべてを扱うほうがずっと良いでしょう。

"MyEc2Instance" : { 
    "Type" : "AWS::EC2::Instance", 
    "Properties" : { 
     "KeyName" : { "Ref" : "KeyName" } 
    } 
}, 
    "MyVolume" : { 
     "Type" : "AWS::EC2::Volume", 
     "Properties" : { 
     "Size" : "50", 
     "AvailabilityZone" : "xyz" 
     } 
    }, 
    "attachment" : { 
     "Type" : "AWS::EC2::VolumeAttachment", 
     "Properties" : { 
     "InstanceId" : { "Ref" : "MyEc2Instance" }, 
     "VolumeId" : { "Ref" : "MyVolume" }, 
     "Device" : "/dev/sdh" 
     } 
    } 

そして、私はインスタンス上lsblkを行うとき、これは私が見た結果である:ここで

は、私がこれまできたものである私は、デバイス名を指定していても

xvda 202:0 0 8G 0 disk 
└─xvda1 202:1 0 8G 0 part/
xvdh 202:112 0 50G 0 disk 

お知らせ'sdh'になると 'xvdh'として添付されて表示されます。何故ですか?そして、あなたが見ることができるように、これはマウントされていません。これをどのようにマウントするのですか?

答えて

4

です。私はCloudFormationテンプレートの新しいYAML形式がはるかに簡単だが、JSONにもその例を載せている。

JSON:

"UserData"  : { "Fn::Base64" : { "Fn::Join" : ["", [ 
    "#!/bin/bash -xe\n", 
    "# create mount point directory\n", 
    "mkdir /mnt/xvdh\n", 
    "# create ext4 filesystem on new volume\n",  
    "mkfs -t ext4 /dev/xvdh\n", 
    "# add an entry to fstab to mount volume during boot\n", 
    "echo \"/dev/xvdh  /mnt/xvdh ext4 defaults,nofail 0  2\" >> /etc/fstab\n", 
    "# mount the volume on current boot\n", 
    "mount -a\n" 
]]}} 

YAML:

UserData: 
    'Fn::Base64': !Sub 
     - | 
     #!/bin/bash -xe 
     # create mount point directory 
     mkdir /mnt/xvdh 
     # create ext4 filesystem on new volume   
     mkfs -t ext4 /dev/xvdh 
     # add an entry to fstab to mount volume during boot 
     echo "/dev/xvdh  /mnt/xvdh ext4 defaults,nofail 0  2" >> /etc/fstab 
     # mount the volume on current boot 
     mount -a 
+0

私はルートボリュームを増やす必要があります。これがルートボリュームで動作するのと同様に、新しいファイルシステムを作成するのでしょうか? – user1801879

+0

@NhoI ok、これは私にトンを助けてくれました。ほんとありがと。 1つの質問:既存のファイルシステムをマウントすると問題はありますか?/mnt/xvdhを作成するのではなく、この新しいディスクに/ usrをマウントするだけです。 – user1801879

+0

いいえ、既存のファイルシステムに必要なものが/ usrにある限りです。あなたのマウントの下にマウントがすべて隠れることに注意してください。元のフォルダーの内容をアンマウントすると、そのマウントは元に戻ります。 – NHol

3

ハイパーバイザレベルでボリュームを接続することができます。したがって、CFを使用してボリュームを接続できます。

ボリュームをマウントするのはOSレベルであり、CFはそれを知る/実行する方法がありません。質問と同じですHow can I create a directory in cloudformation after launching an instance?

この問題をどうやって解決しますか? CFのEC2InstanceプロパティはUserDataです。接続されたボリュームをマウントするコマンドを指定します。あなたは、インスタンスがUserDataのを使用して起動したときに、それをマウントする必要がありますhelloVで述べたようにここで1 example

{ 
    "Type" : "AWS::EC2::Instance", 
    "Properties" : { 
     .... 
     "InstanceType" : { "Ref" : "InstanceType" }, 
     "KeyName"  : { "Ref" : "KeyName" }, 
     "UserData"  : { "Fn::Base64" : { "Fn::Join" : ["", [ 
      "#!/bin/bash -xe\n", 
      "yum install -y aws-cfn-bootstrap\n", 

      "# Install the files and packages from the metadata\n", 
      "/opt/aws/bin/cfn-init -v ", 
      "   --stack ", { "Ref" : "AWS::StackName" }, 
      "   --resource WebServerInstance ", 
      "   --configsets Install ", 
      "   --region ", { "Ref" : "AWS::Region" }, "\n" 
     ]]}} 
     } 
    }, 
+0

[OK]をありがとう!私はこれを試してみる。 – user1801879

関連する問題