博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Powershell 自动化管理 AWS(2)- EC2
阅读量:5920 次
发布时间:2019-06-19

本文共 3164 字,大约阅读时间需要 10 分钟。

昨天学习了基本的准备工作,利用PowerShell成功的链接了AWS。今天来看看如何使用PowerShell来管理AWS的服务。

EC2,S3,VPC,Security Group,RDS等等这些AWS最早提供的服务可以说是他最核心的骨架,豆子的目标是最后用PowerShell实现一个高可用的博客,比如这样的

这一节来看看如何用PowerShell管理EC2相关的服务。EC2是AWS的虚拟机服务,当我们手动创建虚拟机的时候,我们需要使用模板(AMI文件),需要配置加密的key pair,需要配置安全组,VPC(如果不使用默认的话), 还需要给安全组配置对应的防火墙端口。下面看看如何用PowerShell命令来配置。

首先来看看EC2有多少条相关的命令,目前一共207个。

1
get-command 
*ec2* -Module awspowershell | measure

要连接EC2的虚拟机,我们需要生成一个私钥加密远程访问,如何操作呢?

1
2
$Keypair
=
New-EC2KeyPair 
-KeyName mykeypair
$Keypair 
| gm

可以看见他的对象类型是Amazon.EC2.Model.Keypair 的

查看一下私钥的内容

1
$Keypair 
| fl

导出为pem文件,注意格式需要指定为ascii的,不然Linux里面openssl无法正确识别。

1
$Keypair
.KeyMaterial | 
Out-File 
-Encoding ascii mykeypair.pem

确认一下,可以看见我刚刚创建的keypair已经存在了

1
get-ec2keypair

接下来的准备工作需要给我的虚拟机创建一个安全组,并配置相关的防火墙策略。

安全组的创建例子如下所示,这里我是直接在默认的 VPC Classic里面创建的,如果需要在EC2-VPC里面创建,需要指定对应的VPC的ID。

1
2
#Create Security Group and rule
New-EC2SecurityGroup 
-GroupName MyTestSecurityGroup -Description 
"EC2-Classic from PowerShell"

创建以后记得来确认一下是否成功。可以看见InPermissions 成员后面的数组{}是空的,这表明我们还没有配置任何的入站策略。                                                                                                        ·

1
Get-EC2SecurityGroup 
-GroupName MyTestSecurityGroup

登录AWS管理界面,确认真的是已经创建了。

下面看看怎么给这个安全组添加对应的端口规则。这里我打算添加两条规则,一个允许SSH访问,一个允许RDP访问

1
2
3
4
5
6
7
8
9
10
11
$ip1
=
new-object 
Amazon.EC2.Model.IpPermission
$ip1
.IpProtocol=
"tcp"
$ip1
.FromPort=22
$ip1
.ToPort=
"22"
$ip1
.IpRange=
"0.0.0.0/0"
$ip2
=
New-Object 
Amazon.EC2.Model.IpPermission
$ip2
.IpProtocol=
"tcp"
$ip2
.FromPort=3389
$ip2
.ToPort=3389
$ip2
.IpRange.Add(
"0.0.0.0/0"
)
Grant-EC2SecurityGroupIngress -GroupName MyTestSecurityGroup -IpPermission @(
$ip1
,
$ip2
)

执行命令以后,刷新界面发现已经更新了

如果想撤销对应的规则,可以通过revoke来执行

1
Revoke-EC2SecurityGroupIngress -GroupName MyTestSecurityGroup -IpPermission @(
$ip1
,
$ip2
)

创建了私钥和安全组,接下来看看模板文件。每个AMI的镜像文件都有一个唯一的ID可以调用

知道这个ID了,就可以找到对应的镜像,比如

1
Get-EC2Image 
-ImageId ami-dc361ebf

不过这个ID会根据版本更新不停的变化,可能2个月之后最新版本的编号就变了,怎么根据我们的需求来找到需要的ID呢?

这个可以通过 Amazon.EC2.Mode.Filter这个对象来进行过滤

比如说我需要查找所有Windows平台的AMI文件,我可以通过 Amazon.EC2.Model.Filter这个对象来过滤。

个人觉得,和传统的PowerShell使用习惯比起来,这个AWS 模块提供的Filter参数很傻B,因为我需要建立一个专门的哈希表对象来过滤,而且更恶心的是,我不能直接把对象成员的属性放在name里面,而是得在AWS指定的filter的名字里面找才行。

1
2
3
4
5
6
7
#Find an Image
 
Get-EC2Image 
-Owner amazon,self
$platform_values 
New-Object 
'collections.generic.list[string]'
$platform_values
.add(
"windows"
)
$filter_platform 
New-Object 
Amazon.EC2.Model.
Filter 
-Property @{Name = 
"platform"
; Values = 
$platform_values
}
Get-EC2Image 
-Owner amazon, self -
Filter 
$filter_platform

另外一种过滤的方式是通过镜像的名字来查询。 如果直接使用 Get-EC2ImageByName,不加参数出来的就都是windows系统

1
Get-EC2ImageByName

当然也可以指定具体的名字, 比如

1
Get-EC2ImageByName 
-Name *ami*

所有的准备工作都就绪了,最后我们看看实际的EC2 如何创建。

和GUI的配置一样,命令行里面指定私钥keypair,安全组,模板和虚拟机类型就行了

1
2
#Create EC2 instance
New-EC2Instance 
-ImageId ami-dc361ebf -MinCount 1 -MaxCount 1 -KeyName mykeypair -SecurityGroup MyTestSecurityGroup -InstanceType t2.micro

通过reservationid来过滤确认一下

Get-EC2Instance -Filter (new-object Amazon.EC2.Model.Filter -Property @{Name="reservation-id";values="r-069ce2e012d6adf7e"}) | select -ExpandProperty instances

在网页上也确认一下,成功创建了虚拟机。

如果需要删除实例,可以执行

1
Remove-EC2Instance 
-InstanceId i-0bb1bc83486b933b1


这样一个基本的EC2操作就完成了,明天看看S3的相关配置。

本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/1794196,如需转载请自行联系原作者
你可能感兴趣的文章
Algs4-2.3.7计算快排子数组数量
查看>>
数值积分中的辛普森方法及其误差估计
查看>>
Web service (一) 原理和项目开发实战
查看>>
最新鲜最详细的Android SDK下载安装及配置教程
查看>>
深入分析Java Web技术(2) IO
查看>>
LeetCode: 57. Insert Interval(Hard)
查看>>
sql server 汉字的长度
查看>>
创业不是 闹着玩的,水很深,
查看>>
JNI 与 NDK 的关系 以及实现
查看>>
Spring Data(二)查询
查看>>
greenplum(postgresql) 数据字典
查看>>
架构师速成6.9-如何写好代码 分类: 架构师速成 ...
查看>>
黑马程序员-毕业后五年的拉开大家距离的原因
查看>>
css 三角形
查看>>
跑带宽度多少合适_跑步机选购跑带要多宽,你的身体早就告诉你了
查看>>
java 用户态 系统态_核心态和用户态(管态和目态)到底是os还是cpu的状态?
查看>>
Linux下程序的Profile工具
查看>>
根据星星的层数输出星星(*)_java版
查看>>
消息队列RabbitMQ入门介绍
查看>>
cache buffers chains latch等待事件
查看>>