实验1:使用Cloudformation 一键部署部署电商独立站(应用零代码全栈交付)

使用 cloudformation 部署部署电商独立站

  • 本实验中,我们将通过cloudformation部署测试环境,环境将使用流行的开源ERP软件Odoo作为端到端电商独立站应用示范,她将运行在AWS EKS环境中,RDS postgreSQL作为默认的数据库层,ElasticCache Redis存储session和缓存,EFSS3实现共享存储。以上架构在企业实际应用中常常被作为典型的应用负载框架广泛部署。兼顾弹性,稳定性,易用性,易维护性,并且所有实例节点基于Graviton2提供超高性价比

您可以在这里查看搭建完成的Demo

demo website

demo website

资源清单

我们将使用cloudformation模板配置以下资源:

  1. Amazon S3存储桶,用于保存ERP或电商独立站静态数据数据。
  2. IAM角色,用于管理整套环境服务权限的IAM角色,以访问和供应其他AWS资源
  3. 新建VPC,包含两个公有子网、两个私有子网,Internet网关和安全组以对外提供服务并支持安全访问控制。
  4. 一台堡垒机EC2实例,创建将被放置在公有子网,对下游组件它将向架构前后端进行配置管理,对公网您可以配置只有您的本地IP地址可以与之通讯
  5. EKS 集群和工作组,工作组将被放置在私有子网,运行Odoo模块化容器应用
  6. 您可以自定义Aurora postgreSQL或RDS postgreSQL的多副本不同高可用级别和性能级别数据库层
  7. 您可以自定义不同高可用级别和性能级别的ElasticCache Redis存储会话和缓存数据
  8. 新建EFS共享存储,将共享存储Odoo应用中的静态文件。

实验选项:

如果您是一个人使用自己的AWS账户或是使用PSA导师发送的AWS Event Engine账号进行实验,建议您使用cloudformation启动环境。而如果您是多人使用同一账户的不同IAM User进行实验,建议您手动搭建环境进行实验,并在必要时明确区别您和他人的资源命名,例如在任何资源名后加入-user1

使用cloudformation搭建环境

1.使用有效凭证登录AWS控制台

2.选择AWS区域。 此实验室的首选区域是us-east-1

  • 您可以点击以下的 Launch Stack ,这样将直接跳转到首选区域的堆栈创建页面
账户所属 实验模板
海外区域账户

3.若您选择自定义的区域后,请导航到cloudformation服务控制台。

cloudformation Service Console 4.填写对应的堆栈URL,单击“创建堆栈”。

5.单击“启动堆栈”按钮以启动堆栈,然后单击“下一步”:

cloudformation Service Console

6.你可以自定义指定为StackName,然后单击“下一步”。 cloudformation Service Console 7.填写AZ信息,选择您Key pair name的单击“下一步”。 cloudformation Service Console 您也可以在其他的选项中配置您需要的架构,例如:postgreSQL、redis、堡垒机、EKS的实例类型RDS的自动备份策略是否多AZ部署EKS集群的节点数量Odoo的管理员密码,等等。

8.确认使用自定义名称创建IAM资源的权限,然后单击“创建”。

cloudformation Service Console 9.等待cloudformation供应所有资源。 大约需要35分钟才能完成执行

10.cloudformation部署成功,包含8个内嵌stack,主stack为Graviton2PartnerWorkshop

cloudformation Console output

11.点击Graviton2PartnerWorkshop进入output,即可查看您Odoo应用的URL。

cloudformation Console output

如果您遇到Graviton2PartnerWorkshop已存在的报错,可能是您在之前的使用中已经自动创建了这个模板并且未完成删除,请您替换模板名称或是导航至cloudformation控制台完成删除并重新创建。

登录OpenERP后台管理系统

在您的任意浏览器输出访问output的URL,这是一个ELB负载均衡器,后面连接至EKS 集群内的各个odoo Pod的地址,例如http://ae43138847e0343bda0586735063757c-223344533.us-east-1.elb.amazonaws.com/

输入您的自定义密码,如果cloudformation填写参数页面您没有进行改动,默认用户名密码为admin/admin odoo-登录 ps.初次登陆时会触发应用在数据库建表,这个过程大概需要30秒等待

登录后您可以看见odoo流行的企业应用列表。除了这些,odoo拥有活跃的开源社区,提供上千个成熟的企业级应用,并将这些应用封装为模块化插件,您只需点击任意模块的install即可进行模块安装,并主动跳转到您登陆权限对应的该应用后台管理界面。有关更多关于Odoo的信息,请您查阅 odoo_user_doc

Odoo is a suite of web based open source business apps. The main Odoo Apps include an Open Source CRM, Website Builder, eCommerce, Warehouse Management, Project Management, Billing & Accounting, Point of Sale, Human Resources, Marketing, Manufacturing, … Odoo Apps can be used as stand-alone applications, but they also integrate seamlessly so you get a full-featured Open Source ERP when you install several Apps.

odoo-app-list

现在我们点击website—》install,稍等30秒左右将会完成模块安装,并跳转到主题选择页面

odoo-install-website

进入到website编辑页面,您可以通过简单的拉拽完成自定义门户网站搭建,使用体验类似日常的办公文档编辑软件,包括双击替换图片、调整字体、替换视频URL等。当然同时您也可以直接在这个控制台浏览器窗口修改或编写html代码,以完成您需要的其他功能

odoo编辑网页

点击左上角的主图标,您可以选择其他项目,例如点击settings设置系统为中文,点击apps安装其他应用,或许您现在就可以在10分钟内完成一个在线教育平台的demo。

odoo-安装其他应用


(可选)配置堡垒机之外的Role获得EKS集群控制权

Cloudformation帮助我们创建了EKS集群等资源,这些资源默认只能在内网进行通讯。我们仅能通过ssh至堡垒机从而对这些资源进行后台管理。这也是我们安全性最佳实践的原则。

如果您出于对实验便利的需要,想从控制台界面操作EKS集群。你需要为EKS集群的configmap进行编辑,以添加您当前使用的除了堡垒机role之外的用户访问EKS的授权。要完成这个操作您可以进行如下配置:

1,ssh至您的堡垒机,例如(请把c2-54-176-92-104.us-east-1.compute.amazonaws.com替换成你自己的堡垒机地址,ee-default-keypair.pem是你在创建Cloudformation时选择的的Key,如果你不是使用默认模板做的选择,请替换为你自己的Key name。通过eventengine做实验的同事请在https://dashboard.eventengine.run/dashboard页面下载ee-default-keypair.pem)

ssh -i "ee-default-keypair.pem" ec2-user@ec2-54-176-92-104.us-east-1.compute.amazonaws.com

若您成功登录,您应该是第一次登陆到堡垒机,现在我们需要通过aws eks命令将堡垒机的kubeconfig文件进行更新,使得堡垒机可以管控EKS集群

aws eks --region us-east-1 update-kubeconfig --name odoo  

由于EKS集群由堡垒机创建,堡垒机默认就有EKS集群的管理权限,您可以通过kubectl get pods -n odoo 命令,查看我们已经通过脚本部署的2个odoo应用。

kubectl get pods -n odoo
NAME                        READY   STATUS    RESTARTS   AGE
odoo-arm-85b78fbb5d-62bw6   1/1     Running   0          9d
odoo-arm-85b78fbb5d-6wzq6   1/1     Running   0          9d

2,在堡垒机运行以下命令,编辑configmap以为用户添加权限,请将${ACCOUNT_ID}替换为您的账号,将${AWS_REGION}替换为您实验的region

eksctl create iamidentitymapping --cluster odoo \
--arn arn:aws:iam::${ACCOUNT_ID}:role/TeamRole \
--group system:masters \
--username admin \
--region ${AWS_REGION}

编辑完成后您可以通过控制台查看您的集群

DR

如果您还需要通过你自己的笔记本管理集群,你需要在本地配置了相应的aksk,完成后可以在本地运行kubectl get nodes,进行测试

1,在您的本地终端安装 AWS CLI,配置用户的AKSK和默认region,如果您没有配置过AWS CLI您可以参考AWS CLI安装完成安装和配置CLI工作。如果您之前安装过CLI,您只需要更换AKSK为您实验的AKSK即可

2,运行以下命令,请将regionname字段替换为您的环境,例如下面示范的,us-east-1 和 odoo(如何您使用默认参数)

aws eks --region us-east-1 update-kubeconfig --name odoo  

3,运行以下命令以获取并记录您的 IAM ARN username

aws sts get-caller-identity

{
    "UserId": "AIDAT2RQT5XMFX7535ZCV",
    "Account": "xxxxxxxx",
    "Arn": "arn:aws:iam::xxxxxxxxx:user/jiade"
}
(END)

4,在您的本地执行以下命令测试您配置的本地管理

kubectl get nodes

NAME                                        STATUS   ROLES    AGE   VERSION
ip-10-0-28-210.us-east-1.compute.internal   Ready    <none>   9d    v1.18.9-eks-d1db3c
ip-10-0-45-169.us-east-1.compute.internal   Ready    <none>   9d    v1.18.9-eks-d1db3c