正在学习

阶段 2:运行时

创建 VPC

module "vpc" {

source = "terraform-aws-modules/vpc/aws"

name = "taskflow-vpc"

cidr = "10.0.0.0/16"

azs = ["{var.aws_region}b"]

public_subnets = ["10.0.1.0/24", "10.0.2.0/24"]

enable_dns_hostnames = true

enable_dns_support = true

}

创建 ECS 集群

resource "aws_ecs_cluster" "taskflow_cluster" {

name = "taskflow-cluster"

}

任务定义

resource "aws_ecs_task_definition" "taskflow" {

family = "taskflow"

network_mode = "awsvpc"

requires_compatibilities = ["FARGATE"]

cpu = 256

memory = 512

execution_role_arn = var.ecs_execution_role

container_definitions = jsonencode([{

name = "taskflow"

image = var.docker_image

essential = true

portMappings = [{ containerPort = 8000 }]

logConfiguration = {

logDriver = "awslogs"

options = {

awslogs-group = "/ecs/taskflow"

awslogs-region = var.aws_region

awslogs-stream-prefix = "ecs"

}

}

}])

}

服务

resource "aws_ecs_service" "taskflow_service" {

name = "taskflow-service"

cluster = aws_ecs_cluster.taskflow_cluster.id

task_definition = aws_ecs_task_definition.taskflow.arn

desired_count = 2

launch_type = "FARGATE"

network_configuration {

subnets = module.vpc.public_subnets

assign_public_ip = true

}

load_balancer {

target_group_arn = aws_lb_target_group.taskflow_tg.arn

container_name = "taskflow"

container_port = 8000

}

depends_on = [aws_lb_listener.http]

}

应用程序负载均衡器

resource "aws_lb" "taskflow_alb" {

name = "taskflow-alb"

internal = false

load_balancer_type = "application"

subnets = module.vpc.public_subnets

}

resource "aws_lb_target_group" "taskflow_tg" {

name = "taskflow-tg"

port = 8000

protocol = "HTTP"

vpc_id = module.vpc.vpc_id

}

resource "aws_lb_listener" "http" {

load_balancer_arn = aws_lb.taskflow_alb.arn

port = 80

protocol = "HTTP"

default_action {

type = "forward"

target_group_arn = aws_lb_target_group.taskflow_tg.arn

}

}

variables.tf

variable "aws_region" {

description = "AWS 区域"

default = "us-east-1"

}

variable "docker_image" {

description = "TaskFlow 容器镜像"

type = string

}

variable "ecs_execution_role" {

description = "用于 ECS 任务执行的 IAM 角色"

type = string

}

outputs.tf

output "load_balancer_dns" {

description = "TaskFlow 服务的公共 URL"

value = aws_lb.taskflow_alb.dns_name

}

运行以下命令:

terraform init

terraform plan -var="docker_image=ghcr.io/your-org/taskflow:latest" -var="ecs_execution_role=arn:aws:iam::123456789012:role/ECSExecutionRole"

terraform apply -auto-approve


部署完成后,Terraform 会输出负载均衡器的 DNS,您的 API 将通过公共端点变得可访问。Claude 现在可以通过简单的提示来帮助您测试部署,例如:

"Claude,编写一个 curl 测试,验证通过新负载均衡器访问 TaskFlow/health 端点是否返回 200 响应。"

Claude 会用一行验证命令来回应:

curl -i http:///health


**说明表:Claude 在基础设施自动化中的作用**

| 阶段 | 传统任务 | Claude 的协助 | 成果 |
| --- | --- | --- | --- |
| 定义 | 编写 Terraform/Ansible 模板 | 生成经过验证的 IaC 并附带注释 | 节省设置时间 |
| 验证 | 检查依赖关系、语法 | 检测循环引用、缺失变量 | 防止运行时错误 |
| 优化 | 改进成本和资源使用 | 推荐实例类型和扩缩容策略 | 减少云支出 |
| 合规性 | 审查 IAM 和安全组 | 建议最小权限角色 | 提高安全性 |
| 维护 | 更新和记录基础设施 | 汇总差异并创建变更日志 | 保持基础设施可审计 |

有了 Claude 作为您的 DevOps 合作伙伴,基础设施自动化变得更快、更安全。您无需记住每个 Terraform 资源或 YAML 语法规则,只需描述您的意图,让 Claude 将其转化为经过验证的结构化代码。除了代码生成,Claude 还会解释每个资源背后的原理,帮助您自然地学习 IaC 原则。

在下一节中,您将进一步迈出一步——端到端地自动化云环境,包括变量管理、密钥注入和跨环境同步——所有这些都由 Claude Code 作为实时助手来完成,它能够理解您的技术栈并预见您的运营需求。

练习题

在VPC模块配置中,为VPC指定的CIDR块是什么?

A. 10.0.1.0/24
B. 10.0.0.0/16
C. 192.168.1.0/24
D. 172.16.0.0/12

哪个 Terraform 资源用于创建 ECS 集群?

A. aws_vpc
B. aws_ecs_task_definition
C. aws_ecs_cluster
D. aws_lb

以下哪些是 ECS 任务定义中的必需参数?

A. family
B. network_mode
C. requires_compatibilities
D. execution_role_arn
E. container_definitions

ECS 服务配置为任务分配了公有 IP。

应用程序负载均衡器在端口 ___ 上监听 HTTP 流量。

ECS 任务定义中 'execution_role_arn' 参数的用途是什么?

哪个命令用于初始化 Terraform 配置?

A. terraform apply
B. terraform init
C. terraform plan
D. terraform validate

哪些 Terraform 命令用于规划和对基础设施应用更改?

A. terraform init
B. terraform plan
C. terraform apply
D. terraform destroy
E. terraform validate

terraform apply 命令需要手动确认,除非使用 -auto-approve 标志。

输出变量 '___' 提供了 TaskFlow 服务的公共 URL。

解释 ECS 任务定义中 'container_definitions' 参数的用途。

创建和测试带有负载均衡器的 ECS 服务涉及哪些知识点?

A. 使用 Terraform 创建 VPC
B. 使用 Terraform 创建 ECS 集群
C. 使用 Terraform 进行任务定义
D. 使用 Terraform 创建 ECS 服务
E. 使用 Terraform 创建应用程序负载均衡器
F. 负载均衡器的 Curl 测试命令

ECS 服务配置中的 'depends_on' 参数是如何确保正确的部署顺序的?

在使用Terraform创建ECS任务定义时,哪个参数指定了容器用于HTTP流量的端口映射?

A. network_mode
B. requires_compatibilities
C. container_definitions中的portMappings
D. network_configuration中的assign_public_ip

创建负载均衡的 ECS 服务需要哪些 Terraform 资源?(选择所有适用的)

A. aws_ecs_cluster
B. aws_ecs_task_definition
C. aws_lb
D. aws_lb_target_group
E. aws_lb_listener
F. aws_vpc

aws_ecs_service 资源中的 depends_on 参数确保负载均衡器监听器在服务启动之前创建。

要测试已部署的服务,您可以使用以下命令:curl -i http://___/health

解释为什么在 ECS 服务的网络配置中同时需要 public_subnetsassign_public_ip = true

登录后解锁笔记、知识点解析、AI 问答

立即登录