buildspec.yml
version: 0.2 env: variables: AWS_REGION_NAME: ap-northeast-1 ECR_REPOSITORY_NAME: hpscript DOCKER_BUILDKIT: "1" phases: install: runtime-versions: docker: 19 pre_build: commands: - AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text) - aws ecr --region ap-northeast-1 get-login-password | docker login --username AWS --password-stdin https://${AWS_ACCOUNT_ID}.dkr.ecr.ap-northeast-1.amazonaws.com/hpscript - REPOSITORY_URI=${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION_NAME}.amazonaws.com/${ECR_REPOSITORY_NAME} - IMAGE_TAG=$(echo ${CODEBUILD_RESOLVED_SOURCE_VERSION} | cut -c 1-7) build: commands: - docker image build -t ${REPOSITORY_URI}:${IMAGE_TAG} . post_build: commands: - docker image push ${REPOSITORY_URI}:${IMAGE_TAG} - printf '{"name":"%s","ImageURI":"%s"}' $ECR_REPOSITORY_NAME $REPOSITORY_URI:$IMAGE_TAG > imageDetail.json artifacts: files: - imageDetail.json
appspec.yaml
version: 1 Resources: - TargetService: Type: AWS::ECS::Service Properties: TaskDefinition: <TASK_DEFINITION> LoadBalancerInfo: ContainerName: test-container ContainerPort: 80
taskdef.json
{ "executionRoleArn": "arn:aws:iam::hoge:role/escTaskExectionRole", "containerDefinitions": [ { "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "/ecs/fuga-def", "awslogs-region": "ap-northeast-1", "awslogs-stream-prefix": "esc" } }, "portMappings": [ { "hostPort": 80, "protocol": "tcp", "containerPort": 80 } ], "cpu": 256, "readonlyRootFilesystem": true, "memoryReservation": 512, "image": "<IMAGE1_NAME>", "essential": true, "name": "app" } ], "memory": "1024", "taskRoleArn": null, "compatibilities": [ "EC2", "FARGATE" ], "family": "test-def", "requiresCompatibilities": [ "FARGATE" ], "networkMode": "awsvpc", "cpu": "512" }
$ tree
.
├── Dockerfile
├── appspec.yaml
├── buildspec.yml
├── index.html
└── taskdef.json
$ git push ${CODECOMMIT_REPO_URL}
### CodePipeline
Action: Deploy
Action provider: Amazon ECS(Blue/Green)
Region: Asia Pacific(Tokyo)
Input artifact: BuildArtifact, SourceArtifact
AWS CodeDeploy application name: AppECS-test-container-service
AWS CodeDeploy deployment group: DgpECS-test-container-service
Amazon ECS task definition: SourceArtifact
AWS CodeDeploy AppSpec file: SourceArtifact
Input artifact with image details: BuildArtifact
Placeholder text in the task definition: IMAGE1_NAME
Variable namespace: DeployVariables
### エラーメッセージ
An AppSpec file is required, but could not be found in the revision
What’s wrong with you?