min*_*nie 15 docker dockerhub terraform terraform-provider-aws
使用 terraform 将公共映像从 Dockerhub(或只是自定义映像)拉取并重新加载到 ECR。我在想类似的事情
# Create ECR repository
resource "aws_ecr_repository" "ecr_repo" {
name = var.ecr_name
}
# Docker image
resource "null_resource" "docker_hub" {
......
......
depends_on = [aws_ecr_repository.ecr_repo]
}
Run Code Online (Sandbox Code Playgroud)
基本上创建一个 ECR 存储库,然后上传图像...我是 terrform 的新手,并且在这方面花费了大量时间。所以任何事情都会有所帮助。谢谢
小智 16
Terraform 实际上只是为了创建 AWS ECR 存储库和策略文档资源等基础设施而设计。可以使用local-exec 配置程序强制 Terraform 执行您想要的操作,这可以让您添加任意命令,但这并不是真正的最佳实践。正如他们在文档中提到的那样,Terraform 配置程序应被视为最后的手段。
最简单的方法是将 Terraform 与 Docker 和 AWS CLI 命令结合起来来构建和推送映像:
# ...terraform commands
docker build -t ${ACCOUNT}.dkr.ecr.${REGION}.amazonaws.com/${REPO} .
aws ecr get-login-password \
--region ${REGION} \
| docker login \
--username AWS \
--password-stdin ${ACCOUNT}.dkr.ecr.${REGION}.amazonaws.com
docker push ${ACCOUNT}.dkr.ecr.${REGION}.amazonaws.com/${REPO}
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用HashiCorp Packer,它是为此目的(构建虚拟机/容器映像)而设计的,并且与 Terraform 具有良好的集成。但这意味着更多的学习曲线,因为 Packer 不使用 Dockerfile。无论如何,如果您沿着这条路走下去,您需要将Docker 构建器与Docker 推送后处理器结合使用。
您将像以前一样使用该aws_ecr_repository资源,以及您想要在 ECR AWS 提供商中使用的任何其他资源。下面是 aws_ecr_repository_policy ,能够设置存储库的权限。
resource "aws_ecr_repository_policy" "demo-repo-policy" {
repository = aws_ecr_repository.demo-repository.name
policy = <<EOF
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "adds full ecr access to the demo repository",
"Effect": "Allow",
"Principal": "*",
"Action": [
"ecr:BatchCheckLayerAvailability",
"ecr:BatchGetImage",
"ecr:CompleteLayerUpload",
"ecr:GetDownloadUrlForLayer",
"ecr:GetLifecyclePolicy",
"ecr:InitiateLayerUpload",
"ecr:PutImage",
"ecr:UploadLayerPart"
]
}
]
}
EOF
}
Run Code Online (Sandbox Code Playgroud)
之后,您可以使用已使用的资源中的属性来执行docker push命令
docker push ${aws_account_id}.dkr.ecr.${region}.amazonaws.com/${repository-name}
| 归档时间: |
|
| 查看次数: |
25267 次 |
| 最近记录: |