

# 使用 AWS CLI 创建 DAX 集群
<a name="DAX.create-cluster.cli"></a>

本节介绍如何使用 AWS Command Line Interface (AWS CLI) 创建 Amazon DynamoDB Accelerator (DAX) 集群。如果您尚未安装和配置 AWS CLI，则必须先执行此操作。为此，请参见 *AWS Command Line Interface 用户指南*的以下说明：
+ [安装 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/installing.html)
+ [配置 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)

**重要**  
 要使用 AWS CLI 管理 DAX 集群，请安装或升级到版本 1.11.110 或更高版本。

所有 AWS CLI 示例都使用 `us-west-2` 区域和虚构的账户 ID。

**Topics**
+ [第 1 步：创建一个服务角色](#DAX.create-cluster.cli.create-service-role)
+ [第 2 步：创建一个子网组](#DAX.create-cluster.cli.create-subnet-group)
+ [第 3 步：创建一个 DAX 集群](#DAX.create-cluster.cli.create-cluster)
+ [第 4 步：配置安全组入站规则](#DAX.create-cluster.cli.configure-inbound-rules)

## 第 1 步：使用 AWS CLI 为 DAX 创建一个 IAM 服务角色以访问 DynamoDB
<a name="DAX.create-cluster.cli.create-service-role"></a>

您必须先为 Amazon DynamoDB Accelerator (DAX) 集群创建一个服务角色，然后才能创建该集群。*服务角色*是 AWS Identity and Access Management (IAM) 角色，用于向 AWS 服务授权代表您执行操作。服务角色允许 DAX 访问您的 DynamoDB 表，就像您自己访问这些表一样。

在此步骤中，您创建一个 IAM policy，然后将该策略附加到一个 IAM 角色。这使您能够将该角色分配到 DAX 集群，从而让它代表您执行 DynamoDB 操作。

**为 DAX 创建 IAM 服务角色**

1. 使用以下内容创建名为 `service-trust-relationship.json` 的文件。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
          {
               "Effect": "Allow",
               "Principal": {
                   "Service": "dax.amazonaws.com"
               },
               "Action": "sts:AssumeRole"
           }
       ]
   }
   ```

------

1. 创建服务角色。

   ```
   aws iam create-role \
       --role-name DAXServiceRoleForDynamoDBAccess \
       --assume-role-policy-document file://service-trust-relationship.json
   ```

1. 使用以下内容创建名为 `service-role-policy.json` 的文件。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Action": [
                   "dynamodb:DescribeTable",
                   "dynamodb:PutItem",
                   "dynamodb:GetItem",
                   "dynamodb:UpdateItem",
                   "dynamodb:DeleteItem",
                   "dynamodb:Query",
                   "dynamodb:Scan",
                   "dynamodb:BatchGetItem",
                   "dynamodb:BatchWriteItem",
                   "dynamodb:ConditionCheckItem"
               ],
               "Effect": "Allow",
               "Resource": [
                   "arn:aws:dynamodb:us-west-2:111122223333:*"
               ]
           }
       ]
   }
   ```

------

   将 *accountID* 替换为您的 AWS 账户 ID。要查找您的 AWS 账户 ID，请在控制台的右上角选择您的登录 ID。您的 AWS 账户 ID 出现在下拉菜单中。

   在示例的 Amazon Resource Name (ARN) 中，*accountID* 必须是 12 位的数字。请勿使用连字符或其他标点符号。

1. 为服务角色创建 IAM policy。

   ```
   aws iam create-policy \
       --policy-name DAXServicePolicyForDynamoDBAccess \
       --policy-document file://service-role-policy.json
   ```

   在输出中，记录您创建的策略的 ARN，如下例中所示。

   `arn:aws:iam::123456789012:policy/DAXServicePolicyForDynamoDBAccess`

1. 将策略附加到服务角色。将以下代码中的 *arn* 替换为上一步中的实际角色 ARN。

   ```
   aws iam attach-role-policy \
       --role-name DAXServiceRoleForDynamoDBAccess \
       --policy-arn arn
   ```

接下来，为默认 VPC 指定子网组。*子网组*是 VPC 中一个或多个子网的集合。请参见 [第 2 步：创建一个子网组](#DAX.create-cluster.cli.create-subnet-group)。

## 第 2 步：创建一个子网组
<a name="DAX.create-cluster.cli.create-subnet-group"></a>

按照此过程，使用 AWS Command Line Interface (AWS CLI) 为 Amazon DynamoDB Accelerator (DAX) 集群创建子网组。

**注意**  
如果已经为默认 VPC 创建子网组，则可以跳过本步骤。

DAX 设计在 Amazon Virtual Private Cloud 环境 (Amazon VPC) 中运行。如果您的 AWS 账户是在 2013 年 12 月 4 日之后创建的，则在每个 AWS 区域中已经有一个默认 VPC。有关更多信息，请参阅《Amazon VPC 用户指南》**中的[默认 VPC 和默认子网](https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html)。

**创建子网组**

1. 要确定默认 VPC 的标识符，请输入以下命令。

   ```
   aws ec2 describe-vpcs
   ```

   记下输出中默认 VPC 的标识符，如下例中所示。

   `vpc-12345678`

1. 确定与默认 VPC 关联的子网 ID。将 *vpcID* 替换为实际 VPC ID — 例如 `vpc-12345678`。

   ```
   aws ec2 describe-subnets \
       --filters "Name=vpc-id,Values=vpcID" \
       --query "Subnets[*].SubnetId"
   ```

   记录输出中的子网标识符 — 例如 `subnet-11111111`。

1. 创建子网组。请确保在 `--subnet-ids` 参数中至少指定一个子网 ID。

   ```
   aws dax create-subnet-group \
       --subnet-group-name my-subnet-group \
       --subnet-ids subnet-11111111 subnet-22222222 subnet-33333333 subnet-44444444
   ```

要创建集群，请参见 [第 3 步：使用 AWS CLI 创建一个 DAX 集群](#DAX.create-cluster.cli.create-cluster)。

## 第 3 步：使用 AWS CLI 创建一个 DAX 集群
<a name="DAX.create-cluster.cli.create-cluster"></a>

请按照以下过程使用 AWS Command Line Interface (AWS CLI)，在默认 Amazon VPC 中创建 Amazon DynamoDB Accelerator (DAX) 集群。

**创建 DAX 集群**

1. 获取服务角色的 Amazon Resource Name (ARN)。

   ```
   aws iam get-role \
       --role-name DAXServiceRoleForDynamoDBAccess \
       --query "Role.Arn" --output text
   ```

   在输出中，记录服务角色 ARN，如下例中所示。

   `arn:aws:iam::123456789012:role/DAXServiceRoleForDynamoDBAccess`

1. 创建 DAX 集群。将 `roleARN` 替换为上一步中的 ARN。

   ```
   aws dax create-cluster \
       --cluster-name mydaxcluster \
       --node-type dax.r4.large \
       --replication-factor 3 \
       --iam-role-arn roleARN \
       --subnet-group my-subnet-group \
       --sse-specification Enabled=true \
       --region us-west-2
   ```

   集群中的所有节点均为 `dax.r4.large` (`--node-type`) 类型。其中有三个节点 (`--replication-factor`)—一个主节点和两个副本节点。
**注意**  
由于 `sudo` 和 `grep` 是保留关键字，无法在集群名称中使用这些词创建 DAX 集群。例如，`sudo` 和 `sudocluster` 是无效集群名称。

要查看集群状态，请输入以下命令。

```
aws dax describe-clusters
```

状态显示在输出中，例如 `"Status": "creating"`。

**注意**  
创建集群将需要花几分钟的时间。当集群就绪后，其状态将更改为 `available`。同时，请继续 [第 4 步：使用 AWS CLI 配置安全组入站规则](#DAX.create-cluster.cli.configure-inbound-rules) 并按照其中的说明进行操作。

## 第 4 步：使用 AWS CLI 配置安全组入站规则
<a name="DAX.create-cluster.cli.configure-inbound-rules"></a>

您的 Amazon DynamoDB Accelerator (DAX) 集群中的节点为 Amazon VPC 使用默认安全组。对于默认安全组，必须为未加密集群的 TCP 端口 8111，或为加密集群端口 9111 授权入站流量。这样 Amazon VPC 中的 Amazon EC2 实例能够访问您的 DAX 集群。

**注意**  
如果使用 `default` 以外的其他安全组启动 DAX 集群，则必须改为对该组执行此过程。

**配置安全组入站规则**

1. 要确定默认安全组标识符，请输入以下命令。将 `vpcID` 替换为实际 VPC ID（来自 [第 2 步：创建一个子网组](#DAX.create-cluster.cli.create-subnet-group)）。

   ```
   aws ec2 describe-security-groups \
       --filters Name=vpc-id,Values=vpcID Name=group-name,Values=default \
       --query "SecurityGroups[*].{GroupName:GroupName,GroupId:GroupId}"
   ```

   记录输出中的安全组标识符 — 例如 `sg-01234567`。

1. 然后输入以下信息。将 `sgID` 替换为您的实际安全组标识符。对未加密集群使用端口 `8111`，对加密集群使用 `9111`。

   ```
   aws ec2 authorize-security-group-ingress \
       --group-id sgID --protocol tcp --port 8111
   ```