2024年地方技能竞赛评分标准
1. 评分注意事项
职业名称
云计算
※ 评分时请注意以下事项。
1) AWS 区域使用 ap-northeast-2。
2) 网页访问使用 Chrome 或 Firefox。
3) 网页中的文字可能因语言不同而显示不同。
4) Shell 中命令的输出可能因版本而略有不同。
5) 试题和评分标准中的 <> 是变量。请更改对应部分后输入。
6) 评分必须按题目顺序进行。
7) 删除类评分不可撤销,请谨慎进行。
8) 异议申请全部结束后,删除选手创建的云资源。
9) 有部分分数的题目,评分项中已注明部分分数。
10) 未单独标注部分分数的题目,必须全部正确才计分。
11) 评分前为进行环境设置,必须确认以下事项。
- 确认能否通过 SSH 访问 Bastion。
- 确认 Bastion 中是否已安装 AWS CLI v2、cURL、jq。
- 确认 Bastion 中是否已映射 IAM Role,并可通过 AWS CLI 访问 AWS 的所有资源。
- 通过 aws sts get-caller-identity 命令确认是否正在访问选手账户以外的其他账户。如果是其他账户,则可怀疑存在作弊行为。
12) 评分前为配置评分环境,使以下内容添加到 ~/.aws/config 中。
[default]
region = ap-northeast-2
output = json
13) 评分时,可以运行另行提供的评分脚本(mark.sh)进行评分。但是,如果选手希望直接输入,可以按照评分标准表中列出的命令原样输入并进行评分。
云计算 第2题 17 - 1
2. 评分标准表
1) 主要项目分数分配
| 任务 | 序号 | 编号 | 主要项目 | 分值 | 评分方法-独立 | 评分方法-合议 | 评分时机-比赛进行中 | 评分时机-比赛结束后 | 备注 |
| 第2题 | 1 | | Networking | 4.0 | ○ | | ○ | | |
| 第2题 | 2 | | Bastion Server | 4.5 | ○ | | ○ | | |
| 第2题 | 3 | | Version Control | 6.0 | ○ | | ○ | | |
| 第2题 | 4 | | Continuous Integration | 3.0 | ○ | | ○ | | |
| 第2题 | 5 | | Continuous Delivery | 3.0 | ○ | | ○ | | |
| 第2题 | 6 | | Content Delivery Network | 7.5 | ○ | | ○ | | |
| 第2题 | 7 | | CI/CD Pipeline | 3.0 | ○ | | ○ | | |
| 第2题 | 8 | | Application Load Balancer | 3.0 | ○ | | ○ | | |
| 第2题 | 9 | | Application | 6.0 | ○ | | ○ | | |
| 合计 | | | | 40 | | | | | |
云计算 第2题 17 - 2
2) 评分方法及标准
| 任务 | 序号 | 编号 | 主要项目 | 详细项目(评分方法) | 分值 |
| 第2题 | 1 | 1 | Networking | VPC 确认 | 1.0 |
| 第2题 | 1 | 2 | Networking | Subnets 确认 | 1.5 |
| 第2题 | 1 | 3 | Networking | Route Tables 确认 | 1.5 |
| 第2题 | 2 | 1 | Bastion Server | 实例类型确认 | 1.5 |
| 第2题 | 2 | 2 | Bastion Server | Public IP 确认 | 1.5 |
| 第2题 | 2 | 3 | Bastion Server | OS 确认 | 1.5 |
| 第2题 | 3 | 1 | Version Control | 前端 CodeCommit 配置 | 1.5 |
| 第2题 | 3 | 2 | Version Control | 后端 CodeCommit 配置 | 1.5 |
| 第2题 | 3 | 3 | Version Control | 前端 Branch 配置 | 1.5 |
| 第2题 | 3 | 4 | Version Control | 后端 Branch 配置 | 1.5 |
| 第2题 | 4 | 1 | Continuous Integration | 后端 CodeBuild 配置 | 1.5 |
| 第2题 | 4 | 2 | Continuous Integration | 后端 CodeBuild 日志记录配置 | 1.5 |
| 第2题 | 5 | 1 | Continuous Delivery | 后端 CodeDeploy 配置 | 1.5 |
| 第2题 | 5 | 2 | Continuous Delivery | 后端 CodeDeploy ECS 配置 | 1.5 |
| 第2题 | 6 | 1 | Content Delivery Network | S3 配置 | 1.5 |
| 第2题 | 6 | 2 | Content Delivery Network | CloudFront 配置 | 1.5 |
| 第2题 | 6 | 3 | Content Delivery Network | CloudFront Origin 配置 | 1.5 |
| 第2题 | 6 | 4 | Content Delivery Network | CloudFront Edge 配置 | 1.5 |
| 第2题 | 6 | 5 | Content Delivery Network | CloudFront Cache 配置 | 1.5 |
| 第2题 | 7 | 1 | CI/CD Pipeline | 前端 CodePipeline 配置 | 1.5 |
| 第2题 | 7 | 2 | CI/CD Pipeline | 后端 CodePipeline 配置 | 1.5 |
| 第2题 | 8 | 1 | Application Load Balancer | ALB 创建确认 | 1.5 |
| 第2题 | 8 | 2 | Application Load Balancer | ALB Scheme 确认 | 1.5 |
| 第2题 | 9 | 1 | Application | 前端运行测试 | 1.5 |
| 第2题 | 9 | 2 | Application | 后端运行测试 | 1.5 |
| 第2题 | 9 | 3 | Application | 前端部署测试 | 1.5 |
| 第2题 | 9 | 4 | Application | 后端部署测试 | 1.5 |
| | | | | 总分 | 40 |
云计算 第2题 17 - 3
3) 评分内容
| 序号 | 评分项 |
| 1-1 | 1) 通过 SSH 访问 Bastion 服务器。
2) 输入以下命令。
aws ec2 describe-vpcs --filter Name=tag:Name,Values=skills-vpc \
--query "Vpcs[].CidrBlock"
3) 确认是否输出 172.16.0.0/16。 |
| 1-2 | 1) 通过 SSH 访问 Bastion 服务器。
2) 输入以下命令。
aws ec2 describe-subnets --filter Name=tag:Name,Values=skills-public-subnet-a \
--query "Subnets[].[AvailabilityZone, CidrBlock][]"
3) 确认是否输出 ap-northeast-2a 和 172.16.1.0/24。
4) 输入以下命令。
aws ec2 describe-subnets --filter Name=tag:Name,Values=skills-public-subnet-b \
--query "Subnets[].[AvailabilityZone, CidrBlock][]"
5) 确认是否输出 ap-northeast-2b 和 172.16.2.0/24。
6) 输入以下命令。
aws ec2 describe-subnets --filter Name=tag:Name,Values=skills-private-subnet-a \
--query "Subnets[].[AvailabilityZone, CidrBlock][]"
7) 确认是否输出 ap-northeast-2a 和 172.16.11.0/24。
8) 输入以下命令。
aws ec2 describe-subnets --filter Name=tag:Name,Values=skills-private-subnet-b \
--query "Subnets[].[AvailabilityZone, CidrBlock][]"
9) 确认是否输出 ap-northeast-2b 和 172.16.12.0/24。 |
云计算 第2题 17 - 4
| 序号 | 评分项 |
| 1-3 | 1) 通过 SSH 访问 Bastion 服务器。
2) 输入以下命令。
aws ec2 describe-route-tables --filter Name=tag:Name,Values=skills-public-rtb \
--query "RouteTables[].Routes[].GatewayId"
3) 确认是否输出以 igw- 开头的文本。
4) 输入以下命令。
aws ec2 describe-internet-gateways --filter Name=tag:Name,Values=skills-igw \
--query "InternetGateways[].InternetGatewayId"
5) 确认以 igw- 开头的文本是否与步骤 2) 中输出的文本相同。
6) 输入以下命令。
aws ec2 describe-route-tables --filter Name=tag:Name,Values=skills-private-rtb-a \
--query "RouteTables[].Routes[].NatGatewayId"
7) 确认是否输出以 nat- 开头的文本。
8) 输入以下命令。
aws ec2 describe-nat-gateways --filter Name=tag:Name,Values=skills-nat-a \
--query "NatGateways[].NatGatewayId"
9) 确认以 nat- 开头的文本是否与步骤 6) 中输出的文本相同。
10) 输入以下命令。
aws ec2 describe-route-tables --filter Name=tag:Name,Values=skills-private-rtb-b \
--query "RouteTables[].Routes[].NatGatewayId"
11) 确认是否输出以 nat- 开头的文本。
12) 输入以下命令。
aws ec2 describe-nat-gateways --filter Name=tag:Name,Values=skills-nat-b \
--query "NatGateways[].NatGatewayId"
13) 确认以 nat- 开头的文本是否与步骤 10) 中输出的文本相同。 |
| 2-1 | 1) 通过 SSH 访问 Bastion 服务器。
2) 输入以下命令。
aws ec2 describe-instances --filter Name=tag:Name,Values=skills-bastion-ec2 \
--query "Reservations[].Instances[].InstanceType"
3) 确认是否输出 t3a.small。 |
云计算 第2题 17 - 5
| 序号 | 评分项 |
| 2-2 | 1) 通过 SSH 访问 Bastion 服务器。
2) 输入以下命令。
aws ec2 describe-instances --filter Name=tag:Name,Values=skills-bastion-ec2 \
--query "Reservations[].Instances[].PublicIpAddress"
3) 记录步骤 2) 中输出的 IP。
4) 输入以下命令。
aws ec2 describe-addresses --query "Addresses[].PublicIp"
5) 确认输出的 IP 列表中是否存在步骤 3) 中记录的 IP。 |
| 2-3 | 1) 通过 SSH 访问 Bastion 服务器。
2) 输入以下命令。
aws ec2 describe-instances --filter Name=tag:Name,Values=skills-bastion-ec2 \
--query "Reservations[].Instances[].ImageId"
3) 记录以 ami- 开头的 AMI ID。
4) 输入以下命令。
aws ec2 describe-images --image-ids <步骤 2) 中记录的 AMI ID> --query "Images[].Description" |
5) 确认是否输出包含 Amazon Linux 2023 的语句。
1) 通过 SSH 访问 Bastion 服务器。
2) 输入以下命令。
3-1
aws codecommit get-repository --repository-name skills-frontend-code \
--query "repositoryMetadata.repositoryName"
3) 确认是否输出 skills-frontend-code。
1) 通过 SSH 访问 Bastion 服务器。
2) 输入以下命令。
3-2
aws codecommit get-repository --repository-name skills-backend-code \
--query "repositoryMetadata.repositoryName"
3) 确认是否输出 skills-backend-code。
1) 通过 SSH 访问 Bastion 服务器。
2) 输入以下命令。
3-3
aws codecommit get-repository --repository-name skills-frontend-code \
--query "repositoryMetadata.defaultBranch"
3) 确认是否输出 main。
云计算第2次作业 17 - 6
序号
评分项
1) 通过 SSH 访问 Bastion 服务器。
2) 输入以下命令。
3-4
aws codecommit get-repository --repository-name skills-backend-code \
--query "repositoryMetadata.defaultBranch"
3) 确认是否输出 main。
1) 通过 SSH 访问 Bastion 服务器。
4-1
2) 输入以下命令。
aws codebuild batch-get-projects --names skills-backend-build --query "projects[*].name"
3) 确认是否输出 skills-backend-build。
1) 通过 SSH 访问 Bastion 服务器。
2) 输入以下命令。
4-2
aws codebuild batch-get-projects --names skills-backend-build \
--query "projects[*].logsConfig.cloudWatchLogs.status"
3) 确认是否输出 ENABLED。
1) 通过 SSH 访问 Bastion 服务器。
2) 输入以下命令。
5-1
aws deploy get-application --application-name skills-backend-app \
--query "application.applicationName"
3) 确认是否输出 skills-backend-app。
1) 通过 SSH 访问 Bastion 服务器。
2) 输入以下命令。
5-2
aws deploy get-deployment-group --application-name skills-backend-app \
--deployment-group-name skills-backend-dg --query "deploymentGroupInfo.ecsServices[0]"
3) 确认是否输出 {"serviceName": "backend","clusterName": "skills-ecs-cluster"}。
1) 通过 SSH 访问 Bastion 服务器。
6-1
2) 输入以下命令。
aws s3api list-buckets --query "Buckets[*].Name" | grep "skills-frontend-"
3) 确认是否输出 skills-frontend-<随机字符 4 位>。
云计算第2次作业 17 - 7
序号
评分项
1) 通过 SSH 访问 Bastion 服务器。
2) 输入以下命令。
aws resourcegroupstaggingapi get-resources \
--tag-filters Key=Name,Values=skills-frontend-cdn \
6-2
--resource-type-filters 'cloudfront' --region us-east-1 \
--query "ResourceTagMappingList[0].ResourceARN" \
--output text | sed 's:.*/::' | xargs -I {} aws cloudfront get-distribution --id {} \
--query "Distribution.DomainName"
3) 确认是否输出名为 XXXXXXXXXXXXX.cloudfront.net 的域名。
1) 通过 SSH 访问 Bastion 服务器。
2) 输入以下命令。
aws resourcegroupstaggingapi get-resources \
--tag-filters Key=Name,Values=skills-frontend-cdn \
--resource-type-filters 'cloudfront' --region us-east-1 \
6-3
--query "ResourceTagMappingList[0].ResourceARN" \
--output text | sed 's:.*/::' | xargs -I {} aws cloudfront get-distribution --id {} \
--query "Distribution.DistributionConfig.Origins.Items[*].DomainName" \
| grep "skills-frontend-"
3) 确认是否输出 skills-frontend-<随机字符 4 位>.s3.ap-northeast-2.amazonaws.com 字样。
1) 通过 SSH 访问 Bastion 服务器。
2) 输入以下命令。
aws resourcegroupstaggingapi get-resources \
--tag-filters Key=Name,Values=skills-frontend-cdn \
6-4
--resource-type-filters 'cloudfront' --region us-east-1 \
--query "ResourceTagMappingList[0].ResourceARN" \
--output text | sed 's:.*/::' | xargs -I {} aws cloudfront get-distribution --id {} \
--query "Distribution.DistributionConfig.PriceClass"
3) 确认是否输出名为 PriceClass_All 的域名。
云计算第2次作业 17 - 8
序号
评分项
1) 通过 SSH 访问 Bastion 服务器。
2) 输入以下命令。
aws resourcegroupstaggingapi get-resources \
--tag-filters Key=Name,Values=skills-frontend-cdn \
--resource-type-filters 'cloudfront' --region us-east-1 \
--query "ResourceTagMappingList[0].ResourceARN" \
6-5
--output text | sed 's:.*/::' | xargs -I {} aws cloudfront get-distribution --id {} \
--query "Distribution.DomainName"
3) 确认是否输出名为 XXXXXXXXXXXXX.cloudfront.net 的域名。
4) 输入以下命令。
curl --silent --head https://<3)中输出的域名>/index.html | grep "x-cache“
5) 确认是否输出 x-cache: Hit from cloudfront 字样。最多可以执行 5 次。
1) 通过 SSH 访问 Bastion 服务器。
2) 输入以下命令。
7-1
aws codepipeline get-pipeline --name skills-frontend-pipeline \
--query "pipeline.stages[*].[name, actions[*].actionTypeId.provider]"
3) 确认是否输出 Source、Deploy,并分别输出 CodeCommit、S3。除这 3 个之外,输出其他内容也无妨,但这 3 个必须输出。
1) 通过 SSH 访问 Bastion 服务器。
2) 输入以下命令。
7-2
aws codepipeline get-pipeline --name skills-backend-pipeline \
--query "pipeline.stages[*].[name, actions[*].actionTypeId.provider]"
3) 确认是否输出 Source、Build、Deploy,并分别输出 CodeCommit、CodeBuild、CodeDeployToECS。除这 3 个之外,不应输出其他内容。
1) 通过 SSH 访问 Bastion 服务器。
2) 输入以下命令。
8-1
aws elbv2 describe-load-balancers --names skills-user-alb \
--query "LoadBalancers[].LoadBalancerName"
3) 确认是否输出 skills-user-alb。
云计算第2次作业 17 - 9
序号
评分项
1) 通过 SSH 访问 Bastion 服务器。
2) 输入以下命令。
8-2
aws elbv2 describe-load-balancers --names skills-user-alb \
--query "LoadBalancers[].Scheme"
3) 确认是否输出 internet-facing。
1) 通过 SSH 访问 Bastion 服务器。
2) 输入以下命令。
aws resourcegroupstaggingapi get-resources \
--tag-filters Key=Name,Values=skills-frontend-cdn \
--resource-type-filters 'cloudfront' --region us-east-1 \
--query "ResourceTagMappingList[0].ResourceARN" \
--output text | sed 's:.*/::' | xargs -I {} aws cloudfront get-distribution --id {} \
--query "Distribution.DomainName"
3) 确认是否输出名为 XXXXXXXXXXXXX.cloudfront.net 的域名。
4) 通过 Web 浏览器访问 https://<3)中输出的域名>/index.html。
9-1
5) 确认在 Web 浏览器中是否显示上述画面。
云计算第2次作业 17 - 10
序号
评分项
1) 通过 SSH 访问 Bastion 服务器。
2) 输入以下命令。
aws resourcegroupstaggingapi get-resources \
--tag-filters Key=Name,Values=skills-frontend-cdn \
--resource-type-filters 'cloudfront' --region us-east-1 \
--query "ResourceTagMappingList[0].ResourceARN" \
--output text | sed 's:.*/::' | xargs -I {} aws cloudfront get-distribution --id {} \
--query "Distribution.DomainName"
3) 确认是否输出 XXXXXXXXXXXXX.cloudfront.net 这个域名。
4) 通过 Web 浏览器访问 https://<3)中输出的域名>/。
9-2
5) 如果 Web 浏览器中显示上述画面,则点击“获取当前时间”。
6) 确认是否如上所示,底部无错误地输出当前时间。
云计算第2次作业 17 - 11
序号
评分项
1) 如上所述,通过 Web 浏览器访问 AWS Console 后,访问 CodeCommit 的
skills-frontend-code 存储库。
9-3
2) 在 index.html 中点击 Edit 后,将 v1 修改为 v2 这一文本。输入 Author name 为 root、
Email address 为 root@localhost 后,点击底部的 Commit changes 执行提交
。
云计算第2次作业 17 - 12
序号
评分项
3) 访问 CodePipeline 的 skills-frontend-pipeline。由于刚刚执行了新的提交,因此如上所示,流水线应正在运行。确认流水线是否在 15 分钟内无失败地完成。流水线完成后,恢复评分。
4) 通过 SSH 访问 Bastion 服务器。
5) 输入以下命令。
9-3
aws resourcegroupstaggingapi get-resources \
--tag-filters Key=Name,Values=skills-frontend-cdn \
--resource-type-filters 'cloudfront' --region us-east-1 \
--query "ResourceTagMappingList[0].ResourceARN" \
--output text | sed 's:.*/::' | xargs -I {} aws cloudfront get-distribution --id {} \
--query "Distribution.DomainName"
6) 确认是否输出 XXXXXXXXXXXXX.cloudfront.net 这个域名。
7) 通过 Web 浏览器访问 https://<3)中输出的域名>/index.html。
8) 确认 Web 浏览器中是否如上所示输出 v2。
云计算第2次作业 17 - 13
序号
评分项
9-4
1) 如上所述,通过 Web 浏览器访问 AWS Console 后,访问 CodeCommit 的 skills-backend-code
存储库。
云计算第2次作业 17 - 14
序号
评分项
9-4
2) 在 src/main/java/org/worldskills/cloud/skillsbackend/SkillsBackendApplication.java 中
点击 Edit 后,在 currentDateTime 后面输入 v2 这一文本。输入 Author name 为 root、
Email address 为 root@localhost 后,点击底部的 Commit changes 执行提交
。
云计算第2次作业 17 - 15
序号
评分项
9-4
3) 访问 CodePipeline 的 skills-backend-pipeline。由于刚刚执行了新的提交,因此如上所示,流水线应正在运行。确认流水线是否在 15 分钟内无失败地完成。流水线完成后,恢复评分。
4) 通过 SSH 访问 Bastion 服务器。
5) 输入以下命令。
aws resourcegroupstaggingapi get-resources \
--tag-filters Key=Name,Values=skills-frontend-cdn \
--resource-type-filters 'cloudfront' --region us-east-1 \
--query "ResourceTagMappingList[0].ResourceARN" \
--output text | sed 's:.*/::' | xargs -I {} aws cloudfront get-distribution --id {} \
--query "Distribution.DomainName"
6) 确认是否输出 XXXXXXXXXXXXX.cloudfront.net 这个域名。
7) 通过 Web 浏览器访问 https://<3)中输出的域名>/index.html。
云计算第2次作业 17 - 16
序号
评分项
8) 如果 Web 浏览器中显示上述画面,则点击“获取当前时间”。
9-4
9) 确认是否如上所示,底部无错误地输出当前时间以及 v2。
云计算第2次作业 17 - 17