如何使用PowerShell将EBS配置为终止时删除

时间:2017-06-21 22:25:05

标签: powershell amazon-ec2

我已经为基本服务器映像创建了一个AMI,我希望在必要时部署它。此基本映像具有3个必需的磁盘,这些磁盘将成为任何其他服务器构建的一部分。但是,额外的存储要求将根据创建时的实例而有所不同。我可以毫无问题地创建和附加这个额外的存储,但我不能指定我希望在EC2实例终止时删除这些卷,并且它们当前设置为false。

$NewInstance = New-EC2Image -ImageID ami-image -InstanceType t2.medium ...
$NewInstanceID = $NewInstance.Instances[0].Id;
$NewVolume = New-EC2Volume -Size 200 -AvailabilityZone "my-fave-az" -VolumeType "gp2";
Add-EC2Volume -InstanceId $NewInstanceID -VolumeId $NewVolume.VolumeId -Device "xvdj";

这一切都运作良好,但我无法弄清楚如何在

中设置DeleteOnTermination

a)上面的创建脚本

b)使用Edit-EC2InstanceAttribute,因为该属性隐藏在deviceMappings.Ebs.DeleteOnTermination中,我无法弄清楚如何使用此命令行开关访问该属性。

2 个答案:

答案 0 :(得分:2)

在尝试了几种不同的模式之后,我只需要在-BlockDeviceMapping的{​​{1}}参数中添加一个Hashtables数组。

我尝试过几种不同的方法,比如创建一个BlockDeviceMapping对象数组

New-EC2Instance

但这不起作用。

最终工作的是这个

$DeviceMappings = @();
$charmap=100;
foreach($Disk in $Disks)
{
    $volume = New-Object Amazon.EC2.Model.EbsBlockDevice;
    $volume.VolumeSize = $Disk.Size;
    $volume.VolumeType = "gp2";
    $volume.DeleteOnTermination = $true;

    $DeviceMapping = new-object Amazon.EC2.Model.BlockDeviceMapping;
    $DeviceMapping.DeviceName = "xvd$([char]$charmap)";
    $DeviceMapping.Ebs = $volume;
    $charmap++;
}

答案 1 :(得分:0)

@swascheck答案为该问题提供了很好的线索,但是我想在上面打个蝴蝶结,以防其他人正在寻找打包的答案。

我们用它来创建实例。

$drives = @()
$eDrive = @{ 
    DeviceName = 'xvdf'
    Ebs = @{
        VolumeSize = 4
        DeleteOnTermination = 'true'
        VolumeType = 'gp2'
    }
}
$fDrive = @{ 
    DeviceName = 'xvdg'
    Ebs = @{
        VolumeSize = 2
        DeleteOnTermination = 'true'
        VolumeType = 'gp2'
    }
}
$drives += $eDrive
$drives += $fDrive

$instances = New-EC2Instance ... -BlockDeviceMapping $drives

-BlockDeviceMapping参数将导致使用实例创建两个附加的EC2Volumes并将其附加。那时它们还不完整。因此,我们在VM的内部使用它来准备使用它们。

Get-Disk -Number 1 | Initialize-Disk -PassThru | New-Partition -DriveLetter 'E' -UseMaximumSize | Format-Volume -FileSystem NTFS -NewFileSystemLabel 'EDrive' -Confirm:$false
Get-Disk -Number 2 | Initialize-Disk -PassThru | New-Partition -DriveLetter 'F' -UseMaximumSize | Format-Volume -FileSystem NTFS -NewFileSystemLabel 'FDrive' -Confirm:$false