使用配置 Amazon EC2 安全组和实例类型 AWS CLI - AWS Elastic Beanstalk

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用配置 Amazon EC2 安全组和实例类型 AWS CLI

您可以使用 AWS 命令行界面 (AWS CLI) 在 Elastic Beanstalk 环境中配置亚马逊 EC2 实例。

使用配置 EC2 安全组 AWS CLI

本主题提供了单实例和负载平衡(多实例)环境的不同 EC2 安全组配置示例。有关这些示例中选项的更多信息,请参阅 aws:autoscaling:launchconfiguration

注意

默认情况下,创建环境操作会提供一个 EC2 安全组。它还会默认创建一个具有应用程序负载均衡器的环境。

更新环境操作可用于通过布尔选项为您的环境禁用或启用默认 EC2安全组DisableDefaultEC2SecurityGroup示例 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 安全组,因此我们需要再次为 EC2 实例提供自己的自定义安全组,并使用该aws:autoscaling:launchconfigurationSecurityGroups选项,就像前面的示例一样。由于此环境具有用于路由流量的负载均衡器,因此我们还必须为负载均衡器提供安全组。

若要创建具有经典负载均衡器但其他配置相同的环境,请将 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" } ]

您可以使用 u pdate- 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" } ]

EC2 使用配置实例类型 AWS CLI

本主题提供了在您的环境中配置 EC2 实例类型的示例。

前两个示例创建新环境。该命令指定了基于 arm64 处理器架构的亚马逊 EC2 实例类型 t4g.small。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" } ]