Powershell AWS 自动化管理 (11) - 创建一个高可用的WordPress博客(中)
2016-07-19 14:42
871 查看
理论和基本架构在上一篇已经做了说明,这一篇直接来看看具体的脚本实现吧。首先来看看前面10个步骤的实现。
创建EC2-S3的Role,这个Role是分配给EC2虚拟机的,这样他们创建之后自动就有权限访问S3的内容。
创建VPC网络
创建VPC的2个子网,位于不同的AZ
创建Internet网关
配置路由表
创建并配置EC2的Security Group,确保80和22端口可用
创建高可用的MariaDB数据库
配置数据库的Security Group,确保3306端口可用
创建S3 Bucket 并配置Policy
创建CloudFront分布点,绑定S3 Bucket
准备WordPress的配置文档
准备Virtualhost的配置文档
上传配置文档到S3 Bucket中
配置Bash Shell脚本,包括LAMP,WordPress,AWS,Crontab和S3同步等等
创建EC2虚拟机,指定14步创建的BootStrap命令
更新DNS记录,指向该虚拟机
初始化WordPress界面
确认无误之后生成镜像文件
配置ELB
更新DNS记录到ELB的地址
配置Launch Configuration
配置Auto Scaling
0步, 首先我需要一个管理账号能登录到AWS
1. 接下来创建一个EC2-S3的role
![](http://s5.51cto.com/wyfs02/M02/84/56/wKiom1eNxeaCVX1AAACBhwgfZ6E379.png)
2. 创建VPC
3. 创建VPC下的子网
![](http://s4.51cto.com/wyfs02/M00/84/56/wKiom1eNxs3iDyVLAABgQUuzT6c209.png)
4. 创建网关
![](http://s4.51cto.com/wyfs02/M00/84/56/wKioL1eNxs_gpyXGAABSnjfeF1w946.png)
5. 配置VPC的路由表
![](http://s2.51cto.com/wyfs02/M01/84/56/wKiom1eNxtKRajALAAA7s9JX1Pk870.png)
6. 配置一个EC2的安全组,开放22和80端口,这样用户可以远程管理和访问博客
![](http://s2.51cto.com/wyfs02/M01/84/56/wKiom1eNyJ3C0nS8AABDrjNXAGA253.png)
7. 然后创建一个高可用的MariaDB,为了简单起见,数据库名字,用户名,密码都设为wordpress,注意我这里专门记录了这个数据库实例的ID号码,这个是为了后面配置WordPress需要的。
![](http://s2.51cto.com/wyfs02/M00/84/56/wKioL1eNyKCTq2GsAADGKRpAy2c819.png)
8. 然后为了确保他能够被我的WordPress 服务器访问,我还得打开3306端口
9. 接下来配置S3 Bucket和相关的Policy,这个Bucket的目的有2个,第一个是为了所有的EC2实例有一样的WordPress和Vhosts的配置文件;第二个是为了和EC2实例的本地目录同步保存所有的图片,类似的功能WordPress有很多插件可以做到,不过这里用脚本实现了
![](http://s4.51cto.com/wyfs02/M01/84/57/wKiom1eNyzWyBI0iAABXA16--Q4085.png)
10. 然后给这个S3创建一个CDN的分布点,这样子从全球任何区域访问我的博客 速度都会很快了。
![](http://s5.51cto.com/wyfs02/M02/84/57/wKioL1eNyw3Ap-mJAADCdHrVpJk799.png)
本文出自 “麻婆豆腐” 博客,请务必保留此出处http://beanxyz.blog.51cto.com/5570417/1827752
创建EC2-S3的Role,这个Role是分配给EC2虚拟机的,这样他们创建之后自动就有权限访问S3的内容。
创建VPC网络
创建VPC的2个子网,位于不同的AZ
创建Internet网关
配置路由表
创建并配置EC2的Security Group,确保80和22端口可用
创建高可用的MariaDB数据库
配置数据库的Security Group,确保3306端口可用
创建S3 Bucket 并配置Policy
创建CloudFront分布点,绑定S3 Bucket
准备WordPress的配置文档
准备Virtualhost的配置文档
上传配置文档到S3 Bucket中
配置Bash Shell脚本,包括LAMP,WordPress,AWS,Crontab和S3同步等等
创建EC2虚拟机,指定14步创建的BootStrap命令
更新DNS记录,指向该虚拟机
初始化WordPress界面
确认无误之后生成镜像文件
配置ELB
更新DNS记录到ELB的地址
配置Launch Configuration
配置Auto Scaling
0步, 首先我需要一个管理账号能登录到AWS
import-module AWSPowerShell get-module AWSPowershell #Create account from IAM, download user accesskey and secretkey #Generate, list and delete profile Set-AWSCredentials -AccessKey AKIAJA11SDE5SXVHRQ -SecretKey Pc528Dw2/qwzOo4Pe421p2N618H+yFv1S7JVsBJ2M -StoreAs myprofile Initialize-AWSDefaults -ProfileName myprofile -Region ap-southeast-2
1. 接下来创建一个EC2-S3的role
# 设置 Trust Relationship $policy1=@" { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } "@ New-IAMRole -RoleName "EC2-S3" -AssumeRolePolicyDocument $policy1 #设置 S3的访问权限 $policy2 = @" { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:*", "Resource": "*" } ] } "@ Write-IAMRolePolicy -PolicyDocument $policy2 -RoleName "EC2-S3" -PolicyName "allows3"
![](http://s5.51cto.com/wyfs02/M02/84/56/wKiom1eNxeaCVX1AAACBhwgfZ6E379.png)
2. 创建VPC
#创建一个新的VPC New-EC2Vpc -CidrBlock 10.2.0.0/16
3. 创建VPC下的子网
#创建两个子网,位于不同AZ $vpcid=get-ec2vpc | Where-Object {$_.Cidrblock -eq "10.2.0.0/16"} | select -ExpandProperty vpcid New-EC2Subnet -CidrBlock 10.2.1.0/24 -VpcId $vpcid -AvailabilityZone ap-southeast-2a New-EC2Subnet -CidrBlock 10.2.2.0/24 -VpcId $vpcid -AvailabilityZone ap-southeast-2b Edit-EC2SubnetAttribute -SubnetId subid1 -MapPublicIpOnLaunch $true Edit-EC2SubnetAttribute -SubnetId sbuid2 -MapPublicIpOnLaunch $true $subid1=Get-EC2Subnet | Where-Object{$_.CidrBlock -eq "10.2.1.0/24"} | select -ExpandProperty SubnetId #添加tag注释 $tag=new-object Amazon.EC2.Model.Tag -Property @{key="Name";value="Sydney"} New-EC2Tag -Resource $subid1 -Tag $tag $subid2=Get-EC2Subnet | Where-Object{$_.CidrBlock -eq "10.2.2.0/24"} | select -ExpandProperty SubnetId $tag2=new-object Amazon.EC2.Model.Tag -Property @{key="Name";value="Melbourne"} New-EC2Tag -Resource $subid2 -Tag $tag2 #允许自动匹配公网IP Edit-EC2SubnetAttribute -SubnetId $subid1 -MapPublicIpOnLaunch $true Edit-EC2SubnetAttribute -SubnetId $subid2 -MapPublicIpOnLaunch $true
![](http://s4.51cto.com/wyfs02/M00/84/56/wKiom1eNxs3iDyVLAABgQUuzT6c209.png)
4. 创建网关
#创建Internet网关 if((Get-EC2InternetGateway | Where-Object {$_.Attachments[0] -eq $null} | measure).count -eq 0){ New-EC2InternetGateway } $igwid=Get-EC2InternetGateway | Where-Object {$_.Attachments[0] -eq $null} | select -ExpandProperty internetGateWayId $tagigw=new-object Amazon.EC2.Model.Tag -Property @{key="Name";value="AU"} new-EC2tag -Resource $igwid -Tag $tagigw Get-EC2InternetGateway $igwid|Add-EC2InternetGateway -VpcId $vpcid
![](http://s4.51cto.com/wyfs02/M00/84/56/wKioL1eNxs_gpyXGAABSnjfeF1w946.png)
5. 配置VPC的路由表
#配置路由表 #RouteTable #New-EC2RouteTable -VpcId $vpcid $routetable=Get-EC2RouteTable | Where-Object {$_.VpcId -eq $vpcid} #Add new Route New-EC2Route -DestinationCidrBlock "0.0.0.0/0" -GatewayId $igwid -RouteTableId $routetable.RouteTabl
![](http://s2.51cto.com/wyfs02/M01/84/56/wKiom1eNxtKRajALAAA7s9JX1Pk870.png)
6. 配置一个EC2的安全组,开放22和80端口,这样用户可以远程管理和访问博客
#6.配置SecurityGroup和端口 SSH,HTTP,MySql New-EC2SecurityGroup -GroupName WordPress -Description "WordPress Security Group" -VpcId $vpcid $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=80 $ip2.ToPort=80 $ip2.IpRange.Add("0.0.0.0/0") Get-EC2SecurityGroup | Where-Object {$_.GroupName -eq "WordPress"} | Grant-EC2SecurityGroupIngress -IpPermission @($ip1,$ip2)
![](http://s2.51cto.com/wyfs02/M01/84/56/wKiom1eNyJ3C0nS8AABDrjNXAGA253.png)
7. 然后创建一个高可用的MariaDB,为了简单起见,数据库名字,用户名,密码都设为wordpress,注意我这里专门记录了这个数据库实例的ID号码,这个是为了后面配置WordPress需要的。
#创建RDS MultipleAZ New-RDSDBInstance -AllocatedStorage 5 -DBInstanceIdentifier "wordpress" -MasterUsername "wordpress" -MasterUserPassword "wordpress" ` -AutoMinorVersionUpgrade $true -CopyTagsToSnapshot $false -DBInstanceClass "db.t2.micro" ` -DBName "wordpress" -Engine "mariadb" -MultiAZ $true $rdssgid=(Get-RDSDBInstance -DBInstanceIdentifier "wordpress" | select -ExpandProperty vpcSecurityGroups).vpcsecuritygroupid
![](http://s2.51cto.com/wyfs02/M00/84/56/wKioL1eNyKCTq2GsAADGKRpAy2c819.png)
8. 然后为了确保他能够被我的WordPress 服务器访问,我还得打开3306端口
#Configure Security Group of DB $ip3=New-Object Amazon.EC2.Model.IpPermission $ip3.IpProtocol="tcp" $ip3.FromPort=3306 $ip3.ToPort=3306 $ip3.IpRange.Add("0.0.0.0/0") Get-EC2SecurityGroup | Where-Object{$_.GroupId -eq $rdssgid} | Grant-EC2SecurityGroupIngress -IpPermission @($ip3)
9. 接下来配置S3 Bucket和相关的Policy,这个Bucket的目的有2个,第一个是为了所有的EC2实例有一样的WordPress和Vhosts的配置文件;第二个是为了和EC2实例的本地目录同步保存所有的图片,类似的功能WordPress有很多插件可以做到,不过这里用脚本实现了
#创建S3 Bucket New-S3Bucket -BucketName yuanliwordpress -Region ap-southeast-2 Get-S3Bucket -BucketName yuanliwordpress #允许该Bucket里面的uploads文件夹具有公共可读的权限,这个文件夹后面会用来保存WordPress里面的图片 $policy3=@" { "Version": "2012-10-17", "Statement": [ { "Sid": "AddPem", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::yuanliwordpress/uploads/*", "Principal": "*" } ] } "@ Write-S3BucketPolicy -BucketName yuanliwordpress -Policy $policy3 Get-S3BucketPolicy -BucketName yuanliwordpress
![](http://s4.51cto.com/wyfs02/M01/84/57/wKiom1eNyzWyBI0iAABXA16--Q4085.png)
10. 然后给这个S3创建一个CDN的分布点,这样子从全球任何区域访问我的博客 速度都会很快了。
#配置S3和CloudFront $origin = New-Object Amazon.CloudFront.Model.Origin $origin.DomainName="yuanliwordpress.s3.amazonaws.com" $origin.id="S3-yuanliwordpress" $origin.S3OriginConfig = New-Object Amazon.CloudFront.Model.S3OriginConfig $origin.S3OriginConfig.OriginAccessIdentity = "" $cfd=New-CFDistribution ` -DistributionConfig_Enabled $true ` -DistributionConfig_Comment "Test distribution" ` -Origins_Item $origin ` -Origins_Quantity 1 ` -DistributionConfig_CallerReference wordpresstest ` -DefaultCacheBehavior_TargetOriginId $origin.Id ` -ForwardedValues_QueryString $true ` -Cookies_Forward all ` -WhitelistedNames_Quantity 0 ` -TrustedSigners_Enabled $false ` -TrustedSigners_Quantity 0 ` -DefaultCacheBehavior_ViewerProtocolPolicy allow-all ` -DefaultCacheBehavior_MinTTL 1000 ` -DistributionConfig_PriceClass "PriceClass_All" ` -CacheBehaviors_Quantity 0 ` -Aliases_Quantity 0
![](http://s5.51cto.com/wyfs02/M02/84/57/wKioL1eNyw3Ap-mJAADCdHrVpJk799.png)
本文出自 “麻婆豆腐” 博客,请务必保留此出处http://beanxyz.blog.51cto.com/5570417/1827752
相关文章推荐
- 从开发到部署,使用django创建一个简单可用的个人博客
- 在云服务器搭建WordPress博客(五)创建和管理文章分类
- 使用 apt-get 的時候,出现目录或者被锁住的解决办法(E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源临时不可用) E: 无法对管理目录(/var/lib/dpkg/)加锁,是不是另一个包管理)
- 用PowerShell创建一个菲波那切数列
- 管理WordPress博客手机软件集锦
- Ansible :一个配置管理和IT自动化工具
- ASP.NET Zero--11.一个例子(4)商品分类管理-数据检验
- maven(二):创建一个可用的maven项目,完整过程
- 在PowerShell中操作Excel - 创建一个简单的报表
- 创建个人博客 之 部署WordPress
- 一个 WordPress 安装,多个博客使用
- 第一章 创建一个博客应用
- Ansible :一个配置管理和IT自动化工具
- 用c++创建一个Linux上的Daemon程序,含SHELL管理脚本(一)
- 用 Flask 来写个轻博客 (11) — M(V)C_创建视图函数
- 创建了一个自己的博客git
- 11 表的创建和管理
- Ubuntu解决 “E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?”
- SharePoint自动化系列——通过PowerShell创建SharePoint Site Collection
- 实战2: 使用PowerShell创建一个更好的清单工具