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

我们将使用cloudformation模板配置以下资源:
如果您是一个人使用自己的AWS账户或是使用PSA导师发送的AWS Event Engine账号进行实验,建议您使用cloudformation启动环境。而如果您是多人使用同一账户的不同IAM User进行实验,建议您手动搭建环境进行实验,并在必要时明确区别您和他人的资源命名,例如在任何资源名后加入-user1。
1.使用有效凭证登录AWS控制台
2.选择AWS区域。 此实验室的首选区域是us-east-1。
| 账户所属 | 实验模板 |
|---|---|
| 海外区域账户 | ![]() |
3.若您选择自定义的区域后,请导航到cloudformation服务控制台。
4.填写对应的堆栈URL,单击“创建堆栈”。
5.单击“启动堆栈”按钮以启动堆栈,然后单击“下一步”:

6.你可以自定义指定为StackName,然后单击“下一步”。
7.填写AZ信息,选择您Key pair name的单击“下一步”。
您也可以在其他的选项中配置您需要的架构,例如:postgreSQL、redis、堡垒机、EKS的实例类型。RDS的自动备份策略、是否多AZ部署、EKS集群的节点数量,Odoo的管理员密码,等等。
8.确认使用自定义名称创建IAM资源的权限,然后单击“创建”。
9.等待cloudformation供应所有资源。 大约需要35分钟才能完成执行
10.cloudformation部署成功,包含8个内嵌stack,主stack为Graviton2PartnerWorkshop

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

如果您遇到Graviton2PartnerWorkshop已存在的报错,可能是您在之前的使用中已经自动创建了这个模板并且未完成删除,请您替换模板名称或是导航至cloudformation控制台完成删除并重新创建。
在您的任意浏览器输出访问output的URL,这是一个ELB负载均衡器,后面连接至EKS 集群内的各个odoo Pod的地址,例如http://ae43138847e0343bda0586735063757c-223344533.us-east-1.elb.amazonaws.com/
输入您的自定义密码,如果cloudformation填写参数页面您没有进行改动,默认用户名密码为admin/admin
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.

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

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

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

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}
编辑完成后您可以通过控制台查看您的集群

如果您还需要通过你自己的笔记本管理集群,你需要在本地配置了相应的aksk,完成后可以在本地运行kubectl get nodes,进行测试
1,在您的本地终端安装 AWS CLI,配置用户的AKSK和默认region,如果您没有配置过AWS CLI您可以参考AWS CLI安装完成安装和配置CLI工作。如果您之前安装过CLI,您只需要更换AKSK为您实验的AKSK即可
2,运行以下命令,请将region和name字段替换为您的环境,例如下面示范的,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