# 配置 Blob 存储

需要暂时存储 GitLab 中的存档，以便 GitHub 可以读取它们。

对于大多数客户，我们建议使用 GitHub-owned blob storage.. 这是最简单的路径，不需要任何额外的配置。

但是，如果具有防火墙要求，或者需要在迁移完成后保留存档，则可能需要使用外部提供程序配置存储。

## 选择要暂存存档的位置

将 GL2GH extension 每个 GitLab 项目导出到存档，然后将存档上传到可从中读取的 GitHub Blob 存储。 运行迁移时，可以选择存储后端。

| 存储选项 | 如何选择它 | 备注 |
| ---- | ----- | -- |

GitHub-owned blob storage（推荐） | `--use-github-storage` | 无需设置。
GitHub 在成功迁移后或在迁移失败后的七天后自动删除存档。
AWS S3 |
`--aws-bucket-name` （使用 `AWS_REGION`、 `AWS_ACCESS_KEY_ID`环境变量 `AWS_SECRET_ACCESS_KEY` 和环境变量（可选 `AWS_SESSION_TOKEN`） | 你拥有存储桶及其生命周期。
GitHub 不会从存储中删除存档。
Azure Blob 存储 |
`AZURE_STORAGE_CONNECTION_STRING` 环境变量（对于单个 `migrate-repo` 命令，可以改用 `--azure-storage-connection-string`） | 仅支持存储帐户访问密钥连接字符串（而不是 SAS）。
GitHub 不会从存储中删除存档。

## 配置 Blob 存储

如果使用 GitHub-owned blob storage，则无需配置任何内容。 将使用 `--use-github-storage` 标志通过 CLI 选择此方法。 但是，如果连接缓慢或代理连接，可能需要将 `GITHUB_OWNED_STORAGE_MULTIPART_MEBIBYTES` 变量（默认为 100 MiB，最小 5 MiB）设置为较低的数字。

如果使用外部 Blob 存储，则需要设置此存储。

### 设置 AWS S3 存储桶

在 AWS 中，设置 S3 Bucket。 有关详细信息，请参阅 AWS 文档中的[创建 Bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。

还需要具有以下权限的 AWS 访问密钥和密钥：

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucketMultipartUploads",
                "s3:AbortMultipartUpload",
                "s3:ListBucket",
                "s3:DeleteObject",
                "s3:ListMultipartUploadParts"
            ],
            "Resource": [
                "arn:aws:s3:::github-migration-bucket",
                "arn:aws:s3:::github-migration-bucket/*"
            ]
        }
    ]
}
```

> \[!NOTE]
> 迁移完成后，GitHub Enterprise Importer 不会从 AWS 中删除存档。 为了降低存储成本，建议配置在一段时间后自动删除存档。 有关详细信息，请参阅 AWS 文档中的[ Bucket 生命周期配置](https://docs.aws.amazon.com/AmazonS3/latest/userguide/how-to-set-lifecycle-configuration-intro.html)。

准备好运行迁移后，你将需要向 GitHub CLI 提供 AWS 凭据：区域、访问密钥、密钥和会话令牌（如果需要）。 可以将它们作为参数传递，或设置名为 `AWS_REGION`、`AWS_ACCESS_KEY_ID`、`AWS_SECRET_ACCESS_KEY` 和 `AWS_SESSION_TOKEN` 的环境变量。

你还需要使用 `--aws-bucket-name` 参数传入 S3 Bucket 的名称。

### 设置 Azure Blob 存储存储帐户

在 Azure 中，创建存储帐户并记下连接字符串。 有关详细信息，请参阅 Microsoft Docs 中的[管理存储帐户访问密钥](https://learn.microsoft.com/en-gb/azure/storage/common/storage-account-keys-manage?tabs=azure-portal#regenerate-access-keys)。

> \[!NOTE]
> 迁移完成后，GitHub Enterprise Importer 不会从 Azure Blob 存储中删除存档。 为了降低存储成本，建议配置为在一段时间后自动删除存档。 有关详细信息，请参阅 Microsoft Docs 中的[通过自动管理数据生命周期来优化成本](https://learn.microsoft.com/en-us/azure/storage/blobs/lifecycle-management-overview)。

准备好运行迁移时，可以将连接字符串作为参数传递到 GitHub CLI，或使用名为 `AZURE_STORAGE_CONNECTION_STRING` 的环境变量将其传入。

### 允许网络访问

如果您已在存储帐户上配置了防火墙规则，请确保您已允许访问迁移目标的 IP 范围。 请参阅“[管理从 GitLab 迁移到 GitHub的访问](/zh/migrations/using-github-enterprise-importer/migrate-from-gitlab/manage-access#configure-ip-allow-lists-on-github)”。