CodeBuild를 사용하여 ECR로 push하여 프로덕션 작업을 줄이고 싶습니다.
배경
코드 해설
resource "aws_ecr_repository" "nginx" {
name = "my-nginx"
image_tag_mutability = "MUTABLE"
image_scanning_configuration {
scan_on_push = true
}
}
output "ecr_url" {
value = aws_ecr_repository.nginx.repository_url
}
data "aws_iam_policy_document" "assume_role_codebuild" {
statement {
actions = ["sts:AssumeRole"]
principals {
type = "Service"
identifiers = ["codebuild.amazonaws.com"]
}
}
}
resource "aws_iam_role" "codebuild_execution_role" {
name = "MyCodeBuildRole"
assume_role_policy = data.aws_iam_policy_document.assume_role_codebuild.json
}
resource "aws_iam_role_policy_attachment" "amazon_ec2_container_registry_full_access" {
role = aws_iam_role.codebuild_execution_role.name
policy_arn = "arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryFullAccess"
}
resource "aws_iam_role_policy_attachment" "amazon_ec2_container_registry_power_user" {
role = aws_iam_role.codebuild_execution_role.name
policy_arn = "arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPowerUser"
}
resource "aws_iam_policy" "codebuild_base_policy" {
name = "CodeBuildBasePolicy-my_nginx"
policy = jsonencode({
Version: "2012-10-17",
Statement: [
{
Effect: "Allow",
Resource: [
"arn:aws:logs:ap-northeast-1:${var.aws_account_id}:log-group:/aws/codebuild/my_nginx",
"arn:aws:logs:ap-northeast-1:${var.aws_account_id}:log-group:/aws/codebuild/my_nginx:*"
],
Action: [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
]
},
{
Effect: "Allow",
Resource: [
"arn:aws:s3:::codepipeline-ap-northeast-1-*"
],
Action: [
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetBucketAcl",
"s3:GetBucketLocation"
]
},
{
Effect: "Allow",
Action: [
"codebuild:CreateReportGroup",
"codebuild:CreateReport",
"codebuild:UpdateReport",
"codebuild:BatchPutTestCases",
"codebuild:BatchPutCodeCoverages"
],
Resource: [
"arn:aws:codebuild:ap-northeast-1:${var.aws_account_id}:report-group/my_nginx-*"
]
}
]
})
}
resource "aws_iam_role_policy_attachment" "codebuild_policy" {
role = aws_iam_role.codebuild_execution_role.name
policy_arn = aws_iam_policy.codebuild_base_policy.arn
}
빌드하는 환경의 설정: 이번은 Fargate의 ECS를 상정하고 있으므로 x86 아키텍쳐를 지정.
빌드 하는 소스의 지정: 아래에서는 GitHub를 지정하고 있지만 S3등도 지정 가능.
빌드 명령 설정 : htps : // 기주 b. 코 m/아카포 001/테라후 rm-에cr-cs/bぉb/마인/부이 ldsぺc. yml
※특히 지정이 없는 경우, source 섹션에서 지정한 파일의 장소로부터
buildspec.yml
를 자동으로 찾아 준다. (모든 파일을 지정할 수 있음) resource "aws_codebuild_project" "my_nginx" {
name = "my_nginx"
service_role = aws_iam_role.codebuild_execution_role.arn
artifacts {
type = "NO_ARTIFACTS"
}
environment {
compute_type = "BUILD_GENERAL1_SMALL"
image = "aws/codebuild/amazonlinux2-x86_64-standard:2.0"
type = "LINUX_CONTAINER"
privileged_mode = true
environment_variable {
name = "AWS_ACCOUNT_ID"
value = var.aws_account_id
type = "PLAINTEXT"
}
environment_variable {
name = "AWS_DEFAULT_REGION"
value = "ap-northeast-1"
type = "PLAINTEXT"
}
environment_variable {
name = "IMAGE_REPO_NAME"
value = "my-nginx"
type = "PLAINTEXT"
}
environment_variable {
name = "IMAGE_TAG"
value = "latest"
type = "PLAINTEXT"
}
}
source {
type = "GITHUB"
location = "https://github.com/akapo001/terraform-ecr-ecs.git"
git_clone_depth = 1
git_submodules_config {
fetch_submodules = true
}
}
source_version = "main"
}
빌드
terraform.tfvars
파일에 비밀 정보를 기록한 후 terraform apply
를 실행하십시오. buildspec.yml
에 쓰여진 명령을 실행하고 결국 ECR에 이미지가 푸시된다.완료 화면
Reference
이 문제에 관하여(CodeBuild를 사용하여 ECR로 push하여 프로덕션 작업을 줄이고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/akahori_s/items/42411cb20751dab9d435텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)