-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCreate-AMI.ps1
More file actions
84 lines (54 loc) · 3.03 KB
/
Create-AMI.ps1
File metadata and controls
84 lines (54 loc) · 3.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
$ec2names = @("server01",
"server02")
$description = "Prior to Ubuntu 20.04 upgrade"
$env = "test"
foreach ($ec2name in $ec2names) {
$ec2Object = aws ec2 describe-instances --filters Name=tag-value,Values=$ec2name Name=tag-key,Values=Name Name=tag-value,Values=$env Name=tag-key,Values=Env | ConvertFrom-Json
$instanceId = $ec2Object.Reservations.Instances.InstanceId
aws ec2 stop-instances --instance-ids $instanceId
} # end foreach
$ec2Status = "stopping"
foreach ($ec2name in $ec2names) {
while ($ec2Status -ne "stopped") {
Write-Output "$ec2name is $ec2Status..."
$ec2Status = (aws ec2 describe-instances --filters Name=tag-value,Values=$ec2name Name=tag-key,Values=Name Name=tag-value,Values=$env Name=tag-key,Values=Env | ConvertFrom-Json).Reservations.Instances.State.Name
} # end while
Write-Output "$ec2name is $ec2Status"
} # end foreach
foreach ($ec2name in $ec2names) {
$ec2Object = aws ec2 describe-instances --filters Name=tag-value,Values=$ec2name Name=tag-key,Values=Name Name=tag-value,Values=$env Name=tag-key,Values=Env | ConvertFrom-Json
$instanceId = $ec2Object.Reservations.Instances.InstanceId
$amiName = $ec2name + "_priortoUbuntu20upgrade_" + $env
$amiTagName = "ami_" + $ec2name + "_priortoUbuntu20upgrade_" + $env
## Create a new AMI from an EC2 Instance
aws ec2 create-image `
--instance-id $instanceId `
--name $amiName `
--description $description `
--no-reboot
$amiId = aws ec2 describe-images --filter "Name=name,Values=$amiName" --query 'Images[*].[ImageId]' --output text
aws ec2 create-tags --resources $amiId --tags Key=Name,Value=$amiTagName
} # end foreach
foreach ($ec2name in $ec2names) {
$amiName = $ec2name + "_priortoUbuntu20upgrade_" + $env
$amiId = aws ec2 describe-images --filter "Name=name,Values=$amiName" --query 'Images[*].[ImageId]' --output text
$amiState = (aws ec2 describe-images --image-ids $amiId | ConvertFrom-Json).Images.State
while ($amiState -ne "available") {
Write-Output "The status of $amiName is $amiState..."
Start-Sleep -s 4
$amiState = (aws ec2 describe-images --image-ids $amiId | ConvertFrom-Json).Images.State
}
} # end
foreach ($ec2name in $ec2names) {
$ec2Object = aws ec2 describe-instances --filters Name=tag-value,Values=$ec2name Name=tag-key,Values=Name Name=tag-value,Values=$env Name=tag-key,Values=Env | ConvertFrom-Json
$instanceId = $ec2Object.Reservations.Instances.InstanceId
aws ec2 start-instances --instance-ids $instanceId
} # end foreach
foreach ($ec2name in $ec2names) {
$ec2Status = "pending"
while ($ec2Status -ne "running") {
Write-Output "$ec2name is $ec2Status..."
$ec2Status = (aws ec2 describe-instances --filters Name=tag-value,Values=$ec2name Name=tag-key,Values=Name Name=tag-value,Values=$env Name=tag-key,Values=Env | ConvertFrom-Json).Reservations.Instances.State.Name
} # end while
Write-Output "$ec2name is $ec2Status"
} # end foreach