使用 Amazon CLI 配置 Amazon EC2 安全组和实例类型
您可以使用 Amazon 命令行界面(Amazon CLI)在 Elastic Beanstalk 环境中配置 Amazon EC2 实例。
使用 Amazon CLI 配置 EC2 安全组
本主题提供了单实例和负载均衡(多实例)环境的不同 EC2 安全组配置示例。有关这些示例中选项的更多信息,请参阅 aws:autoscaling:launchconfiguration。
备注
默认情况下,创建环境操作会提供一个 EC2 安全组。它还会默认创建一个具有应用程序负载均衡器的环境。
更新环境操作可用于通过布尔选项 DisableDefaultEC2SecurityGroup 为环境禁用或启用默认的 EC2 安全组。示例 5 展示了如何将环境设置回默认安全配置(如果您之前曾对其修改过)。
以下示例展示了选择不使用默认 EC2 安全组而改为提供自定义安全组的 create-environment 命令。由于 DisableDefaultEC2SecurityGroup 选项设置为 true,因此不会创建 Elastic Beanstalk 通常与 EC2 实例关联的默认 EC2 安全组。因此,您必须为其他安全组提供 SecurityGroups 选项。
请注意,aws:elasticbeanstalk:environment EnvironmentType 选项设置为 SingleInstance。若要创建单实例环境,由于 LoadBalanced 是默认的 EnvironmentType,因此必须指定此选项。由于此环境不包含负载均衡器,我们无需指定负载均衡器安全组。
例 1:带有自定义 EC2 安全组的新单实例环境(命名空间选项内联)
aws elasticbeanstalk create-environment \ --regionus-east-1\ --application-namemy-app\ --environment-namemy-env\ --solution-stack-name"64bit Amazon Linux 2023 v6.5.0 applrunning Node.js 22"\ --option-settings \ Namespace=aws:elasticbeanstalk:environment,OptionName=EnvironmentType,Value=SingleInstance\ Namespace=aws:autoscaling:launchconfiguration,OptionName=IamInstanceProfile,Value=aws-elasticbeanstalk-ec2-role\ Namespace=aws:autoscaling:launchconfiguration,OptionName=DisableDefaultEC2SecurityGroup,Value=true\ Namespace=aws:autoscaling:launchconfiguration,OptionName=SecurityGroups,Value=sg-abcdef01, sg-abcdef02\ Namespace=aws:autoscaling:launchconfiguration,OptionName=EC2KeyName,Value=my-keypair
作为替代方法,请使用 options.json 文件来指定命名空间选项,而不是将其内联。
例 2:带有自定义 EC2 安全组的新单实例环境(options.json 文件中的命名空间选项)
aws elasticbeanstalk create-environment \ --regionus-east-1\ --application-namemy-app\ --environment-namemy-env\ --solution-stack-name"64bit Amazon Linux 2023 v6.5.0 running Node.js 22"\ --option-settingsfile://options.json
### example options.json ### [ { "Namespace" : "aws:elasticbeanstalk:environment", "OptionName" : "EnvironmentType", "Value" : "SingleInstance" }, { "Namespace": "aws:autoscaling:launchconfiguration", "OptionName": "IamInstanceProfile", "Value": "aws-elasticbeanstalk-ec2-role" }, { "Namespace": "aws:autoscaling:launchconfiguration", "OptionName": "DisableDefaultEC2SecurityGroup", "Value": "true" }, { "Namespace": "aws:autoscaling:launchconfiguration", "OptionName": "SecurityGroups", "Value": "sg-abcdef01, sg-abcdef02" }, { "Namespace": "aws:autoscaling:launchconfiguration", "OptionName": "EC2KeyName", "Value": "my-keypair" } ]
以下示例创建了一个负载均衡环境。其指定了 aws:elasticbeanstalk:environment 命名空间选项,并将 LoadBalancerType 设置为 application。由于我们使用 DisableDefaultEC2SecurityGroup 选项禁用默认的 EC2 安全组,因此需要像前一个示例一样,再次使用 aws:autoscaling:launchconfiguration SecurityGroups 选项为 EC2 实例提供自定义安全组。由于此环境具有用于路由流量的负载均衡器,因此我们还必须为负载均衡器提供安全组。
若要创建具有经典负载均衡器但其他配置相同的环境,请将 aws:elasticbeanstalk:environment 命名空间选项 LoadBalancerType 的配置更新为 classic。
不同的负载均衡器类型具有不同的命名空间,命名空间中包含用于指定安全组的选项:
-
应用程序负载均衡器:aws:elbv2:loadbalancer
SecurityGroups选项 -
经典负载均衡器:aws:elb:loadbalancer
SecurityGroups选项 -
网络负载均衡器:由于网络负载均衡器没有安全组,因此请使用 VPC 标识符来配置 EC2 安全组。有关更多信息,请参阅《User Guide for Network Load Balancers》 中的 Update the security groups for your Network Load Balancer。
例 3:带有自定义 EC2 安全组的新多实例环境(options.json 文件中的命名空间选项)
aws elasticbeanstalk create-environment \ --regionus-east-1\ --application-namemy-app\ --environment-namemy-env\ --solution-stack-name"64bit Amazon Linux 2023 v6.5.0 running Node.js 22"\ --option-settingsfile://options.json
### example options.json ### [ { "Namespace" : "aws:elasticbeanstalk:environment", "OptionName" : "EnvironmentType", "Value" : "LoadBalanced" }, { "Namespace" : "aws:elasticbeanstalk:environment", "OptionName" : "LoadBalancerType", "Value" : "application" }, { "Namespace" : "aws:elbv2:loadbalancer", "OptionName" : "SecurityGroups", "Value" : "sg-abcdefghikl012345" }, { "Namespace": "aws:autoscaling:launchconfiguration", "OptionName": "IamInstanceProfile", "Value": "aws-elasticbeanstalk-ec2-role" }, { "Namespace": "aws:autoscaling:launchconfiguration", "OptionName": "DisableDefaultEC2SecurityGroup", "Value": "true" }, { "Namespace": "aws:autoscaling:launchconfiguration", "OptionName": "SecurityGroups", "Value": "sg-abcdef01, sg-abcdef02" }, { "Namespace": "aws:autoscaling:launchconfiguration", "OptionName": "EC2KeyName", "Value": "my-keypair" } ]
您可以使用 update-environment 命令为现有环境禁用默认 EC2 安全组。以下示例命令禁用了默认 EC2 安全组,并为环境的 EC2 实例分配了自定义 EC2 安全组。
根据环境是否应用了负载均衡以及负载均衡器的类型使用示例 4(a)、4(b)或 4(c)中的示例 options.jason 文件。配置文件 4(a)为单实例环境指定安全组。由于单实例环境不需要负载均衡器,因此我们仅为 EC2 实例提供了安全组。配置文件 4(b)和 4(c)为应用程序负载均衡器和经典负载均衡器指定安全组。对于这些使用案例,我们还需要为负载均衡器指定安全组。
例 4:更新现有环境以禁用默认的 EC2 安全组(options.json 文件中的命名空间选项)
aws elasticbeanstalk update-environment \ --regionus-east-1\ --application-namemy-app\ --environment-namemy-env\ --solution-stack-name"64bit Amazon Linux 2023 v6.5.0 running Node.js 22"\ --option-settingsfile://options.json
例 4(a):单实例环境的配置文件(无负载均衡器)
### example options.json ### [ { "Namespace": "aws:autoscaling:launchconfiguration", "OptionName": "DisableDefaultEC2SecurityGroup", "Value": "true" }, { "Namespace": "aws:autoscaling:launchconfiguration", "OptionName": "SecurityGroups", "Value": "sg-abcdef01, sg-abcdef02" } ]
若要更新使用应用程序负载均衡器的环境,请使用 aws:elbv2:loadbalancer 命名空间为负载均衡器指定安全组。
例 4(b):带有应用程序负载均衡器的环境的配置文件
### example options.json ### [ { "Namespace" : "aws:elbv2:loadbalancer", "OptionName" : "SecurityGroups", "Value" : "sg-abcdefghikl012345" }, { "Namespace": "aws:autoscaling:launchconfiguration", "OptionName": "DisableDefaultEC2SecurityGroup", "Value": "true" }, { "Namespace": "aws:autoscaling:launchconfiguration", "OptionName": "SecurityGroups", "Value": "sg-abcdef01, sg-abcdef02" } ]
若要更新使用经典负载均衡器的环境,请使用 aws:elb:loadbalancer 命名空间为负载均衡器指定安全组。
例 4(c):使用经典负载均衡器的环境的配置文件
### example options.json ### [ { "Namespace" : "aws:elb:loadbalancer", "OptionName" : "SecurityGroups", "Value" : "sg-abcdefghikl012345" }, { "Namespace": "aws:autoscaling:launchconfiguration", "OptionName": "DisableDefaultEC2SecurityGroup", "Value": "true" }, { "Namespace": "aws:autoscaling:launchconfiguration",n "OptionName": "SecurityGroups", "Value": "sg-abcdef01, sg-abcdef02" } ]
若要使用由 Elastic Beanstalk 分配的默认安全组将环境恢复为默认行为和配置,请使用 update-environment 命令将 DisableDefaultEC2SecurityGroup 设置为 false。对于多实例环境,Elastic Beanstalk 还会处理环境负载均衡器的安全组和网络流量规则。
以下示例适用于单实例或多实例(负载均衡)环境:
例 5:将环境更新回使用默认安全组(options.json 文件中的命名空间选项)
aws elasticbeanstalk update-environment \ --regionus-east-1\ --application-namemy-app\ --environment-namemy-env\ --solution-stack-name"64bit Amazon Linux 2023 v6.5.0 running Node.js 22"\ --option-settingsfile://options.json
### example options.json ### [ { "Namespace": "aws:autoscaling:launchconfiguration", "OptionName": "DisableDefaultEC2SecurityGroup", "Value": "false" } ]
使用 Amazon CLI 配置 EC2 的实例类型
本主题演示了在环境中配置 EC2 实例的实例类型的示例。
前两个示例创建新环境。该命令指定基于 arm64 处理器架构的 Amazon EC2 实例类型 t4g.mall。Elastic Beanstalk 基于区域、平台版本和实例类型确定 EC2 实例的默认镜像 ID (AMI)。实例类型对应于处理器架构。solution-stack-name 参数适用于平台版本。
例 1 — 创建一个新的基于 arm64 的环境(命名空间选项内联)
aws elasticbeanstalk create-environment \ --regionus-east-1\ --application-namemy-app\ --environment-namemy-env\ --solution-stack-name"64bit Amazon Linux 2 v3.4.7 running Docker"\ --option-settings \ Namespace=aws:autoscaling:launchconfiguration,OptionName=IamInstanceProfile,Value=aws-elasticbeanstalk-ec2-role\ Namespace=aws:ec2:instances,OptionName=InstanceTypes,Value=t4g.small
作为替代方法,请使用 options.json 文件来指定命名空间选项,而不是将其内联。
例 2 — 创建一个新的基于 arm64 的环境(options.json 文件中的命名空间选项)
aws elasticbeanstalk create-environment \ --regionus-east-1\ --application-namemy-app\ --environment-namemy-env\ --solution-stack-name"64bit Amazon Linux 2 v3.4.7 running Docker"\ --option-settingsfile://options.json
### example options.json ### [ { "Namespace": "aws:autoscaling:launchconfiguration", "OptionName": "IamInstanceProfile", "Value": "aws-elasticbeanstalk-ec2-role" }, { "Namespace": "aws:ec2:instances", "OptionName": "InstanceTypes", "Value": "t4g.small" } ]
接下来的两个示例使用 update-environment 命令更新现有环境的配置。在本例中,我们添加了也基于 arm64 处理器架构的另一种实例类型。对于现有环境,添加的所有实例类型必须具有相同的处理器架构。如果想要使用不同架构的实例类型替换现有的实例类型,则可以这样做。但请确保命令中的所有实例类型都具有相同类型的架构。
例 3 — 更新现有的基于 arm64 的环境(命名空间选项内联)
aws elasticbeanstalk update-environment \ --regionus-east-1\ --application-namemy-app\ --environment-namemy-env\ --solution-stack-name"64bit Amazon Linux 2 v3.4.7 running Docker"\ --option-settings \ Namespace=aws:autoscaling:launchconfiguration,OptionName=IamInstanceProfile,Value=aws-elasticbeanstalk-ec2-role\ Namespace=aws:ec2:instances,OptionName=InstanceTypes,Value=t4g.small,t4g.micro
作为替代方法,请使用 options.json 文件来指定命名空间选项,而不是将其内联。
例 4 — 更新现有的基于 arm64 的环境(options.json 文件中的命名空间选项)
aws elasticbeanstalk update-environment \ --regionus-east-1\ --application-namemy-app\ --environment-namemy-env\ --solution-stack-name"64bit Amazon Linux 2 v3.4.7 running Docker"\ --option-settingsfile://options.json
### example options.json ### [ { "Namespace": "aws:autoscaling:launchconfiguration", "OptionName": "IamInstanceProfile", "Value": "aws-elasticbeanstalk-ec2-role" }, { "Namespace": "aws:ec2:instances", "OptionName": "InstanceTypes", "Value": "t4g.small, t4g.micro" } ]
接下来的两个示例显示了更多 create-environment 命令。这些示例不提供 InstanceTypes 的值。未指定 InstanceTypes 值时,Elastic Beanstalk 默认使用基于 x86 的处理器架构。环境的 EC2 实例的镜像 ID (AMI) 将基于区域、平台版本和默认实例类型确定默认值。实例类型对应于处理器架构。
例 5 — 创建一个新的基于 x86 的环境(命名空间选项内联)
aws elasticbeanstalk create-environment \ --regionus-east-1\ --application-namemy-app\ --environment-namemy-env\ --solution-stack-name"64bit Amazon Linux 2 v3.4.7 running Docker"\ --option-settings \ Namespace=aws:autoscaling:launchconfiguration,OptionName=IamInstanceProfile,Value=aws-elasticbeanstalk-ec2-role
作为替代方法,请使用 options.json 文件来指定命名空间选项,而不是将其内联。
例 6 — 创建一个新的基于 x86 的环境(options.json 文件中的命名空间选项)
aws elasticbeanstalk create-environment \ --regionus-east-1\ --application-namemy-app\ --environment-namemy-env\ --solution-stack-name"64bit Amazon Linux 2 v3.4.7 running Docker"\ --option-settingsfile://options.json
### example options.json ### [ { "Namespace": "aws:autoscaling:launchconfiguration", "OptionName": "IamInstanceProfile", "Value": "aws-elasticbeanstalk-ec2-role" } ]