首页 文章 精选 留言 我的

精选列表

搜索[powershell],共928篇文章
优秀的个人博客,低调大师

Powershell AWS 自动化管理 (11) - 创建一个高可用的WordPress博客(中)

理论和基本架构在上一篇已经做了说明,这一篇直接来看看具体的脚本实现吧。首先来看看前面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 import-moduleAWSPowerShell get-moduleAWSPowershell #CreateaccountfromIAM,downloaduseraccesskeyandsecretkey #Generate,listanddeleteprofile Set-AWSCredentials-AccessKeyAKIAJA11SDE5SXVHRQ-SecretKeyPc528Dw2/qwzOo4Pe421p2N618H+yFv1S7JVsBJ2M-StoreAsmyprofile Initialize-AWSDefaults-ProfileNamemyprofile-Regionap-southeast-2 1. 接下来创建一个EC2-S3的role #设置TrustRelationship $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" 2. 创建VPC #创建一个新的VPC New-EC2Vpc-CidrBlock10.2.0.0/16 3. 创建VPC下的子网 #创建两个子网,位于不同AZ $vpcid=get-ec2vpc|Where-Object{$_.Cidrblock-eq"10.2.0.0/16"}|select-ExpandPropertyvpcid New-EC2Subnet-CidrBlock10.2.1.0/24-VpcId$vpcid-AvailabilityZoneap-southeast-2a New-EC2Subnet-CidrBlock10.2.2.0/24-VpcId$vpcid-AvailabilityZoneap-southeast-2b Edit-EC2SubnetAttribute-SubnetIdsubid1-MapPublicIpOnLaunch$true Edit-EC2SubnetAttribute-SubnetIdsbuid2-MapPublicIpOnLaunch$true $subid1=Get-EC2Subnet|Where-Object{$_.CidrBlock-eq"10.2.1.0/24"}|select-ExpandPropertySubnetId #添加tag注释 $tag=new-objectAmazon.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-ExpandPropertySubnetId $tag2=new-objectAmazon.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 4. 创建网关 #创建Internet网关 if((Get-EC2InternetGateway|Where-Object{$_.Attachments[0]-eq$null}|measure).count-eq0){ New-EC2InternetGateway } $igwid=Get-EC2InternetGateway|Where-Object{$_.Attachments[0]-eq$null}|select-ExpandPropertyinternetGateWayId $tagigw=new-objectAmazon.EC2.Model.Tag-Property@{key="Name";value="AU"} new-EC2tag-Resource$igwid-Tag$tagigw Get-EC2InternetGateway$igwid|Add-EC2InternetGateway-VpcId$vpcid 5. 配置VPC的路由表 #配置路由表 #RouteTable #New-EC2RouteTable-VpcId$vpcid $routetable=Get-EC2RouteTable|Where-Object{$_.VpcId-eq$vpcid} #AddnewRoute New-EC2Route-DestinationCidrBlock"0.0.0.0/0"-GatewayId$igwid-RouteTableId$routetable.RouteTabl 6. 配置一个EC2的安全组,开放22和80端口,这样用户可以远程管理和访问博客 #6.配置SecurityGroup和端口SSH,HTTP,MySql New-EC2SecurityGroup-GroupNameWordPress-Description"WordPressSecurityGroup"-VpcId$vpcid $ip1=new-objectAmazon.EC2.Model.IpPermission $ip1.IpProtocol="tcp" $ip1.FromPort=22 $ip1.ToPort="22" $ip1.IpRange="0.0.0.0/0" $ip2=New-ObjectAmazon.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) 7. 然后创建一个高可用的MariaDB,为了简单起见,数据库名字,用户名,密码都设为wordpress,注意我这里专门记录了这个数据库实例的ID号码,这个是为了后面配置WordPress需要的。 #创建RDSMultipleAZ New-RDSDBInstance-AllocatedStorage5-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-ExpandPropertyvpcSecurityGroups).vpcsecuritygroupid 因为创建比较花时间,大概有个10分钟左右,所以写了个循环不断检查是否创建完毕。 $status=Get-RDSDBInstance-DBInstanceIdentifier"wordpress"|select-ExpandPropertyDBInstanceStatus write-host"InitializingMariadDB,Pleasewait..."-NoNewline while($status-ne"available"){ write-host"."-NoNewline Start-Sleep-Seconds1 $status=Get-RDSDBInstance-DBInstanceIdentifier"wordpress"|select-ExpandPropertyDBInstanceStatus } write-host"RDSisReady" 8. 然后为了确保他能够被我的WordPress 服务器访问,我还得打开3306端口 #ConfigureSecurityGroupofDB $ip3=New-ObjectAmazon.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有很多插件可以做到,不过这里用脚本实现了 #创建S3Bucket New-S3Bucket-BucketNameyuanliwordpress-Regionap-southeast-2 Get-S3Bucket-BucketNameyuanliwordpress #允许该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-BucketNameyuanliwordpress-Policy$policy3 Get-S3BucketPolicy-BucketNameyuanliwordpress 10. 然后给这个S3创建一个CDN的分布点,这样子从全球任何区域访问我的博客 速度都会很快了。 #配置S3和CloudFront $origin=New-ObjectAmazon.CloudFront.Model.Origin $origin.DomainName="yuanliwordpress.s3.amazonaws.com" $origin.id="S3-yuanliwordpress" $origin.S3OriginConfig=New-ObjectAmazon.CloudFront.Model.S3OriginConfig $origin.S3OriginConfig.OriginAccessIdentity="" $cfd=New-CFDistribution` -DistributionConfig_Enabled$true` -DistributionConfig_Comment"Testdistribution"` -Origins_Item$origin` -Origins_Quantity1` -DistributionConfig_CallerReferencewordpresstest` -DefaultCacheBehavior_TargetOriginId$origin.Id` -ForwardedValues_QueryString$true` -Cookies_Forwardall` -WhitelistedNames_Quantity0` -TrustedSigners_Enabled$false` -TrustedSigners_Quantity0` -DefaultCacheBehavior_ViewerProtocolPolicyallow-all` -DefaultCacheBehavior_MinTTL1000` -DistributionConfig_PriceClass"PriceClass_All"` -CacheBehaviors_Quantity0` -Aliases_Quantity0

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册