Powershell 自动化管理 AWS(2)- EC2

简介:

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


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


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


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

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


wKiom1dzbf2RSVZXAAB2_IEJ2WA099.png


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

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

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

wKioL1dzbgiQi1A4AAGr4lKqOl0812.png

查看一下私钥的内容

1
$Keypair  | fl

wKiom1dzbg_h1wm2AAKQqPlkVXg736.png


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

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

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

1
get-ec2keypair

wKioL1dzbhbR_awdAADSO2e-Vp0676.png



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


安全组的创建例子如下所示,这里我是直接在默认的 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

wKioL1dzbiOgbrT5AAE63q05BHo812.png

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


wKiom1dzbinBNuxHAABpRsiLeqw964.png


下面看看怎么给这个安全组添加对应的端口规则。这里我打算添加两条规则,一个允许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 )


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

wKioL1dzbi6gSpRrAAAwow7v6bA553.png

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

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


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

wKioL1dzdXihdh3tAAA2qGjs5LE281.png

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


1
Get-EC2Image  -ImageId ami-dc361ebf

wKioL1dzdXPw1OmVAAJrbubY0tU298.png



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


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


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

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

http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html



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


wKiom1dzbjSya3i5AAJMvzWjIws853.png


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

1
Get-EC2ImageByName

wKiom1dzbj-A4GzFAAIRKGTvTos893.png


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

1
Get-EC2ImageByName  -Name *ami*

wKioL1dzbkShm4gfAAHrf5usFg4471.png


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


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

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


wKiom1dzbkrg6nZUAAEJD2bIaeU939.png

通过reservationid来过滤确认一下

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

wKiom1dzbk_C2izHAAI3hz_LKrU661.png


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

wKioL1dzblTTUdK_AACTcUyXLpQ114.png

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


1
Remove-EC2Instance  -InstanceId i-0bb1bc83486b933b1




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






本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/1794196,如需转载请自行联系原作者

目录
相关文章
|
1月前
|
监控 网络协议 安全
员工网络监控软件:PowerShell 在网络监控自动化中的应用
在数字化办公环境中,企业对员工网络活动的监控需求日益增长。PowerShell 作为一种强大的脚本语言,能够有效实现员工网络监控自动化。本文介绍了如何使用 PowerShell 获取网络连接信息、监控特定网址的访问情况,并生成自动化报告,帮助企业高效管理员工网络活动,确保网络安全和合规性。
48 0
|
2月前
|
监控 关系型数据库 MySQL
PowerShell 脚本编写 :自动化Windows 开发工作流程
PowerShell 脚本编写 :自动化Windows 开发工作流程
82 0
|
5月前
|
监控 数据挖掘 BI
ERP系统中的工作流管理与自动化
【7月更文挑战第25天】 ERP系统中的工作流管理与自动化
250 2
ERP系统中的工作流管理与自动化
|
5月前
|
机器学习/深度学习 人工智能 运维
智能化运维的崛起:自动化与人工智能在IT管理中的融合
本文深入探讨了智能化运维在现代企业中的重要性,并分析了自动化技术和人工智能(AI)如何共同推动IT运维管理的革新。文章首先概述了传统运维面临的挑战,然后详细介绍了智能化运维的核心概念和实施步骤,最后通过具体案例展示了智能化运维在实际工作中的应用效果和潜在价值。
141 0
|
6月前
|
存储 SQL 运维
使用PowerShell进行自动化脚本编写:入门与实战
【6月更文挑战第6天】本文介绍了PowerShell作为Windows系统管理的自动化工具,用于提升效率和减少错误。内容涵盖PowerShell基础,如变量、命令执行、管道、条件和循环语句、函数。实战案例展示了如何用PowerShell脚本进行文件备份。此外,还提及PowerShell的进阶功能,如模块、远程管理和与其他工具集成。学习和应用PowerShell能有效提升IT运维自动化水平。
|
7月前
|
存储 弹性计算 运维
自动化合同管理与执行
【4月更文挑战第30天】
33 2
|
7月前
|
弹性计算 运维 Shell
自动化客服任务分配与优先级管理
【4月更文挑战第30天】
73 0
|
7月前
|
弹性计算 运维 Shell
自动化软件包安装与管理
【4月更文挑战第30天】
41 0
|
7月前
|
存储 分布式计算 监控
使用Airflow管理大数据工作流:自动化任务调度与依赖
【4月更文挑战第8天】Apache Airflow是一款开源的工作流管理工具,用于高效组织和调度大数据任务。它基于DAG(有向无环图)定义任务依赖,通过Operators(如BashOperator、PythonOperator)执行不同工作,并通过Scheduler和Executor协调任务执行。Web UI提供监控界面,Metadata DB存储元数据。创建DAG涉及定义DAG属性、Task及依赖关系,然后部署到Airflow环境。进阶功能包括Variables和Connections管理、XCom跨Task通信、自定义Operator及Plugin、高级调度与告警设置。
596 0
|
2月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
66 4