昨天串了一半的CodePipeline,
今天要串完。
首先我們要先準備兩個組態檔案,
分別是部署所需的TaskDefinition與Appspec。
這兩個是在做ECS藍綠部署時,會取代現行的TaskDefinition與容器內的設定。
首先是TaskDefinition,非常簡單,我打們打ECS頁面,找到之前建立的TaskDefinition,
並點選最新版的JSON
將整個JSON複製起來到本地,做一個JSON檔案,檔名叫taskdef.json
把剛才複製到JSON貼上,但要把最後方的這三項刪除
{
"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。
建立好Bucket之後,點進Bucket內,建立一個名為ECSDemoSource的資料夾
接著把剛做好的兩個zip黨上傳到這個資料夾內。
再來我們回到昨天建好的CodePipeline,點選編輯。
點選Source的編輯階段
再點選新增階段
先新增一個Takdefinition的來源,設定請參考下圖。
補充說明S3 物件金鑰要連資料夾位置一起寫入。
輸出成品則是最後要給CodeDeploy使用。
再新增一個appspec的來源,設定請參考下圖。
來源新增好後,在下方點選新增階段,
取個喜歡的名字後,再點選新增群組動作。
設定請參考下圖
都設定好後點選右上角的儲存,
並重新執行管道,
就完成了整個藍綠部署了喔!