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

# AWS VPC 设置

> 在您的 AWS VPC 中设置 Devin 的指南

<div id="devin-aws-vpc-deployment-guide">
  # **Devin AWS VPC 部署指南**
</div>

本指南介绍如何在贵公司的 AWS 虚拟私有云（VPC）环境中部署 Devin，以便访问企业内网防火墙内的各类资源。

<Tabs>
  <Tab title="快速设置（Terraform）">
    ## 使用 Terraform 部署（推荐）

    在你的 AWS VPC 中部署 Devin 时，我们推荐使用 Terraform。这种自动化方式可以在最少手动配置的情况下，实现一致且可重复的基础设施部署。

    <Frame>
      <img src="https://mintcdn.com/cognitionai/jlReMiXrsokGIcK7/images/terraform-workflow.png?fit=max&auto=format&n=jlReMiXrsokGIcK7&q=85&s=9a4846f3083d5cca7903a3982cb44552" alt="Terraform 部署工作流" width="2284" height="1282" data-path="images/terraform-workflow.png" />
    </Frame>

    ### 前置条件

    在开始 Terraform 部署流程之前，请确保你已完成以下准备：

    * 已为 Devin 配置好 VPC（可以使用现有 VPC，或新建一个 VPC）
    * 确保你有具备以下权限的 IAM 角色或服务账号（service account）：
      * 在 EC2 Auto Scaling 中创建实例
      * 在你的区域创建 S3 存储桶（bucket）
    * 确保你的 AWS 账户可以支持至少 70 个虚拟 CPU 的实例
    * 已安装 Terraform（1.0 或更高版本）

    ### 分步部署流程

    <Steps>
      <Step title="收集 AWS 环境信息">
        收集以下将在 Terraform 配置中需要使用的信息：

        * AWS 账户 ID（12 位数字）
        * VPC ID（vpc-xxxxxxxxxxxxxxxxx）
        * 两个 Subnet ID：
          * subnet-xxxxxxxxxxxxxxxxx
          * subnet-xxxxxxxxxxxxxxxxx

        **有用的 AWS CLI 命令：**

        ```bash theme={null}
        # 列出你的 VPC
        aws ec2 describe-vpcs

        # 列出指定 VPC 中的子网
        aws ec2 describe-subnets --filters "Name=vpc-id,Values=<your-vpc-id>"
        ```
      </Step>

      <Step title="配置防火墙访问">
        <Tabs>
          <Tab title="用户设备防火墙">
            确保你的终端安全系统（将访问 Devin 的用户设备）允许访问：

            * \*.devin.ai
            * \*.devinenterprise.com
            * \*.devinapps.com
          </Tab>

          <Tab title="VPC 防火墙">
            确保你的 VPC 安全组（security groups）允许访问：

            * frp-server-0.devin.ai
            * static.devin.ai
            * api.devin.ai
          </Tab>
        </Tabs>

        <Frame>
          <img src="https://mintcdn.com/cognitionai/SST7qBOGO28X2sVc/images/aws-firewall.png?fit=max&auto=format&n=SST7qBOGO28X2sVc&q=85&s=a687822a8153c6ca63ac981167388ac0" alt="AWS 防火墙配置" width="1609" height="739" data-path="images/aws-firewall.png" />
        </Frame>
      </Step>

      <Step title="获取 Terraform 配置和认证 Token">
        联系 Cognition 以获取：

        1. 用于拉取 hypervisor 镜像的认证 token
        2. 针对你的环境定制的 Terraform 配置文件

        当你共享了环境信息（来自步骤 1）后，我们会将这些资源提供给你。
      </Step>

      <Step title="执行 Terraform 脚本">
        我们可以安排一次通话，与您一同完成此步骤。该流程包括：

        1. 将 Terraform 配置文件解压到本地机器的某个目录：
           ```bash theme={null}
           mkdir -p ~/devin-terraform && cd ~/devin-terraform
           # 解压从 Cognition 收到的文件
           ```

        2. 初始化 Terraform 环境：
           ```bash theme={null}
           terraform init
           ```

        3. 查看计划中的基础设施变更：
           ```bash theme={null}
           terraform plan
           ```

        4. 应用配置以创建基础设施：
           ```bash theme={null}
           terraform apply
           ```

        5. 在提示时确认这些变更。

        <Note>
          Terraform 脚本会创建所有必要组件，包括 EC2 实例、S3 buckets、安全组（security groups）、IAM 角色，以及 hypervisor 注册。
        </Note>
      </Step>

      <Step title="运行首次 Devin 会话">
        在 Terraform 脚本成功执行完成后，我们会与你一起：

        1. 在 AWS 控制台中验证相关资源已成功创建
        2. 运行首次 Devin 会话，以确保能够连接到所需服务
        3. 在 Cognition 团队的支持下排查并解决出现的任何问题
      </Step>
    </Steps>
  </Tab>

  <Tab title="高级配置（手动）">
    ## 手动部署

    如果您的环境中无法部署 Terraform,本节将说明手动配置基础设施所需的步骤。

    ### 网络要求

    请注意,网络组件需要手动配置。您可以参考我们提供的资源以获取指导。

    ### 部署步骤

    <Steps>
      <Step title="为运行虚拟机设置实例">
        Devin 需要一台宿主实例来为每个会话运行**隔离的虚拟机**。

        #### **实例要求**

        | Requirement          | Details                                                      |
        | :------------------- | :----------------------------------------------------------- |
        | **Instance Type**    | 裸金属实例（`i3.metal`）                                            |
        | **Operating System** | Ubuntu 24.04                                                 |
        | **Instance Sizing**  | - 2 vCPUs，8GB RAM，128GB 存储<br /> - 8 vCPUs，32GB RAM，128GB 存储 |
        | **Note**             | 实例规格决定 Devin 可同时运行的最大并发会话数。                                  |
        | **Recommendation**   | 建议将 `i3.metal` 用作基础配置。                                       |

        <Tip>
          可以通过增加更多宿主实例进行**水平扩展**，以提升 Devin 的整体容量。
        </Tip>

        #### **安全组规则**

        | **Configuration**           | **Details**                   |
        | :-------------------------- | :---------------------------- |
        | **VPC Setup**               | 配置 VPC 和安全组（Security Group）规则 |
        | **Required Firewall Rules** | **必须的防火墙规则：允许出站 443 访问以下地址：** |
        |                             | `frp-server-0.devin.ai`       |
        |                             | `static.devin.ai`             |
        |                             | `api.devin.ai`                |

        <Warning>
          强烈建议启用访问公网的通用互联网出口，但这并非强制要求。
        </Warning>
      </Step>

      <Step title="为虚拟机设置存储">
        当 **Devin 会话** 被暂停时，其状态会被**压缩并存储**。

        #### **2.1 创建 S3 Bucket**

        1. 在 **AWS Management Console** 中导航到 **S3**
        2. 选择合适的区域
        3. 点击 **Create bucket**
        4. 将 **Bucket name** 设置为：

           ```
           devin-${YOUR_ORGANIZATION}-${BUCKET_REGION}
           ```

           *(将 `${YOUR_ORGANIZATION}` 和 `${BUCKET_REGION}` 替换为实际值)*
        5. 点击 **Create bucket**

        #### **2.2 应用 S3 Bucket Policy 和 CORS**

        1. 打开你创建的 **S3 Bucket**
        2. 转到 **Permissions** 选项卡
        3. 滚动到 **Bucket Policy** 并点击 **Edit**
        4. 添加以下策略，并替换占位符：

        ```json theme={null}
        {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Principal": {"AWS": "arn:aws:iam::272506498303:role/customer-bucket-access-role"},
                    "Effect": "Allow",
                    "Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"],
                    "Resource": "arn:aws:s3:::devin-${YOUR_ORGANIZATION}-${BUCKET_REGION}/*"
                },
                {
                    "Principal": {"AWS": "arn:aws:iam::272506498303:role/customer-bucket-access-role"},
                    "Effect": "Allow",
                    "Action": ["s3:ListBucket"],
                    "Resource": "arn:aws:s3:::devin-${YOUR_ORGANIZATION}-${BUCKET_REGION}"
                }
            ]
        }
        ```

        5. 点击 **Save（保存）**
        6. 向下滚动至 **Cross-Origin Resource Sharing（CORS）**，然后点击 **Edit（编辑）**
        7. 输入以下 CORS 策略：

        ```json theme={null}
        [
            {
                "AllowedHeaders": ["*"],
                "AllowedMethods": ["GET"],
                "AllowedOrigins": ["*"],
                "ExposeHeaders": []
            }
        ]
        ```

        8. 点击 **Save**

        <Note>
          在这些资源创建完成后，请将以下信息提供给 Cognition：

          * 您的 **AWS Account ID**
          * **S3 Bucket Name**
          * 用于部署的 **VPC 和 Subnets**
          * **Security Group ID**
          * 任何用于 Devin 相关资源的 **tags**
        </Note>
      </Step>

      <Step title="注册主机运行器">
        运行以下命令：

        ```bash theme={null}
        curl -sSL https://api.devin.ai/hypervisor/setup?token=AUTH_TOKEN -o setup.sh && bash setup.sh
        ```

        <Note>
          我们会单独将 **AUTH\_TOKEN** 提供给你。完成配置后，**Devin** 就可以在你的 **VPC** 环境中发起会话了。
        </Note>
      </Step>

      <Step title="防火墙：前置条件">
        如果用户设备上配置了防火墙，请在防火墙中将以下 URL 加入允许列表：

        * `*.devin.ai`
        * `*.devinenterprise.com`
        * `*.devinapps.com`
                  <br />

        **AWS WAF 规则示例**

        <img src="https://mintcdn.com/cognitionai/SST7qBOGO28X2sVc/images/aws-firewall.png?fit=max&auto=format&n=SST7qBOGO28X2sVc&q=85&s=a687822a8153c6ca63ac981167388ac0" alt="AWS-Firewall" width="1609" height="739" data-path="images/aws-firewall.png" />
      </Step>
    </Steps>
  </Tab>
</Tabs>
