本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 GitHub Actions 和 Terraform 构建 Docker 镜像并将其推送到 Amazon ECR
Ruchika Modi,Amazon Web Services
Summary
此模式说明了如何创建可重复使用 GitHub 的工作流程来构建 Dockerfile 并将生成的映像推送到亚马逊弹性容器注册表 (Amazon ECR) Container Registry (Amazon ECR)。该模式使用 Terraform 和 Actions 自动执行 Dockerfiles 的构建过程。 GitHub 这最大限度地减少了人为错误的可能性,并大大缩短了部署时间。
向 GitHub 存储库的主分支 GitHub 推送操作会启动资源的部署。该工作流程根据 GitHub 组织和存储库名称的组合创建唯一的 Amazon ECR 存储库。然后,它将 Dockerfile 映像推送到 Amazon ECR 存储库。
先决条件和限制
先决条件
一个活跃的 AWS 账户。
一个活跃的 GitHub 账户。
存储GitHub 库
。 已安装并配置
1 或更高版本的 Terraform。 Terraform 后端
的 Amazon Simple Storage Service(Amazon S3)存储桶。 用于 Terraform 状态锁定和一致性的 Amazon DynamoDB
表。该表必须有一个名为 LockID、类型为String的分区键。如果未进行此配置,则状态锁定将被禁用。有权为 Terraform 设置 Amazon S3 后端的 AWS Identity and Access Management(IAM)角色。有关配置说明,请参阅 Terraform 文档
。
限制
此可重复使用的代码仅通过 GitHub 操作进行了测试。
架构
目标技术堆栈
Amazon ECR 存储库
GitHub 行动
Terraform
目标架构

下图说明了以下内容:
1. 用户将 Dockerfile 和 Terraform 模板添加到存储库中。 GitHub
2. 这些新增内容启动了 GitHub 操作工作流程。
3. 该工作流检查 Amazon ECR 存储库是否存在。否则,它将根据 GitHub 组织和存储库名称创建存储库。
4. 该工作流构建 Dockerfile 并将映像推送到 Amazon ECR 存储库。
工具
Amazon 服务
Amazon Elastic Container Registry(Amazon ECR)是一项安全、可扩展且可靠的托管容器注册表服务。
其他工具
代码存储库
此模式的代码可在 GitHub Docker ECR 操作工作流
创建 GitHub 操作时,Docker 工作流程文件将保存在此存储库的
/.github/workflows/文件夹中。此解决方案的工作流位于 workflow.yaml文件中。 e2e-test文件夹提供了示例 Dockerfile 以供参考和测试。
最佳实践
有关编写 Dockerfile 的最佳实践,请参阅 Docker 文档
。 对 Amazon ECR 使用 VPC 端点。VPC 终端节点由 AWS 提供支持 PrivateLink,该技术使您能够 APIs 通过私有 IP 地址私密访问 Amazon ECR。对于使用 Fargate 启动类型的 Amazon ECS 任务,VPC 端点让任务能够从 Amazon ECR 中提取私有映像,而无需为任务分配公共 IP 地址。
操作说明
| Task | 说明 | 所需技能 |
|---|---|---|
配置 OpenID Connect。 | 创建 OpenID Connect(OIDC)提供者。您将在此操作中所用的 IAM 角色的信任策略中使用此提供商。有关说明,请参阅文档中的在亚马逊 Web Services 中配置 OpenID Connect | AWS 管理员、AWS DevOps、常规 AWS |
克隆 GitHub 存储库。 | 将 GitHub Docker ECR 操作工作流
| DevOps 工程师 |
| Task | 说明 | 所需技能 |
|---|---|---|
自定义启动 Docker 工作流的事件。 | 此解决方案的工作流位于 workflow.yaml | DevOps 工程师 |
自定义工作流。 | w orkflow.yaml
| DevOps 工程师 |
部署 Terraform 模板。 | 该工作流程会根据您配置的事件自动部署用于创建 Amazon ECR 存储库的 Terraform 模板。 GitHub 这些模板在 Github 存储库的根目录 | AWS DevOps, DevOps 工程师 |
问题排查
| 问题 | 解决方案 |
|---|---|
将 Amazon S3 和 DynamoDB 配置为 Terraform 远程后端时出现问题或错误。 | 按照 Terraform 文档 |
无法通过 | 只有工作流也在主分支上进行了配置时,配置为从 |