

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

# 使用配置 Amazon EC2 安全组和实例类型 Amazon CLI
<a name="using-features.managing.ec2.aws-cli"></a>

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

## 使用配置 EC2 安全组 Amazon CLI
<a name="using-features.managing.ec2.aws-cli.security-groups"></a>

本主题提供了单实例和负载均衡（多实例）环境的不同 EC2 安全组配置示例。有关这些示例中选项的更多信息，请参阅 [aws:autoscaling:launchconfiguration](command-options-general.md#command-options-general-autoscalinglaunchconfiguration)。

**注意**  
默认情况下，创建环境操作会提供一个 EC2 安全组。它还会默认创建一个具有应用程序负载均衡器的环境。  
更新环境操作可用于通过布尔选项 `DisableDefaultEC2SecurityGroup` 为环境禁用或启用默认的 EC2 安全组。*示例 5* 展示了如何将环境设置回默认安全配置（如果您之前曾对其修改过）。

以下示例展示了选择不使用默认 EC2 安全组而改为提供自定义安全组的 [create-environment](https://docs.amazonaws.cn/cli/latest/reference/elasticbeanstalk/create-environment.html) 命令。由于 `DisableDefaultEC2SecurityGroup` 选项设置为 `true`，因此不会创建 Elastic Beanstalk 通常与 EC2 实例关联的默认 EC2 安全组。因此，您必须为其他安全组提供 `SecurityGroups` 选项。

请注意，[aws:elasticbeanstalk:environment](command-options-general.md#command-options-general-elasticbeanstalkenvironment) `EnvironmentType` 选项设置为 `SingleInstance`。若要创建单实例环境，由于 `LoadBalanced` 是默认的 `EnvironmentType`，因此必须指定此选项。由于此环境不包含负载均衡器，我们无需指定负载均衡器安全组。

**Example 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` 文件来指定命名空间选项，而不是将其内联。

**Example 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**  

```
### 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](command-options-general.md#command-options-general-elasticbeanstalkenvironment) 命名空间选项，并将 `LoadBalancerType` 设置为 `application`。由于我们使用 `DisableDefaultEC2SecurityGroup` 选项禁用默认的 EC2 安全组，因此需要像前一个示例一样，再次使用 [aws:autoscaling:launchconfiguration](command-options-general.md#command-options-general-autoscalinglaunchconfiguration) `SecurityGroups` 选项为 EC2 实例提供自定义安全组。由于此环境具有用于路由流量的负载均衡器，因此我们还必须为负载均衡器提供安全组。

若要创建具有经典负载均衡器但其他配置相同的环境，请将 [aws:elasticbeanstalk:environment](command-options-general.md#command-options-general-elasticbeanstalkenvironment) 命名空间选项 `LoadBalancerType` 的配置更新为 `classic`。

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


+ 应用程序负载均衡器：[aws:elbv2:loadbalancer](command-options-general.md#command-options-general-elbv2) `SecurityGroups` 选项
+ 经典负载均衡器：[aws:elb:loadbalancer](command-options-general.md#command-options-general-elbloadbalancer) `SecurityGroups` 选项
+ 网络负载均衡器：由于网络负载均衡器没有安全组，因此请使用 VPC 标识符来配置 EC2 安全组。有关更多信息，请参阅《User Guide for Network Load Balancers》** 中的 [Update the security groups for your Network Load Balancer](https://docs.amazonaws.cn/elasticloadbalancing/latest/network/load-balancer-security-groups.html)。

**Example 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**  

```
### 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](https://docs.amazonaws.cn/cli/latest/reference/elasticbeanstalk/update-environment.html) 命令为现有环境禁用默认 EC2 安全组。以下示例命令禁用了默认 EC2 安全组，并为环境的 EC2 实例分配了自定义 EC2 安全组。

根据环境是否应用了负载均衡以及负载均衡器的类型使用示例 4（a）、4（b）或 4（c）中的示例 `options.jason` 文件。配置文件 4（a）为单实例环境指定安全组。由于单实例环境不需要负载均衡器，因此我们仅为 EC2 实例提供了安全组。配置文件 4（b）和 4（c）为应用程序负载均衡器和经典负载均衡器指定安全组。对于这些使用案例，我们还需要为负载均衡器指定安全组。

**Example 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
```

**Example 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` 命名空间为负载均衡器指定安全组。

**Example 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` 命名空间为负载均衡器指定安全组。

**Example 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](https://docs.amazonaws.cn/cli/latest/reference/elasticbeanstalk/update-environment.html) 命令将 `DisableDefaultEC2SecurityGroup` 设置为 `false`。对于多实例环境，Elastic Beanstalk 还会处理环境负载均衡器的安全组和网络流量规则。

以下示例适用于单实例或多实例（负载均衡）环境：

**Example 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**  

```
### example options.json ###
[
  {
    "Namespace": "aws:autoscaling:launchconfiguration",
    "OptionName": "DisableDefaultEC2SecurityGroup",
    "Value": "false"
  }
]
```

## 使用 EC2 配置实例类型 Amazon CLI
<a name="using-features.managing.ec2.aws-cli.instance-types"></a>

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

前两个示例创建新环境。该命令指定基于 arm64 处理器架构的 Amazon EC2 实例类型 t4g.mall。Elastic Beanstalk 基于区域、平台版本和实例类型确定 EC2 实例的默认镜像 ID (AMI)。实例类型对应于处理器架构。`solution-stack-name` 参数适用于平台版本。

**Example 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` 文件来指定命名空间选项，而不是将其内联。

**Example 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**  

```
### 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](https://docs.amazonaws.cn/cli/latest/reference/elasticbeanstalk/update-environment.html) 命令更新现有环境的配置。在本例中，我们添加了也基于 arm64 处理器架构的另一种实例类型。对于现有环境，添加的所有实例类型必须具有相同的处理器架构。如果想要使用不同架构的实例类型替换现有的实例类型，则可以这样做。但请确保命令中的所有实例类型都具有相同类型的架构。

**Example 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` 文件来指定命名空间选项，而不是将其内联。

**Example 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**  

```
### 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](https://docs.amazonaws.cn/cli/latest/reference/elasticbeanstalk/create-environment.html) 命令。这些示例不提供 `InstanceTypes` 的值。未指定 `InstanceTypes` 值时，Elastic Beanstalk 默认使用基于 x86 的处理器架构。环境的 EC2 实例的镜像 ID (AMI) 将基于区域、平台版本和默认实例类型确定默认值。实例类型对应于处理器架构。

**Example 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` 文件来指定命名空间选项，而不是将其内联。

**Example 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**  

```
### example options.json ###
[
  {
    "Namespace": "aws:autoscaling:launchconfiguration",
    "OptionName": "IamInstanceProfile",
    "Value": "aws-elasticbeanstalk-ec2-role"
  }
]
```