使用 Amazon CLI 配置 Amazon EC2 安全组和实例类型 - Amazon Elastic Beanstalk
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 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 \ --region us-east-1 \ --application-name my-app \ --environment-name my-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 \ --region us-east-1 \ --application-name my-app \ --environment-name my-env \ --solution-stack-name "64bit Amazon Linux 2023 v6.5.0 running Node.js 22" \ --option-settings file://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

不同的负载均衡器类型具有不同的命名空间,命名空间中包含用于指定安全组的选项:

例 3:带有自定义 EC2 安全组的新多实例环境(options.json 文件中的命名空间选项)
aws elasticbeanstalk create-environment \ --region us-east-1 \ --application-name my-app \ --environment-name my-env \ --solution-stack-name "64bit Amazon Linux 2023 v6.5.0 running Node.js 22" \ --option-settings file://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 \ --region us-east-1 \ --application-name my-app \ --environment-name my-env \ --solution-stack-name "64bit Amazon Linux 2023 v6.5.0 running Node.js 22" \ --option-settings file://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 \ --region us-east-1 \ --application-name my-app \ --environment-name my-env \ --solution-stack-name "64bit Amazon Linux 2023 v6.5.0 running Node.js 22" \ --option-settings file://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 \ --region us-east-1 \ --application-name my-app \ --environment-name my-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 \ --region us-east-1 \ --application-name my-app \ --environment-name my-env \ --solution-stack-name "64bit Amazon Linux 2 v3.4.7 running Docker" \ --option-settings file://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 \ --region us-east-1 \ --application-name my-app \ --environment-name my-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 \ --region us-east-1 \ --application-name my-app \ --environment-name my-env \ --solution-stack-name "64bit Amazon Linux 2 v3.4.7 running Docker" \ --option-settings file://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 \ --region us-east-1 \ --application-name my-app \ --environment-name my-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 \ --region us-east-1 \ --application-name my-app \ --environment-name my-env \ --solution-stack-name "64bit Amazon Linux 2 v3.4.7 running Docker" \ --option-settings file://options.json
### example options.json ### [ { "Namespace": "aws:autoscaling:launchconfiguration", "OptionName": "IamInstanceProfile", "Value": "aws-elasticbeanstalk-ec2-role" } ]