正在学习
阶段 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://
**说明表:Claude 在基础设施自动化中的作用**
| 阶段 | 传统任务 | Claude 的协助 | 成果 |
| --- | --- | --- | --- |
| 定义 | 编写 Terraform/Ansible 模板 | 生成经过验证的 IaC 并附带注释 | 节省设置时间 |
| 验证 | 检查依赖关系、语法 | 检测循环引用、缺失变量 | 防止运行时错误 |
| 优化 | 改进成本和资源使用 | 推荐实例类型和扩缩容策略 | 减少云支出 |
| 合规性 | 审查 IAM 和安全组 | 建议最小权限角色 | 提高安全性 |
| 维护 | 更新和记录基础设施 | 汇总差异并创建变更日志 | 保持基础设施可审计 |
有了 Claude 作为您的 DevOps 合作伙伴,基础设施自动化变得更快、更安全。您无需记住每个 Terraform 资源或 YAML 语法规则,只需描述您的意图,让 Claude 将其转化为经过验证的结构化代码。除了代码生成,Claude 还会解释每个资源背后的原理,帮助您自然地学习 IaC 原则。
在下一节中,您将进一步迈出一步——端到端地自动化云环境,包括变量管理、密钥注入和跨环境同步——所有这些都由 Claude Code 作为实时助手来完成,它能够理解您的技术栈并预见您的运营需求。
练习题
在VPC模块配置中,为VPC指定的CIDR块是什么?
哪个 Terraform 资源用于创建 ECS 集群?
以下哪些是 ECS 任务定义中的必需参数?
ECS 服务配置为任务分配了公有 IP。
应用程序负载均衡器在端口 ___ 上监听 HTTP 流量。
ECS 任务定义中 'execution_role_arn' 参数的用途是什么?
哪个命令用于初始化 Terraform 配置?
哪些 Terraform 命令用于规划和对基础设施应用更改?
terraform apply 命令需要手动确认,除非使用 -auto-approve 标志。
输出变量 '___' 提供了 TaskFlow 服务的公共 URL。
解释 ECS 任务定义中 'container_definitions' 参数的用途。
创建和测试带有负载均衡器的 ECS 服务涉及哪些知识点?
ECS 服务配置中的 'depends_on' 参数是如何确保正确的部署顺序的?
在使用Terraform创建ECS任务定义时,哪个参数指定了容器用于HTTP流量的端口映射?
network_moderequires_compatibilitiescontainer_definitions中的portMappingsnetwork_configuration中的assign_public_ip创建负载均衡的 ECS 服务需要哪些 Terraform 资源?(选择所有适用的)
aws_ecs_clusteraws_ecs_task_definitionaws_lbaws_lb_target_groupaws_lb_listeneraws_vpcaws_ecs_service 资源中的 depends_on 参数确保负载均衡器监听器在服务启动之前创建。
要测试已部署的服务,您可以使用以下命令:curl -i http://___/health
解释为什么在 ECS 服务的网络配置中同时需要 public_subnets 和 assign_public_ip = true。
登录后解锁笔记、知识点解析、AI 问答
立即登录