部署到AWS

Powered by AWS Cloud Computing

有两个不同的子生成器,用于将JHipster项目部署到AWS:

  • aws-containers: 基于Docker容器的子生成器,用于通过AWS Elastic Container Service部署应用程序。这对于复杂的应用程序和/或微服务架构非常有用。
  • aws: 基于实例的子生成器,用于通过Elastic Beanstalk部署应用程序。对于比较小的应用程序来说,这很棒(而且非常便宜!)。

aws-containers子生成器

使用单体应用流程时,该子生成器将使用在Elastic Container Service上运行的AWS Fargate自动部署基于docker的JHipster应用程序。它利用许多AWS服务来实现此目的:

  • AWS Fargate: 一种新的AWS服务,该服务允许运行容器而无需担心基础VM实例基础架构。子生成器当前使用弹性容器服务来管理容器。
  • Elastic Container Registry: Docker镜像仓库,用于存储应用程序镜像。
  • Elastic Load Balanacer - Network Load Balancer: 网络负载均器用于将流量定向到容器。
  • Aurora: AWS托管数据库服务,与MySQL和PostgreSQL兼容。
  • AWS S3: 用于存储CloudFormation脚本的文件存储。
  • CloudWatch: 分布式日志收集工具,用于查看容器的状态。
  • AWS Cloudformation: 所有必需的服务(AWS System Manager Parameters除外)均在一组CloudFormation文件中定义。基本文件包含高级服务,然后每个应用程序都在其自己的文件中定义,该文件称为嵌套架构。
  • AWS System Manager - Parameter Store: 安全密码存储机制,用于存储数据库密码。运行子生成器将引入一个新的Spring Cloud组件,该组件将在应用程序启动时读取密码。
  • AWS - IAM Role: 生成器创建一个新角色,并将使用关联的策略执行ECS任务。

使用微服务流程时,这将指导您创建[Elastic Kubernetes Cluster (EKS)](https://aws.amazon.com/eks/) 和[Elastic Container Registries(ECR)](https://aws.amazon.com/ecr/),用于您的所有微服务和网关。 之后,您必须使用[Kubernetes子生成器](/ kubernetes)生成Kubernetes配置文件, 然后 通过docker将其推送到ECR。 可以在[https://github.com/jhipster/generator-jhipster/issues/8366#issuecomment-535329759]中找到示例部署。(https://github.com/jhipster/generator-jhipster/issues/8366#issuecomment -535329759)

AWS Component Diagram

如果选择部署应用程序,则子生成器将在应用程序启动之前经历多个步骤。

  1. 重建应用程序的Docker镜像,使其包含新生成的Spring Cloud类。
  2. 为CloudFormation YAML文件创建一个S3存储。
  3. 将Cloudformation YAML文件上传到S3存储。
  4. 创建CloudFormation(不包括ECS服务)。最初不包括该服务,因此我们有机会将所需的Docker镜像上载到新创建的仓库中,因此该服务在创建后将成功启动。
  5. 标记Docker镜像并上传到仓库。
  6. 在AWS SSM中设置数据库访问密码。这已从Cloudformation文件中排除,因为它当前不支持SecureStrings,并且在Cloudformation中存储密码是一种不好的做法。
  7. 更新架构以包括ECS服务。打印出负载均衡器URL。

局限性

  • 仅支持以下数据库类型(全部通过Aurora):Mysql,MariaDB和PostgreSQL。
  • 当前不支持实例间通信。其最大的后果是节点之间不支持缓存同步。建议查看AWS的ElasticCache服务以了解分布式缓存要求。
  • SSL不可用。

费用

警告: 一旦开始部署,此生成器将开始计算成本。在不了解所使用组件的成本影响的情况下,请勿使其长时间运行。

此生成器使用的服务不在AWS Free Tier范围内。该生成器旨在允许应用程序以生产级方式运行,因此不建议将其用于小型或对成本敏感的工作环境。

运行子生成器

在运行子生成器之前,您需要设置您的AWS凭证,以便可以访问它们。尽管您无需安装Amazon CLI即可运行此生成器,但建议将其用于后续开发。使用您的Amazon AWS帐户登录并为JHipster应用程序创建用户。之后,在Mac/Linux上的~/.aws/credentials或Windows上的C:\Users\USERNAME\.aws\credentials处创建凭据文件。凭据文件的替代方法是使用环境变量来设置访问密钥ID+密码。

新文件夹中运行:

jhipster aws-containers

根据您的AWS环境, 子生成器将询问有关您如何部署应用程序的许多问题。有以下几件事情要考虑:

  • 一个单体应用程序可以部署在单层(使用默认VPC配置)中,也可以部署在双层模型中(此处为示例CloudFormation文件)。确定部署子网时,应确保至少在两个可用区中部署了应用程序,否则Amazon Aurora将无法正确部署。
  • 如果需要删除生成的CloudFormation stack,则必须先删除所有创建的ECR镜像,然后再尝试删除stack。如果CloudFormation仍保留镜像,则无法删除该仓库。

更新已部署的应用程序

在部署了应用程序之后,可以通过再次运行子生成器来重新部署它:

jhipster aws-containers

系统将再次提示您确认设置,使您有机会重新调整性能等级。请注意,在某些情况下,应用程序在终止以前部署的任务实例时会遇到问题,这可能需要通过控制台或CLI手动终止它们。

删除应用程序

要删除已部署的应用程序:

  • 导航到Elastic Container Service > Repositories > [您的应用程序名称],然后删除存储库中的所有镜像。不要删除仓库本身。如果存储库中有图像,则无法通过CloudFormation删除应用程序。
  • 导航到CloudFormation并删除您创建的stack。这将取消提供大多数服务。

为了彻底清除环境,还需要删除其他两个配置。

  • 通过AWS Systems Manager > Parameter Store删除存储的密码。
  • 从生成的S3存储桶中删除CloudFormation模板文件,该文件的格式为[Stack Name]-[timestamp]

aws子生成器

该子生成器允许使用Elastic Beanstalk将JHipster应用程序自动部署到Amazon AWS云

提示: 作为Elastic Beanstalk的替代方案,您还可以使用Boxfuse将JHipster应用程序部署到AWS。 Boxfuse具有对JHipster的一流支持,以及对MySQL和PostgreSQL数据库的支持。

局限性

  • 您只能将其与SQL数据库一起使用(不支持Oracle和Microsoft SQL Server)。
  • 默认情况下,Websocket在负载均衡后面不起作用。

先决条件

在运行子生成器之前,您需要设置您的AWS SDK凭证。使用您的Amazon AWS帐户登录并为JHipster应用程序创建用户。要授予该用户所需的权限,请附加AWSElasticBeanstalkFullAccessAmazonRDSFullAccessIAMFullAccess策略。

之后,在Mac/Linux上的~/.aws/credentials或Windows上的C:\Users\USERNAME\.aws\credentials处创建凭据文件。

[default]
aws_access_key_id = your_access_key
aws_secret_access_key = your_secret_key

如果您使用的命名配置文件与default配置文件不同,则只需为环境变量AWS_PROFILE设置正确的配置文件即可。

部署您的应用程序

要将您的应用程序部署到Amazon AWS,请输入:

jhipster aws

这应该将您的应用程序打包为”production”模式,创建一个Beanstalk应用程序(带有SQL数据库),在S3上上传代码,然后启动该应用程序。

更新已部署的应用程序

在部署了应用程序之后,可以通过再次运行子生成器来重新部署它:

jhipster aws

子生成器再次询问您的数据库凭据,但在更新期间将忽略它们。

删除您的应用程序

  • 删除Elastic Beanstalk。
  • 删除与应用程序相关的S3存储桶。
  • 删除 亚马逊关系数据库服务 (RDS) 实例.
  • 删除与应用程序相关的EC2安全组。 您可以通过查看安全组的描述找到此内容,该描述应为Enable database access to Beanstalk application

更多信息