https://velog.io/@ky0_hw/amazon-linux2023에서-java17-설치하기

클라우드컴퓨팅 제2과제 공개문제.pdf

https://github.com/learn-wlstmd/ECS-Blue-Green

`Automation`

1. VPC Create
2. Security Group Create
3. CodeCommit Create
4. S3 Bucket Create (WEB, Build)
5. Cloudfront Create
6. Bastion Server Create
7. scp 배포자료
8. Target Group, ALB Create
9. ECR Create
10. ECS Cluster, Taskdef Create
11. ECS Service Create
12. ALB Test
13. Code Build Create
14. Code Pipeline Create

Bastion
1. package install (jq, git, aws cli v2)
2. docker install
3. .gitignore checking
4. ECR Image Upload
5. git push for code commit repo

신경써야 하는 부분

배포 구성 1시간 -> 5분

Backend Manifest

version: 0.2

env:
  variables:
    AWS_REGION: "REGION"
    AWS_ACCOUNT_ID: "ACCOUNT_ID"
    ECR_REPO_NAME: "ECR_REPO_NAME"

phases:
  pre_build:
    commands:
      - aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com

  build:
    commands:
      - docker build -t $ECR_REPO_NAME .
      - docker tag $ECR_REPO_NAME:latest $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$ECR_REPO_NAME:latest
      - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$ECR_REPO_NAME:latest
      - echo "{\\"ImageURI\\":\\"${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${ECR_REPO_NAME}:latest\\"}" > imageDetail.json

artifacts:
  files:
    - appspec.yml
    - taskdef.json
    - imageDetail.json

version: 0.0
Resources:
  - TargetService:
      Type: AWS::ECS::Service
      Properties:
        TaskDefinition: "<TASK_DEFINITION>"
        LoadBalancerInfo:
          ContainerName: "skills-app"
          ContainerPort: 8080

{
  "containerDefinitions": [
    {
      "name": "skills-app",
      "image": "<IMAGE1_NAME>",
      "cpu": 0,
      "portMappings": [
        {
          "containerPort": 8080,
          "hostPort": 8080,
          "protocol": "tcp"
        }
      ],
      "essential": true,
      "environment": [],
      "mountPoints": [],
      "volumesFrom": [],
      "healthCheck": {
        "command": [
          "/bin/sh",
          "-c",
          "curl -f <http://localhost:8080/api/health> || exit 1"
        ],
        "interval": 30,
        "timeout": 5,
        "retries": 3
      },
      "systemControls": []
    }
  ],
  "family": "skills-task-def",
  "executionRoleArn": "arn:aws:iam::<<AWS_ID>>:role/ecsTaskExecutionRole",
  "networkMode": "awsvpc",
  "volumes": [],
  "status": "ACTIVE",
  "requiresAttributes": [
    {
      "name": "com.amazonaws.ecs.capability.docker-remote-api.1.24"
    },
    {
      "name": "com.amazonaws.ecs.capability.ecr-auth"
    },
    {
      "name": "com.amazonaws.ecs.capability.docker-remote-api.1.21"
    },
    {
      "name": "ecs.capability.container-health-check"
    },
    {
      "name": "ecs.capability.execution-role-ecr-pull"
    },
    {
      "name": "com.amazonaws.ecs.capability.docker-remote-api.1.18"
    },
    {
      "name": "ecs.capability.task-eni"
    }
  ],
  "placementConstraints": [],
  "compatibilities": ["EC2", "FARGATE"],
  "requiresCompatibilities": ["FARGATE"],
  "cpu": "512",
  "memory": "1024",
  "registeredAt": "2024-08-30T13:56:40.838Z",
  "registeredBy": "arn:aws:sts::<<AWS_ID>>:assumed-role/AWSCodePipelineServiceRole-ap-northeast-2-skills-backend-pipeli/1725026200431"
}