《AWS云计算实战》2.五分钟搭建 WordPress 站点

本文内容:使用 AWS CloudFormation 实现基础设施的自动化部署。

WordPress 基础设施架构

需要使用4个不同的 AWS 服务实现 WordPress 站点项目:

  • 弹性负载均衡(Elastic Load Balancing,ELB)——AWS 提供的弹性负载均衡服务。负载均衡器用于将流量分发到 Web 服务器。
  • 弹性计算云(Elastic Computer Cloud,EC2)——EC2 服务提供的虚拟服务器。

    如果 EC2 的 CPU 利用率高于 80%,应该添加第三台服务器,以防止 Web 页面加载的时间过长。

  • 适用于 MySQL 的关系型数据库服务(Relational Database Service for MySQL)——AWS 的关系数据库服务(RDS)提供了对 MySQL 的支持。

    使用 RDS 的好处是,AWS 平台会自动完成数据库备份。

  • 安全组(Security group)——安全组类似于防火墙。

准备工作:创建并设置密钥对

  1. 创建密钥对并下载一个名为 mykey.pem 的私钥文件。
  2. Mac 系统下,shift+cmd+.显示隐藏文件,将 mykey.pem 文件放到 .ssh 目录下,设置密钥文件访问权限仅自己可见:
1
chmod 400 mykey.pem

CloudFormation(堆栈)

AWS CloudFormation 允许您快速和轻松地部署自己的基础设施资源和应用程序在 AWS 上。

AWS CloudFormation 是一项服务,可帮助您对 Amazon Web Services 资源进行建模和设置,以便能花较少的时间管理这些资源,而将更多的时间花在运行于 AWS 中的应用程序上。您创建一个描述您所需的所有 AWS 资源(如 Amazon EC2 实例或 Amazon RDS 数据库实例)的模板,并且 AWS CloudFormation 将负责为您设置和配置这些资源。

指定的 Amazon S3 模板 URL:https://s3.amazonaws.com/awsinaction/chapter2/template.json

简单4步就可以创建一个 CloudFormation

使用 CloudFormation(堆栈)的好处是:你可以随时按需自动化创建或删除基础设施。

估算成本

使用 AWS 简单月度计算器 分析博客站点基础设施的成本。

?? 配置文件

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
{	"AWSTemplateFormatVersion": "2010-09-09",	"Description": "AWS in Action: chapter 2",	"Parameters": {		"KeyName": { // 密钥对			"Description": "Key Pair name",			"Type": "AWS::EC2::KeyPair::KeyName",			"Default": "mykey"		}	},	"Mappings": {		"EC2RegionMap": {			"ap-northeast-1": {"AmazonLinuxAMIHVMEBSBacked64bit": "ami-cbf90ecb"},			"ap-southeast-1": {"AmazonLinuxAMIHVMEBSBacked64bit": "ami-68d8e93a"},			"ap-southeast-2": {"AmazonLinuxAMIHVMEBSBacked64bit": "ami-fd9cecc7"},			"eu-central-1": {"AmazonLinuxAMIHVMEBSBacked64bit": "ami-a8221fb5"},			"eu-west-1": {"AmazonLinuxAMIHVMEBSBacked64bit": "ami-a10897d6"},			"sa-east-1": {"AmazonLinuxAMIHVMEBSBacked64bit": "ami-b52890a8"},			"us-east-1": {"AmazonLinuxAMIHVMEBSBacked64bit": "ami-1ecae776"},			"us-west-1": {"AmazonLinuxAMIHVMEBSBacked64bit": "ami-d114f295"},			"us-west-2": {"AmazonLinuxAMIHVMEBSBacked64bit": "ami-e7527ed7"}		}	},	"Resources": {		"VPC": { // 虚拟网络			"Type": "AWS::EC2::VPC",			"Properties": {				"CidrBlock": "172.31.0.0/16",				"EnableDnsHostnames": "true"			}		},		"InternetGateway": { // 网关			"Type": "AWS::EC2::InternetGateway",			"Properties": {			}		},		"VPCGatewayAttachment": { // VPC 网关关联设置			"Type": "AWS::EC2::VPCGatewayAttachment",			"Properties": {				"VpcId": {"Ref": "VPC"},				"InternetGatewayId": {"Ref": "InternetGateway"}			}		},		"SubnetA": { // 虚拟网络子网A			"Type": "AWS::EC2::Subnet",			"Properties": {				"AvailabilityZone": {"Fn::Select": ["0", {"Fn::GetAZs": ""}]},				"CidrBlock": "172.31.38.0/24",				"VpcId": {"Ref": "VPC"}			}		},		" 大专栏  《AWS云计算实战》2.五分钟搭建 WordPress 站点SubnetB": { // 虚拟网络子网B			"Type": "AWS::EC2::Subnet",			"Properties": {				"AvailabilityZone": {"Fn::Select": ["1", {"Fn::GetAZs": ""}]},				"CidrBlock": "172.31.37.0/24",				"VpcId": {"Ref": "VPC"}			}		},		"RouteTable": { // 路由表			"Type": "AWS::EC2::RouteTable",			"Properties": {				"VpcId": {"Ref": "VPC"}			}		},		"RouteTableAssociationA": { // 路由表关联到子网A			"Type": "AWS::EC2::SubnetRouteTableAssociation",			"Properties": {				"SubnetId": {"Ref": "SubnetA"},				"RouteTableId": {"Ref": "RouteTable"}			}		},		"RouteTableAssociationB": { // 路由表关联到子网B			"Type": "AWS::EC2::SubnetRouteTableAssociation",			"Properties": {				"SubnetId": {"Ref": "SubnetB"},				"RouteTableId": {"Ref": "RouteTable"}			}		},		"RoutePublicNATToInternet": { // NAT 路由设置			"Type": "AWS::EC2::Route",			"Properties": {				"RouteTableId": {"Ref": "RouteTable"},				"DestinationCidrBlock": "0.0.0.0/0",				"GatewayId": {"Ref": "InternetGateway"}			},			"DependsOn": "VPCGatewayAttachment"		},		"NetworkAcl": {			"Type": "AWS::EC2::NetworkAcl",			"Properties": {				"VpcId": {"Ref": "VPC"}			}		},		"SubnetNetworkAclAssociationA": {			"Type": "AWS::EC2::SubnetNetworkAclAssociation",			"Properties": {				"SubnetId": {"Ref": "SubnetA"},				"NetworkAclId": {"Ref": "NetworkAcl"}			}		},		"SubnetNetworkAclAssociationB": {			"Type": "AWS::EC2::SubnetNetworkAclAssociation",			"Properties": {				"SubnetId": {"Ref": "SubnetB"},				"NetworkAclId": {"Ref": "NetworkAcl"}			}		},		"NetworkAclEntryIngress": {			"Type": "AWS::EC2::NetworkAclEntry",			"Properties": {				"NetworkAclId": {"Ref": "NetworkAcl"},				"RuleNumber": "100",				"Protocol": "-1",				"RuleAction": "allow",				"Egress": "false",				"CidrBlock": "0.0.0.0/0"			}		},		"NetworkAclEntryEgress": {			"Type": "AWS::EC2::NetworkAclEntry",			"Properties": {				"NetworkAclId": {"Ref": "NetworkAcl"},				"RuleNumber": "100",				"Protocol": "-1",				"RuleAction": "allow",				"Egress": "true",				"CidrBlock": "0.0.0.0/0"			}		},		"LoadBalancer": { // 负载均衡			"Type": "AWS::ElasticLoadBalancing::LoadBalancer",			"Properties": {				"Subnets": [{"Ref": "SubnetA"}, {"Ref": "SubnetB"}],				"LoadBalancerName": "awsinaction-elb",				"Listeners": [{ // 监听 80 端口					"InstancePort": "80",					"InstanceProtocol": "HTTP",					"LoadBalancerPort": "80",					"Protocol": "HTTP"				}],				"HealthCheck": { // 端口状态检测设置					"HealthyThreshold": "2",					"Interval": "5",					"Target": "TCP:80",					"Timeout": "3",					"UnhealthyThreshold": "2"				},				"SecurityGroups": [{"Ref": "LoadBalancerSecurityGroup"}], // 安全组设置				"Scheme": "internet-facing"			},			"DependsOn": "VPCGatewayAttachment"		},		"LoadBalancerSecurityGroup": { // 负载均衡安全组设置			"Type": "AWS::EC2::SecurityGroup",			"Properties": {				"GroupDescription": "awsinaction-elb-sg",				"VpcId": {"Ref": "VPC"},				"SecurityGroupIngress": [{					"CidrIp": "0.0.0.0/0",					"FromPort": 80,					"IpProtocol": "tcp",					"ToPort": 80				}]			}		},		"WebServerSecurityGroup": { // Web 服务安全组,打开80、22			"Type": "AWS::EC2::SecurityGroup",			"Properties": {				"GroupDescription": "awsinaction-sg",				"VpcId": {"Ref": "VPC"},				"SecurityGroupIngress": [{					"CidrIp": "0.0.0.0/0",					"FromPort": 22,					"IpProtocol": "tcp",					"ToPort": 22				}, {					"FromPort": 80,					"IpProtocol": "tcp",					"SourceSecurityGroupId": {"Ref": "LoadBalancerSecurityGroup"},					"ToPort": 80				}]			}		},		"DatabaseSecurityGroup": { // 数据库安全组			"Type": "AWS::EC2::SecurityGroup",			"Properties": {				"GroupDescription": "awsinaction-db-sg",				"VpcId": {"Ref": "VPC"},				"SecurityGroupIngress": [{					"IpProtocol": "tcp",					"FromPort": "3306",					"ToPort": "3306",					"SourceSecurityGroupId": {"Ref": "WebServerSecurityGroup"}				}]			}		},		"Database": { // 数据库设置			"Type": "AWS::RDS::DBInstance",			"DeletionPolicy": "Delete",			"Properties": {				"AllocatedStorage": "5",				"BackupRetentionPeriod": "0",				"DBInstanceClass": "db.t2.micro",				"DBInstanceIdentifier": "awsinaction-db",				"DBName": "wordpress",				"Engine": "MySQL",				"MasterUsername": "wordpress",				"MasterUserPassword": "wordpress",				"VPCSecurityGroups": [{"Fn::GetAtt": ["DatabaseSecurityGroup", "GroupId"]}],				"DBSubnetGroupName": {"Ref": "DBSubnetGroup"}			},			"DependsOn": "VPCGatewayAttachment"		},		"DBSubnetGroup" : {			"Type" : "AWS::RDS::DBSubnetGroup",			"Properties" : {				"DBSubnetGroupDescription" : "DB subnet group",				"SubnetIds": [{"Ref": "SubnetA"}, {"Ref": "SubnetB"}]			}		},		"LaunchConfiguration": { // 启动配置			"Type": "AWS::AutoScaling::LaunchConfiguration",			"Metadata": {				"AWS::CloudFormation::Init": {					"config": {						"packages": {							"yum": {								"php": [],								"php-mysql": [],								"mysql": [],								"httpd": []							}						},						"sources": {							"/var/www/html": "https://wordpress.org/wordpress-4.2.4.tar.gz"						},						"files": {							"/tmp/config": { // 虚拟机启动初始化 shell 脚本								"content": {"Fn::Join": ["", [									"#!/bin/bash -exn",									"cp /var/www/html/wordpress/wp-config-sample.php /var/www/html/wordpress/wp-config.phpn",									"sed -i "s/'database_name_here'/'wordpress'/g" wp-config.phpn",									"sed -i "s/'username_here'/'wordpress'/g" wp-config.phpn",									"sed -i "s/'password_here'/'wordpress'/g" wp-config.phpn",									"sed -i "s/'localhost'/'", {"Fn::GetAtt": ["Database", "Endpoint.Address"]}, "'/g" wp-config.phpn",									"chmod -R 777 wp-content/ n"								]]},								"mode": "000500",								"owner": "root",								"group": "root"							}						},						"commands": {							"01_config": {								"command": "/tmp/config",								"cwd": "/var/www/html/wordpress"							}						},						"services": {							"sysvinit": {								"httpd": {									"enabled": "true",									"ensureRunning": "true"								}							}						}					}				}			},			"Properties": {				"EbsOptimized": false,				"ImageId": {"Fn::FindInMap": ["EC2RegionMap", {"Ref": "AWS::Region"}, "AmazonLinuxAMIHVMEBSBacked64bit"]},				"InstanceType": "t2.micro",				"SecurityGroups": [{"Ref": "WebServerSecurityGroup"}],				"KeyName": {"Ref": "KeyName"},				"AssociatePublicIpAddress": true,				"UserData": {"Fn::Base64": {"Fn::Join": ["", [					"#!/bin/bash -exn",					"yum update -y aws-cfn-bootstrapn",					"/opt/aws/bin/cfn-init -v --stack ", {"Ref": "AWS::StackName"}, " --resource LaunchConfiguration --region ", {"Ref": "AWS::Region"}, "n",					"/opt/aws/bin/cfn-signal -e $? --stack ", {"Ref": "AWS::StackName"}, " --resource AutoScalingGroup --region ", {"Ref": "AWS::Region"}, "n"				]]}}			}		},		"AutoScalingGroup": {			"Type": "AWS::AutoScaling::AutoScalingGroup",			"Properties": {				"LoadBalancerNames": [{"Ref": "LoadBalancer"}],				"LaunchConfigurationName": {"Ref": "LaunchConfiguration"},				"MinSize": "2",				"MaxSize": "2",				"DesiredCapacity": "2",				"VPCZoneIdentifier": [{"Ref": "SubnetA"}, {"Ref": "SubnetB"}]			},			"CreationPolicy": {				"ResourceSignal": {					"Timeout": "PT10M"				}			},			"DependsOn": "VPCGatewayAttachment"		}	},	"Outputs": {		"URL": {			"Value": {"Fn::Join": ["", ["http://", {"Fn::GetAtt": ["LoadBalancer", "DNSName"]}, "/wordpress"]]},			"Description": "Wordpress URL"		}	}}

原文地址:https://www.cnblogs.com/lijianming180/p/12389509.html

时间: 2024-10-06 19:04:11

《AWS云计算实战》2.五分钟搭建 WordPress 站点的相关文章

01. SpringCloud实战项目-五分钟搞懂分布式基础概念

SpringCloud实战项目全套学习教程连载中 PassJava 学习教程 简介 PassJava-Learning项目是PassJava(佳必过)项目的学习教程.对架构.业务.技术要点进行讲解. PassJava 是一款Java面试刷题的开源系统,可以用零碎时间利用小程序查看常见面试题,夯实Java基础. PassJava 项目可以教会你如何搭建SpringBoot项目,Spring Cloud项目 采用流行的技术,如 SpringBoot.MyBatis.Redis. MySql. Mon

五分钟搭建App设置页面

原文出处: 陈燕翔(@燕翔de专注)   欢迎分享原创到伯乐头条 本节主题(Storyboard/模型思想搭建设置页面) 设置(Setting)页面的搭建(实现效果) 开发方式(这里提供两种,个人感觉第二种重用性较高,推荐使用.但第一种较为简单,视开发需求选择) (1)纯代码 + StoryBoard混合 开发 (2)纯代码 + 模型 思想 设置页面的搭建 假设你已经搭建出了这个基本框架<十分钟搭建App主流框架>但这毕竟是个空壳,下面让我们把设置页面简单的搭建一下吧 注:本文仅仅提供简略的搭

五分钟搭建起一个包含CRUD功能的JqGrid表格

之前的项目也曾用过JgGrid对它的基本功能也是略有了解,网上有个国外的开源的项目,但是不适合个人的风格,所以花了3天空余的时间封装了下JqGrid,也算是参加开发工作10个月以来写的第一个比较完整的小例子,高手们就直接飘过不用看了,但是由于时间短,还有很多的不足,需要后期再完善. 整体思路就是一个配置类,同时兼容了链式编程的风格,所有的动作接口都以Set开头,便于识别记.录下来以后做个人的使用手册. 链式编程风格 @(Html.JqGrid("testJqGrid2", new Gr

【 Linux 】lvs-dr模型实现HA,后端Nginx、PHP、MySQL分离 搭建wordpress站点

要求:    1. wordpress程序通过nfs共享给各个realserver    2. 后端realserver中的nginx和php分离 网络结构图: 环境说明:    OS:centos6.7 x64    主机IP:        LVS-DR(director): 192.168.2.10        realsever1 web1 Nginx: 192.168.2.11        realserver2 web2 Nginx: 192.168.2.12        PH

Win2012 R2 IIS8.5+PHP(FastCGI)+MySQL运行环境搭建wordpress博客教程

Win2012 R2 IIS8.5+PHP(FastCGI)+MySQL运行环境搭建教程 一.环境说明: 操作系统:Windows Server2012 R2 PHP版本:php 5.5.8 MySQL版本:MySQL5.6.15 二.相关软件下载: 1.PHP下载地址: http://windows.php.net/downloads/releases/php-5.5.8-nts-Win32-VC11-x86.zip 2.MySQL下载地址: http://cdn.mysql.com/Down

五分钟开发好你的第一个人工智能应用

关于人工智能,有几个常被问到的问题: Q:人工智能开发前景好不好? A:据IDC(互联网数据中心)预测,到2020年,全球人工智能收入将超过460亿美元.与传统行业相比,人工智能增长速度非常迅猛. 2018年年初,教育部也将人工智能相关内容纳入高中新课标,并启动了人工智能+教师队伍建设行动计划. Q:人工智能开发好学吗? A:只要是能学的东西都是相对简单的,人工智能不难,难的是"开发"两个字! 今天为大家介绍如何快速地构建一个人工智能识图程序--任意丢张图片给它,程序可以告诉我们图片内

《Web集群实战》第6章MySQL搭建WordPress遇到“建立数据库连接时出错”的问题

MySQL 5.7.24搭建WordPress遇到报错"建立数据库连接时出错"的问题:已经做了wordpress库的创建和授权,数据库连接信息的填写也跟<Web集群实战>书上安装WordPress的方法是一样的:1.首先怀疑是数据库命令哪里敲错了,重新检查了一遍,没有发现错误.2.下载phpMyAdmin管理工具,对MySQL数据库连接进行测试,提示"无法登录MySQL 服务器",说明是数据库连接的问题.3.查阅资料,得知:连接MySQL数据库有两种方式

AWS云计算技术分享系列直播课-第一讲课程邀请函

科技的不断创新与演进时刻在改变我们所处的时间,人们从未停止用科技的力量去探索和实现.越来越多的企业和人们正在通过 AWS 重新构建,构建更好的用户体验,构建更强大的业务平台,构建更安全的系统架构- 今天光环云社群为大家带来AWS云计算技术分享系列直播课,帮助大家由浅入深的了解和使用AWS云服务. 直播课程规划如下: 第一讲 快速开始使用AWS 第二讲 计算.存储和访问权限管理 第三讲 利用 Amazon VPC 服务搭建经典 Web 三层架构 第四讲 弹性与负载均衡 第五讲 使用 Amazon

AWS云计算平台工作使用中的心得

笔者简介 余洪春(抚琴煮酒)运维架构师.高级运维开发工程师,<构建高可用可Linux服务器>.<Linux集群和自动化运维>作者,ChinaUnix论坛"集群和高可用"及"监控及自动化运维"版版主.从事云计算和电子商务网站运维工作10多年,在Linux集群.自动化运维.云计算及高并发高流量网站架构设计等方面进行了深入的研究,在大量一线实践中积累了丰富的经验.精通负载均衡高可用和自动化运维技术,擅长高并发高流量网站系统架构设计. 笔者目前所在公