> ## Documentation Index
> Fetch the complete documentation index at: https://docs.automq.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 在 AWS 上安装 AutoMQ

> 本文介绍如何在 AWS 上安装 AutoMQ 控制台，并完成初始配置，为创建和管理 AutoMQ 集群做准备。

## 概述

在 AWS 上使用 AutoMQ Cloud BYOC 环境，您首先需要安装 AutoMQ 控制台。控制台是一个部署在您账户下的 Web 应用，您将通过它来创建、管理和监控您的 AutoMQ 集群。

## 前置条件

AutoMQ 控制台支持直接部署到 Amazon EC2 或 Amazon EKS。请根据所选部署方式准备相应资源。

| 部署方式       | 所需资源                                               | 准备文档                                                                                                                                                                 |
| ---------- | -------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Amazon EC2 | AutoMQ 控制台和 AutoMQ 实例使用的 VPC。建议使用 Kafka 应用所在的 VPC。 | [准备 VPC](/zh/automq-cloud/getting-started/install-byoc-environment/aws/prepare-vpc)                                                                                  |
| Amazon EKS | VPC，以及已完成计算、网络、存储和身份配置的 EKS 集群。                    | [准备 VPC](/zh/automq-cloud/getting-started/install-byoc-environment/aws/prepare-vpc)和[部署到 Amazon EKS](/zh/automq-cloud/deploy-automq-on-kubernetes/deploy-to-aws-eks) |

## 注册 AutoMQ 环境

首先，您需要在 AutoMQ 官网注册您的部署环境，以获取环境安装的元信息。

1. 访问 [AutoMQ Cloud](https://account.automq.cloud)，登录您的账户。
2. 在控制台页面，点击 **创建环境**。
3. 根据向导，输入以下信息：
   * **环境名称**：为您的环境设置一个自定义名称。
   * **描述**：输入环境的相关描述。
   * **云厂商**：选择 **AWS**。
   * **地域**：选择您计划部署 AutoMQ 的 AWS 地域。
4. 完成创建后，您将获得用于部署的环境元信息。

## 在 EC2 上部署 AutoMQ 控制台

### 准备 EC2 实例并部署控制台

AutoMQ 控制台是管理 AutoMQ Cloud BYOC 环境的核心组件，它本身是部署在一台独立的 EC2 实例上。因此，在安装之前，您需要提前准备好这台 EC2 实例。

#### 基本要求

为确保控制台的稳定运行，您准备的 EC2 实例需要满足以下基本要求：

1. **实例规格**：
   * **配置**：至少需要 **2 核 CPU** 和 **8 GB 内存**。
   * **系统卷**：至少需要 **20 GiB** 的存储空间。
   * **数据卷**：必须额外挂载一块数据卷用于存储元数据，空间不得少于 **20 GiB**。

<Tip>
  **重要提示**：为了防止 EC2 实例迁移或故障导致控制台元数据丢失，请务必为 AutoMQ 控制台的 EC2 实例挂载额外的数据卷，并将元数据存储在该数据卷上。
</Tip>

2. **网络位置**：
   * 该 EC2 实例**必须**和后续部署的 AutoMQ 集群位于同一个 VPC 内。
   * 通常，这个 VPC 也应该与您的应用服务所在的 VPC 保持一致，以确保网络连通性。

3. **公网访问**：
   * 该 EC2 实例必须能够访问互联网，以便下载安装包和同步必要的元数据。您可以通过关联 EIP（弹性公网 IP）或配置公网 NAT 网关来实现。

#### 创建与部署步骤

1. 登录 AWS [EC2 控制台](https://console.aws.amazon.com/ec2/home)，点击 **启动实例**。

2. **操作系统 (AMI)**：选择一个您熟悉的 Linux 发行版，例如 Amazon Linux 2023 或 Ubuntu。

3. **实例类型**：选择满足上述规格要求的实例类型（例如 `t3.large` 或更高配置）。

4. **网络设置**：
   * 选择目标 VPC 和一个公网子网（如果使用 EIP）或私网子网（如果使用 NAT 网关）。
   * 确保安全组开放了必要的端口，例如 SSH (22) 端口以便您登录和管理，以及控制台服务的服务端口（默认为 8080）。将访问来源限制为可信 IP 范围。

5. **存储配置**：
   * 配置系统卷（根卷）大小至少为 20 GiB。
   * 点击 **添加新卷**，额外添加一个数据卷，并确保其大小不小于 20 GiB。

6. 完成其他配置后，启动实例。

7. **挂载数据卷**：
   * 实例启动后，登录到 EC2 实例。
   * 将您在**存储配置**中额外添加的数据卷挂载到操作系统的指定目录（例如 `/data`）。此路径将作为后续启动 Docker 容器时的数据挂载路径。
   * 请确保挂载点具有正确的权限。

8. **安装并启动 Docker 服务**：

   * 在 EC2 实例上安装 Docker。以下是针对 Amazon Linux 2023 的参考命令：

   ```bash theme={null}
   # 更新软件包
   sudo dnf update -y
   # 安装 Docker
   sudo dnf install docker -y
   # 启动 Docker 服务
   sudo systemctl start docker
   # 将当前用户添加到 docker 组，以便无需 sudo 即可运行 Docker 命令
   sudo usermod -aG docker ec2-user
   # 启用 Docker 服务开机自启
   sudo systemctl enable docker
   # 验证 Docker 是否安装成功
   docker version
   ```

   * **注意**：如果您使用的是其他 Linux 发行版（如 Amazon Linux 2），请参考 Docker 官方文档或使用对应的包管理器进行安装。

9. **部署 AutoMQ 控制台**
   * EC2 实例准备完成后，即可参考安装向导，复制安装命令，启动 AutoMQ 控制台。

### 配置控制台权限并完成初始化

AutoMQ 控制台启动成功后，您需要登录控制台，首次访问时需要为其授予必要的 AWS 云资源操作权限。

1. **登录控制台**
   * 使用浏览器访问 `http://<您的 EC2 公网 IP>:8080`。
   * 输入初始用户名和密码登录。

2. **为控制台授予 IAM 权限**
   登录后，界面会引导您为 AutoMQ 控制台完成 IAM 授权。这是为了让控制台有权限在您的 AWS 账户中创建和管理集群资源。操作流程如下：

   1. **创建 IAM Policy**：
      * 根据控制台界面提供的策略 JSON，前往 AWS IAM 控制台创建一个新的客户管理策略（Customer managed policy）。

   2. **创建 IAM Role**：
      * 创建一个新的 IAM Role。
      * 在选择信任实体时，选择 **AWS service** 和 **EC2**。
      * 将上一步创建的 IAM Policy 附加到这个 Role 上。

   3. **关联 IAM Role 到 EC2 实例**：
      * 前往 AWS EC2 控制台，找到您用于部署控制台的 EC2 实例。
      * 在 **操作** -> **安全** -> **修改 IAM 角色** 中，将上一步创建的 IAM Role 关联到该实例上。

3. **完成初始化**
   * 返回 AutoMQ 控制台页面，点击 **确认授权** 或 **下一步**。
   * 控制台会自动验证权限是否配置正确。验证通过后，您就可以正式进入 AutoMQ 控制台并开始创建您的第一个集群了。

## 在 EKS 上部署 AutoMQ 控制台

本节介绍如何将 AutoMQ 控制台作为 Helm release 部署到 Amazon EKS。开始前，请先完成[准备 EKS 集群和计算资源](/zh/automq-cloud/deploy-automq-on-kubernetes/deploy-to-aws-eks#准备-eks-集群和计算资源)，并保留环境安装向导生成的部署配置。

以下命令和清单使用 `<...>` 占位符，请将其替换为当前环境中对应的资源标识。

### 准备 ServiceAccount 和运行配置

安装 Chart 前，请确保目标命名空间和 ServiceAccount 已存在。您可以复用已有资源，也可以通过自己的资源管理流程进行准备。Chart 只引用 `<console-namespace>` 中的 `<console-service-account>`，不会创建或修改该 ServiceAccount。

环境安装向导提供与 EC2 Docker 部署相同的 base64 编码部署配置。

准备一个 Secret，将安装向导生成的完整 base64 字符串写入小写 `config` key。将 `<config-secret-name>` 替换为 Secret 名称，将 `<console-namespace>` 替换为控制台所在的命名空间，将 `<base64-encoded-runtime-config>` 替换为安装向导生成的配置：

```yaml theme={null}
apiVersion: v1
kind: Secret
metadata:
  name: <config-secret-name>
  namespace: <console-namespace>
stringData:
  config: "<base64-encoded-runtime-config>"
```

将上述清单保存到本地文件，并将 `<runtime-config-secret-file>` 替换为该文件的路径：

```bash theme={null}
kubectl apply -f <runtime-config-secret-file>
```

### 配置工作负载身份

通过 EKS Pod Identity 或 IRSA 将 IAM Role 绑定到 ServiceAccount。新建 EKS 部署推荐使用 EKS Pod Identity。

<Tabs>
  <Tab title="EKS Pod Identity">
    1. 确认集群已安装 EKS Pod Identity Agent。EKS Auto Mode 已包含该组件。
    2. 准备或选择配置了以下信任策略的 IAM Role：

    ```json theme={null}
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": "pods.eks.amazonaws.com"
          },
          "Action": [
            "sts:AssumeRole",
            "sts:TagSession"
          ]
        }
      ]
    }
    ```

    3. 确保 Role 已与 ServiceAccount 关联。如果尚未关联，请执行以下命令。其中 `<eks-cluster-name>` 是目标 EKS 集群名称，`<console-namespace>` 和 `<console-service-account>` 标识控制台使用的 ServiceAccount，`<aws-account-id>` 和 `<console-role-name>` 标识要关联的 IAM Role，`<aws-region>` 是 EKS 集群所在地域：

    ```bash theme={null}
    aws eks create-pod-identity-association \
      --cluster-name <eks-cluster-name> \
      --namespace <console-namespace> \
      --service-account <console-service-account> \
      --role-arn "arn:aws:iam::<aws-account-id>:role/<console-role-name>" \
      --region <aws-region>
    ```

    更多信息参考 AWS 文档：[了解 EKS Pod Identity 如何向 Pod 授予 AWS 服务访问权限](https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/pod-identities.html)。
  </Tab>

  <Tab title="IRSA">
    1. 确认 EKS 集群已配置 IAM OIDC Provider。
    2. 准备或选择通过信任策略允许该 ServiceAccount 调用 `sts:AssumeRoleWithWebIdentity` 的 IAM Role。
    3. 确保 ServiceAccount 已添加 Role ARN 注解。如果尚未配置，请执行以下命令。其中 `<console-service-account>` 和 `<console-namespace>` 标识控制台使用的 ServiceAccount，`<aws-account-id>` 和 `<console-role-name>` 标识要关联的 IAM Role：

    ```bash theme={null}
    kubectl annotate serviceaccount <console-service-account> \
      --namespace <console-namespace> \
      "eks.amazonaws.com/role-arn=arn:aws:iam::<aws-account-id>:role/<console-role-name>"
    ```

    信任策略的配置方法参考 AWS 文档：[适用于服务账户的 IAM 角色](https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/iam-roles-for-service-accounts.html)。
  </Tab>
</Tabs>

### 授予 EKS 集群访问权限

AutoMQ 控制台使用同一个 IAM Role 管理 Kubernetes 资源。请确保该 Role 已配置 Standard 类型的 EKS access entry，并授予集群级 `AmazonEKSClusterAdminPolicy`。如果尚未配置，请执行以下命令。其中 `<eks-cluster-name>` 是目标 EKS 集群名称，`<aws-account-id>` 和 `<console-role-name>` 标识 ServiceAccount 关联的 IAM Role，`<aws-region>` 是 EKS 集群所在地域：

```bash theme={null}
aws eks create-access-entry \
  --cluster-name <eks-cluster-name> \
  --principal-arn "arn:aws:iam::<aws-account-id>:role/<console-role-name>" \
  --type STANDARD \
  --region <aws-region>

aws eks associate-access-policy \
  --cluster-name <eks-cluster-name> \
  --principal-arn "arn:aws:iam::<aws-account-id>:role/<console-role-name>" \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
  --access-scope type=cluster \
  --region <aws-region>
```

### 配置 Helm values

在 Helm values 文件中设置以下参数：

* `<config-secret-name>`：前面准备的运行配置 Secret。
* `<aws-account-id>`：部署控制台的 AWS 账户 ID。
* `<vpc-id>`：EKS 集群所在的 VPC。
* `<alb-subnet-id-1>` 和 `<alb-subnet-id-2>`：用于创建 ALB 的不同可用区子网。
* `<console-service-account>`：已经与 IAM Role 关联的 ServiceAccount。
* `<storage-class-name>`：目标 EKS 集群中支持 `ReadWriteOnce` 动态供给的 StorageClass，通常由 Amazon EBS CSI 驱动提供。可通过 `kubectl get storageclass` 查询。
* `<console-domain-name>`：用于访问控制台的域名。
* `<acm-certificate-arn>`：与控制台域名匹配的 ACM 证书 ARN。

```yaml theme={null}
automqByocConsole:
  config:
    existingSecret: <config-secret-name>

aws:
  account: "<aws-account-id>"
  network:
    vpcId: <vpc-id>
    subnetIds:
      - <alb-subnet-id-1>
      - <alb-subnet-id-2>

serviceAccount:
  name: <console-service-account>

persistence:
  storageClass: <storage-class-name>

ingress:
  enabled: true
  host: <console-domain-name>
  alb:
    scheme: internet-facing
    protocol: HTTPS
    certificateArn: <acm-certificate-arn>
```

ALB 子网用于暴露 AutoMQ 控制台，与创建 AutoMQ 实例时选择的 NLB 子网相互独立。如需使用私网入口，将 `ingress.alb.scheme` 设置为 `internal` 并选择私网子网。

Chart 默认不限制 Pod 调度位置。如果 EKS 集群为 AutoMQ 控制台准备了专属节点，可以通过节点标签增加 required affinity。将 `<node-label-key>` 和 `<node-label-value>` 替换为目标节点上已有的标签键和值：

```yaml theme={null}
nodeAffinities:
  - key: <node-label-key>
    values:
      - <node-label-value>
```

### 安装 AutoMQ 控制台

从 AutoMQ OCI 仓库安装 Chart。当前推荐使用最新正式 Chart 版本 `8.3.7`。将 `<release-name>` 替换为 Helm release 名称，`<console-namespace>` 替换为控制台所在的命名空间，`<values-file>` 替换为上一节准备的 values 文件路径：

```bash theme={null}
helm upgrade --install <release-name> \
  oci://automq.azurecr.io/helm/automq-byoc-console-chart \
  --version 8.3.7 \
  --namespace <console-namespace> \
  --values <values-file> \
  --wait
```

等待 Pod 和 Ingress 就绪，将 `<console-namespace>` 替换为控制台所在的命名空间：

```bash theme={null}
kubectl get pods,ingress \
  --namespace <console-namespace>
```

为 `ingress.host` 中的域名创建 DNS 记录，并将记录指向 Ingress 状态中显示的 ALB 地址。

### 完成初始化

访问 `https://<console-domain-name>`，使用临时引导凭据登录：

```text theme={null}
用户名：admin
密码：admin
```

<Warning>
  以上是公开的临时引导凭据。限制 ALB 的访问范围，并在首次登录后立即修改密码。
</Warning>

初始化页面会展示 AutoMQ 控制台所需的 IAM Policy。使用该 JSON 创建客户管理策略，并将策略附加到 ServiceAccount 关联的同一个 IAM Role。返回 AutoMQ 控制台并确认授权。

权限检查通过后，您可以创建和管理 AutoMQ 实例。

## 后续步骤

* **通过 WebUI 使用 AutoMQ：** 继续通过环境控制台创建实例，并体验产品功能。[体验 AutoMQ▸](/zh/automq-cloud/getting-started/experience-automq)
* **通过 Terraform 使用 AutoMQ：** 安装控制台后，用户可以通过 AutoMQ Terraform Provider 管理和使用 AutoMQ。通过 Terraform 方式使用 AutoMQ ，请[参考文档](https://registry.terraform.io/providers/AutoMQ/automq/latest/docs)。
