iT邦幫忙

2023 iThome 鐵人賽

DAY 29
0

昨天串了一半的CodePipeline,
今天要串完。
首先我們要先準備兩個組態檔案,
分別是部署所需的TaskDefinition與Appspec。
這兩個是在做ECS藍綠部署時,會取代現行的TaskDefinition與容器內的設定。

首先是TaskDefinition,非常簡單,我打們打ECS頁面,找到之前建立的TaskDefinition,
並點選最新版的JSON
https://ithelp.ithome.com.tw/upload/images/20231014/20152618GEf7dEl2CG.jpg

將整個JSON複製起來到本地,做一個JSON檔案,檔名叫taskdef.json
把剛才複製到JSON貼上,但要把最後方的這三項刪除

  • registeredAt
  • registeredBy
  • tags
    再來把image的value改為"<IMAGE1_NAME>",這個待會要配合CodeDeploy的設定使用。
    結果會像下方所示。
    也可以拿下面的用,但要記得改taskDefinitionArn、executionRoleArn
{
    "taskDefinitionArn": "arn:aws:ecs:ap-northeast-1:123456789:task-definition/ECSDemo_TD:1",
    "containerDefinitions": [
        {
            "name": "ECSDemo",
            "image": "<IMAGE1_NAME>",
            "cpu": 0,
            "portMappings": [
                {
                    "name": "ecsdemo-80-tcp",
                    "containerPort": 80,
                    "hostPort": 80,
                    "protocol": "tcp"
                }
            ],
            "essential": true,
            "environment": [],
            "environmentFiles": [],
            "mountPoints": [],
            "volumesFrom": [],
            "ulimits": [],
            "logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                    "awslogs-create-group": "true",
                    "awslogs-group": "/ecs/",
                    "awslogs-region": "ap-northeast-1",
                    "awslogs-stream-prefix": "ecs"
                },
                "secretOptions": []
            }
        }
    ],
    "family": "ECSDemo_TD",
    "executionRoleArn": "arn:aws:iam::123456789:role/ECSDemoTaskExecutionRole",
    "networkMode": "awsvpc",
    "revision": 1,
    "volumes": [],
    "status": "ACTIVE",
    "requiresAttributes": [
        {
            "name": "com.amazonaws.ecs.capability.logging-driver.awslogs"
        },
        {
            "name": "ecs.capability.execution-role-awslogs"
        },
        {
            "name": "com.amazonaws.ecs.capability.ecr-auth"
        },
        {
            "name": "com.amazonaws.ecs.capability.docker-remote-api.1.19"
        },
        {
            "name": "ecs.capability.execution-role-ecr-pull"
        },
        {
            "name": "com.amazonaws.ecs.capability.docker-remote-api.1.18"
        },
        {
            "name": "ecs.capability.task-eni"
        },
        {
            "name": "com.amazonaws.ecs.capability.docker-remote-api.1.29"
        }
    ],
    "placementConstraints": [],
    "compatibilities": [
        "EC2",
        "FARGATE"
    ],
    "requiresCompatibilities": [
        "FARGATE"
    ],
    "cpu": "512",
    "memory": "1024",
    "runtimePlatform": {
        "cpuArchitecture": "X86_64",
        "operatingSystemFamily": "LINUX"
    }
}

儲存之後將他壓縮成taskdef.zip備用。

接著建立一個叫appspec.yaml的檔案,
一樣可以建立一個文字檔,再改副檔名就好。
內容如下,
"<TASK_DEFINITION>"在管線執行時,會被taskdef.json的內容取代

version: 0.0
Resources:
  - TargetService:
      Type: AWS::ECS::Service
      Properties:
        TaskDefinition: <TASK_DEFINITION>
        LoadBalancerInfo:
          ContainerName: "ECSDemo"
          ContainerPort: 80

存檔後將檔案壓縮為appspec.zip備用。

接著我們進入S3頁面,建立一個S3 Bucket,名稱自己開就好(但無法與被別人用過的名字重複,也不能有英文大寫)
版本控制要選擇啟用
其他保持預設值,並建立Bucket。
https://ithelp.ithome.com.tw/upload/images/20231014/20152618sTbFKL15hx.jpg
https://ithelp.ithome.com.tw/upload/images/20231014/20152618JmPzQgTDvg.jpg

建立好Bucket之後,點進Bucket內,建立一個名為ECSDemoSource的資料夾
https://ithelp.ithome.com.tw/upload/images/20231014/20152618IiKWWJtK7L.jpg

接著把剛做好的兩個zip黨上傳到這個資料夾內。
https://ithelp.ithome.com.tw/upload/images/20231014/20152618K8LhVsjqiq.jpg

再來我們回到昨天建好的CodePipeline,點選編輯。
https://ithelp.ithome.com.tw/upload/images/20231014/20152618sGwd593J06.jpg

點選Source的編輯階段
https://ithelp.ithome.com.tw/upload/images/20231014/20152618SGqlBN9qVA.jpg

再點選新增階段
https://ithelp.ithome.com.tw/upload/images/20231014/20152618DhotDTKyVu.jpg

先新增一個Takdefinition的來源,設定請參考下圖。
補充說明S3 物件金鑰要連資料夾位置一起寫入。
輸出成品則是最後要給CodeDeploy使用。
https://ithelp.ithome.com.tw/upload/images/20231014/20152618rGzJ9omnBA.jpg

再新增一個appspec的來源,設定請參考下圖。
https://ithelp.ithome.com.tw/upload/images/20231014/20152618FQYUETaiRi.jpg

來源新增好後,在下方點選新增階段,
取個喜歡的名字後,再點選新增群組動作。
設定請參考下圖
https://ithelp.ithome.com.tw/upload/images/20231014/201526189fuBIZPQDl.jpg
https://ithelp.ithome.com.tw/upload/images/20231014/20152618W8T2e3M59W.jpg

都設定好後點選右上角的儲存,
並重新執行管道,
就完成了整個藍綠部署了喔!


上一篇
D28_CodePipeline建立
下一篇
D30_清除收費資源
系列文
從0開始的AWS ECS CICD30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言