地方技能竞赛评分标准
1. 评分注意事项
职业名称
云计算
※ 评分时请注意以下事项。
确认用于评分的服务器是否为选手的服务器。
评分时,命令输入可如下方图片所示使用 CloudShell。
※ 评分标准表格必须按照格式填写。(录入评分网站时需要)
云计算 第2任务 10 - 1
2. 评分标准表
1) 主要项目分值
| 任务 | 序号 | 主要项目 | 分值 | 评分方法 | | 评分时间 | | 备注 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| | | | | 独立 | 合议 | 比赛进行中 | 比赛结束后 | |
| 第2任务 | 1 | VPN | 12.5 | ○ | ○ | | | |
| 第2任务 | 2 | Keda | 12.5 | ○ | ○ | | | |
| 第2任务 | 3 | Terraform | 12.5 | ○ | ○ | | | |
| 第2任务 | 4 | EC2 | 12.5 | ○ | ○ | | | |
| | | 合计 | 50 | | | | | |
云计算 第2任务 10 - 2
备注
2) 评分方法及标准
| 任务 | 主要项目序号 | 主要项目 | 详细项目序号 | 详细项目(评分方法) | 分值 |
| --- | --- | --- | --- | --- | --- |
| 第2任务 | 1 | VPN | 1 | VPC 创建 | 1.5 |
| 第2任务 | 1 | VPN | 2 | Public Subnet CIDR | 1 |
| 第2任务 | 1 | VPN | 3 | Private Subnet CIDR | 1 |
| 第2任务 | 1 | VPN | 4 | NAT GW | 1.5 |
| 第2任务 | 1 | VPN | 5 | Client VPN CIDR | 1.5 |
| 第2任务 | 1 | VPN | 6 | Client VPN HA | 1.5 |
| 第2任务 | 1 | VPN | 7 | Client VPN ACL | 1.5 |
| 第2任务 | 1 | VPN | 8 | Client VPN 连接确认 | 1.5 |
| 第2任务 | 1 | VPN | 9 | Client VPN 服务器接入 | 1.5 |
| 第2任务 | 2 | Evnet-driven Autoscaling | 1 | EKS cluster 创建 | 1 |
| 第2任务 | 2 | Evnet-driven Autoscaling | 2 | Deployment 创建 | 1.5 |
| 第2任务 | 2 | Evnet-driven Autoscaling | 3 | Deployment 最小数量 | 1.5 |
| 第2任务 | 2 | Evnet-driven Autoscaling | 4 | Deployment 环境变量 | 1.5 |
| 第2任务 | 2 | Evnet-driven Autoscaling | 5 | SQS queue 创建 | 1 |
| 第2任务 | 2 | Evnet-driven Autoscaling | 6 | Keda 创建 | 1.5 |
| 第2任务 | 2 | Evnet-driven Autoscaling | 7 | Scaled Object | 1.5 |
| 第2任务 | 2 | Evnet-driven Autoscaling | 8 | 容器扩展 | 1.5 |
| 第2任务 | 2 | Evnet-driven Autoscaling | 9 | 容器缩减 | 1.5 |
| 第2任务 | 3 | Infrastructure as Code | 1 | 前期工作 | 1 |
| 第2任务 | 3 | Infrastructure as Code | 2 | EC2 创建 | 1 |
| 第2任务 | 3 | Infrastructure as Code | 3 | VPC 创建 | 1.5 |
| 第2任务 | 3 | Infrastructure as Code | 4 | Public subnet 创建 | 1.5 |
| 第2任务 | 3 | Infrastructure as Code | 5 | IGW 创建 | 1.5 |
| 第2任务 | 3 | Infrastructure as Code | 6 | EC2 类型 | 1.5 |
| 第2任务 | 3 | Infrastructure as Code | 7 | EC2 子网 | 1.5 |
| 第2任务 | 3 | Infrastructure as Code | 8 | EBS 加密 | 1.5 |
| 第2任务 | 3 | Infrastructure as Code | 9 | IAM role | 1.5 |
| 第2任务 | 4 | EC2 Automation | 1 | SSM 连接 | 1 |
| 第2任务 | 4 | EC2 Automation | 2 | 测试实例创建 | 1.5 |
| 第2任务 | 4 | EC2 Automation | 3 | old 脚本确认及执行 | 1.5 |
| 第2任务 | 4 | EC2 Automation | 4 | 实例1 删除 | 1.5 |
| 第2任务 | 4 | EC2 Automation | 5 | 实例2 删除 | 1.5 |
| 第2任务 | 4 | EC2 Automation | 6 | 实例3,4 未删除 | 1 |
| 第2任务 | 4 | EC2 Automation | 7 | all 脚本确认及执行 | 1.5 |
| 第2任务 | 4 | EC2 Automation | 8 | 实例3 删除 | 1.5 |
| 第2任务 | 4 | EC2 Automation | 9 | 实例4 删除 | 1.5 |
| 第2任务 | 4 | EC2 Automation | 10 | Bastion 运行确认 | |
| | | 合计 | | | 50 |
云计算 第2任务 10 - 3
| 序号 | 评分项目 |
| --- | --- |
| 1-1 | 1) 使用网页浏览器登录选手的 AWS 账户后,执行 CloudShell。
2) 输入以下命令。
$ export VPC_ID=$(aws ec2 describe-vpcs --filters \\
Name=tag:Name,Values=[ws-vpn-vpc] --query Vpcs[].VpcId --output text)
$ aws ec2 describe-vpcs --filters Name=tag:Name,Values=[ws-vpn-vpc] \\
--query Vpcs[].CidrBlock
3) 确认输出结果为 "10.99.0.0/16"。 |
| 1-2 | 1) 使用网页浏览器登录选手的 AWS 账户后,执行 CloudShell。
2) 输入以下命令。
$ aws ec2 describe-subnets --filters \\
Name=tag:Name,Values=[ws-public-subnet-a] --query Subnets[].CidrBlock
3) 确认输出结果为 "10.99.0.0/24"。 |
| 1-3 | 1) 使用网页浏览器登录选手的 AWS 账户后,执行 CloudShell。
2) 输入以下命令。
$ aws ec2 describe-subnets --filters \\
Name=tag:Name,Values=[ws-private-subnet-b] --query Subnets[].CidrBlock
3) 确认输出结果为 "10.99.11.0/24"。 |
| 1-4 | 1) 使用网页浏览器登录选手的 AWS 账户后,执行 CloudShell。
2) 输入以下命令。
$ export PUBLIC_SUBNET_IDS=$(aws ec2 describe-nat-gateways --filter \\
Name=state,Values=[available] --query NatGateways[].SubnetId --output text)
$ aws ec2 describe-subnets --subnet-ids $PUBLIC_SUBNET_IDS --query \\
Subnets[].AvailabilityZone
3) 确认输出结果中是否包含 "ap-northeast-2a" 和 "ap-northeast-2b"。 |
| 1-5 | 1) 使用网页浏览器登录选手的 AWS 账户后,执行 CloudShell。
2) 输入以下命令。
$ export CVPN_ID=$(aws ec2 describe-client-vpn-endpoints --filters \\
Name=tag:Name,Values=[ws-client-vpn] --query \\
ClientVpnEndpoints[].ClientVpnEndpointId --output text)
$ aws ec2 describe-client-vpn-endpoints --client-vpn-endpoint-id $CVPN_ID \\
--query ClientVpnEndpoints[].ClientCidrBlock
3) 确认输出结果为 "10.254.0.0/16"。 |
云计算 第2任务 10 - 4
| 序号 | 评分项目 |
| --- | --- |
| 1-6 | 1) 使用网页浏览器登录选手的 AWS 账户后,执行 CloudShell。
2) 输入以下命令。
$ aws ec2 describe-client-vpn-target-networks --client-vpn-endpoint-id \\
$CVPN_ID --query ClientVpnTargetNetworks[].TargetNetworkId --output text
$ aws ec2 describe-instances --filters \\ Name=tag:Name,Values=[ws-web-a,ws-web-b] \\
--query Reservations[].Instances[].SubnetId --output text
3) 确认上述输入的两条命令的输出结果是否相同。
* 若结果值相同,仅顺序不同,也视为正确答案。 |
| 1-7 | 1) 使用网页浏览器登录选手的 AWS 账户后,执行 CloudShell。
2) 输入以下命令。
$ aws ec2 describe-client-vpn-authorization-rules --client-vpn-endpoint-id \\
$CVPN_ID --query AuthorizationRules[].DestinationCidr
3) 确认输出结果为 "10.99.0.0/16"。 |
| 1-8 | 1) 在选手的 Windows PC 上运行 AWS VPN Client,选择选手预先配置的配置文件并尝试连接(Connect)。
2) 确认是否如下方图片所示成功连接,状态变为 "Conntected."。 |
| 1-9 | 1) 在 1-8 项中 VPN 连接成功并与 VPC 连接的状态下进行。
2) 记录在 VPC 中创建的 Web 服务器的 Private IP 地址。
3) 在浏览器中输入 http://。
4) 确认是否显示 "Welcome to the ws portal"。 |
云计算 第2任务 10 - 5
| 序号 | 评分项目 |
| --- | --- |
| 2-1 | 1) 访问 Bastion 的 shell。
2) 输入以下命令。
$ aws eks describe-cluster --name order-cluster --query cluster.version
3) 确认是否输出 1.31。 |
| 2-2 | 1) 访问 Bastion 的 shell。
2) 输入以下命令。
$ aws eks update-kubeconfig --name order-cluster
$ kubectl get deployment --namespace order \| grep order-processor
3) 确认是否输出 order-processor。 |
| 2-3 | 1) 访问 Bastion 的 shell。
2) 输入以下命令。
$ kubectl get po -n order \| grep order-processor
3) 确认是否仅输出一个 order-processor Pod。 |
| 2-4 | 1) 访问 Bastion 的 shell。
2) 输入以下命令。
$ kubectl describe deployment -n order \| grep -E "QUEUE_URL\|REGION_NAME"
3) 确认是否输出 QUEUE_URL 和 REGION_NAME 环境变量。 |
| 2-5 | 1) 访问 Bastion 的 shell。
2) 输入以下命令。
$ aws sqs get-queue-url --queue-name order-queue --query QueueUrl \\
--output text
3) 确认是否输出 SQS 的 URL。 |
| 2-6 | 1) 访问 Bastion 的 shell。
2) 输入以下命令。
$ kubectl get po -A \| grep keda-operator
3) 确认是否输出包含 keda-operator 的结果。 |
| 2-7 | 1) 访问 Bastion 的 shell。
2) 输入以下命令。
$ kubectl get scaledobjects.keda.sh -A
3) 确认是否输出 1 个以上的结果(ScaledObjects)。
由于必须只有一台 Pod 才能实现,若 2-3 错误,则 2-8 也视为错误。 |
| 2-8 | 1) 访问 Bastion 的 shell。
2) 输入以下命令以制造负载。
$ for i {1..20}; do aws sqs send-message --queue-url <<选手 Q>> \\
--message-body $i; done;
3) 每隔约 5 秒持续输入以下命令,确认 Pod 是否增加。
$ kubectl get po -n order \| grep order-processor
(最多可等待 5 分钟,直到增加 1 台以上) |
云计算 第2任务 10 - 6
| 序号 | 评分项目 |
| --- | --- |
| 2-9 | 由于是 Pod 减少测试,若 2-8 错误,则 2-9 也视为错误。
1) 访问 Bastion 的 shell。
2) 每隔约 5 秒持续输入以下命令,确认 Pod 是否减少。
$ kubectl get po -n order \| grep order-processor
(最多可等待 5 分钟,直到 Pod 减少) |
这是前置操作步骤,执行相应命令以删除并重新创建资源。
1) 通过 CLI 访问部署在 Default VPC 中的 Bastion 的 /home/ec2-user/korea。
2) 输入以下命令,删除已创建的资源,并基于 Terraform 代码
3-0
重新创建基础设施。
$ cd /home/ec2-user/korea
$ terraform init && terraform destroy -auto-approve
$ terraform apply -auto-approve
1) 访问部署在 Default VPC 中的 Bastion 的 shell。
3-1
2) 输入以下命令,确认是否输出以 i- 开头的实例 ID。
$ aws ec2 describe-instances --filters Name=tag:Name,Values=[korea-instance] \
--query Reservations[].Instances[].InstanceId --output text
1) 访问部署在 Default VPC 中的 Bastion 的 shell。
3-2
2) 输入以下命令,确认是否输出 10.0.0.0/16。
$ aws ec2 describe-vpcs --filters Name=tag:Name,Values=[korea-vpc] \
--query Vpcs[].CidrBlock
1) 访问部署在 Default VPC 中的 Bastion 的 shell。
3-3
2) 输入以下命令,确认是否输出 ap-northeast-2a。
$ aws ec2 describe-subnets --filters Name=tag:Name,Values=[korea-public-subnet-a] \
--query Subnets[].AvailabilityZone
1) 访问部署在 Default VPC 中的 Bastion 的 shell。
2) 输入以下命令,确认是否输出以 igw- 开头的 IGW ID。
$ export VPC_ID=$(aws ec2 describe-vpcs --filters \
3-4
Name=tag:Name,Values=[korea-vpc] --query Vpcs[].VpcId --output text)
$ aws ec2 describe-internet-gateways --filters \
Name=attachment.vpc-id,Values=[$VPC_ID] --query \
InternetGateways[].InternetGatewayId
1) 访问部署在 Default VPC 中的 Bastion 的 shell。
3-5
2) 输入以下命令,确认是否输出 t3.micro。
$ aws ec2 describe-instances --filters Name=tag:Name,Values=[korea-instance] \
--query Reservations[].Instances[].InstanceType
云计算第2次作业 10 - 7
序号
评分项
1) 访问部署在 Default VPC 中的 Bastion 的 shell。
2) 输入以下命令,确认是否输出 korea-public-subnet-a。
$ export SUBNET_ID=$(aws ec2 describe-instances --filters
3-6
Name=tag:Name,Values=[korea-instance] \
--query Reservations[].Instances[].SubnetId)
$ aws ec2 describe-subnets --subnet-ids $SUBNET_ID --query
Subnets[].Tags[?Key==\`Name\`].Value
1) 访问部署在 Default VPC 中的 Bastion 的 shell。
2) 输入以下命令,确认是否输出 true。
3-7
$ export VOLUME_ID=$(aws ec2 describe-instances --filters \
Name=tag:Name,Values=[korea-instance] --query \
Reservations[].Instances[].BlockDeviceMappings[].Ebs.VolumeId --output text)
$ aws ec2 describe-volumes --volume-ids $VOLUME_ID --query Volumes[].Encrypted
1) 访问部署在 Default VPC 中的 Bastion 的 shell。
3-8
2) 输入以下命令,确认是否输出 IAM role 的 ARN。
$ aws ec2 describe-instances --filters Name=tag:Name,Values=[korea-instance] \
--query Reservations[].Instances[].IamInstanceProfile | grep -i Arn
1) 访问部署在 Default VPC 中的 Bastion 的 shell。
2) 输入以下命令,确认是否输出 Online。
$ export INSTANCE_ID=$(aws ec2 describe-instances --filters \
3-9
Name=tag:Name,Values=[korea-instance] --query \
Reservations[].Instances[].InstanceId --output text)
$ aws ssm describe-instance-information --filters \
Key=InstanceIds,Values=[$INSTANCE_ID] --query InstanceInformationList[].PingStatus
云计算第2次作业 10 - 8
序号
评分项
1) 访问部署在 Tokyo 中的 Bastion 的 shell。
2) 输入以下命令,确认执行是否没有报错。
$ aws ec2 run-instances --image-id "ami-03f584e50b2d32776" --instance-type "t3.micro" \
--tag-specifications \
'{"ResourceType":"instance","Tags":[{"Key":"Name","Value":"instance-1-2025x2gj"}, \
{"Key":"Project","Value":"skills2022"}]}' --count "1" --no-cli-pager > /dev/null
$ aws ec2 run-instances --image-id "ami-03f584e50b2d32776" --instance-type "t3.micro" \
--tag-specifications \
4-1
'{"ResourceType":"instance","Tags":[{"Key":"Name","Value":"instance-2-2025x2gj"}, \
{"Key":"Project","Value":"skills2022"}]}' --count "1" --no-cli-pager > /dev/null
$ aws ec2 run-instances --image-id "ami-03f584e50b2d32776" --instance-type "t3.micro" \
--tag-specifications \
'{"ResourceType":"instance","Tags":[{"Key":"Name","Value":"instance-3-2025x2gj"}, \
{"Key":"Project","Value":"skills2023"}]}' --count "1" --no-cli-pager > /dev/null
$ aws ec2 run-instances --image-id "ami-03f584e50b2d32776" --instance-type "t3.micro" \
--tag-specifications \
'{"ResourceType":"instance","Tags":[{"Key":"Name","Value":"instance-4-2025x2gj"}, \
{"Key":"Project","Value":"skills2024"}]}' --count "1" --no-cli-pager > /dev/null
1) 访问部署在 Tokyo 中的 Bastion 的 shell。
2) 使用以下命令确认是否存在 delete_old_instance.sh。(存在则得分)
$ cd /home/ec2-user/ec2-automation/
4-2
$ ls -l | grep delete_old_instance
3) 如果存在,则使用以下命令执行 delete_old_instance。
$ chmod +x delete_old_instance.sh
$ ./delete_old_instance.sh
(等待约 30 秒后开始 4-3 评分。)
1) 访问部署在 Default VPC 中的 Bastion 的 shell。
2) 输入以下命令,确认 instance-1 的状态是否输出为 "Shutting-down" 或
4-3
"Terminated"。
$ aws ec2 describe-instances --filters Name=tag:Name,Values=[instance-1-2025x2gj] \
--query Reservations[].Instances[].State
1) 访问部署在 Default VPC 中的 Bastion 的 shell。
2) 输入以下命令,确认 instance-2 的状态是否输出为 "Shutting-down" 或
4-4
"Terminated"。
$ aws ec2 describe-instances --filters Name=tag:Name,Values=[instance-2-2025x2gj] \
--query Reservations[].Instances[].State
云计算第2次作业 10 - 9
序号
评分项
1) 访问部署在 Default VPC 中的 Bastion 的 shell。
2) 输入以下命令,确认 instance-3 和 4 的状态是否为 "Running"。
4-5
$ aws ec2 describe-instances --filters \
Name=tag:Name,Values=[instance-3-2025x2gj] --query Reservations[].Instances[].State
$ aws ec2 describe-instances --filters \
Name=tag:Name,Values=[instance-4-2025x2gj] --query Reservations[].Instances[].State
1) 访问部署在 Default VPC 中的 Bastion 的 shell。
2) 使用以下命令确认是否存在 delete_all_instance.sh。(存在则得分)
$ cd /home/ec2-user/ec2-automation/
4-6
$ ls -l | grep delete_all_instance
3) 如果存在,则使用以下命令执行 delete_all_instance。
$ chmod +x delete_all_instance.sh
$ ./delete_all_instance.sh
(等待约 30 秒后,开始 4-7 评分。)
1) 访问部署在 Default VPC 中的 Bastion 的 shell。
2) 输入以下命令,确认 instance-3 的状态是否输出为 "Shutting-down" 或
4-7
"Terminated"。
$ aws ec2 describe-instances --filters Name=tag:Name,Values=[instance-3-2025x2gj] \
--query Reservations[].Instances[].State
1) 访问部署在 Default VPC 中的 Bastion 的 shell。
2) 输入以下命令,确认 instance-4 的状态是否输出为 "Shutting-down" 或
4-8
"Terminated"。
$ aws ec2 describe-instances --filters Name=tag:Name,Values=[instance-4-2025x2gj] \
--query Reservations[].Instances[].State
1) 访问部署在 Default VPC 中的 Bastion 的 shell。
4-9
2) 输入以下命令,确认 bastion 服务器的状态是否为 "Running"。
$ aws ec2 describe-instances --filters Name=tag:Name,Values=[automation-bastion] \
--query Reservations[].Instances[].State
云计算第2次作业 10 - 10