关于 infrastructure
面向使用 Terraform 管理云资源的基础设施即代码技能,涵盖项目结构、计划与应用工作流、状态管理、可复用模块及 AWS 资源示例。
主要功能
- 01组织 Terraform 项目结构
- 02计划并应用基础设施变更
- 03管理远程状态与锁定
- 04复用基础设施模块
- 05配置 AWS 资源
适用场景
- 01搭建 Terraform 基础设施仓库
- 02应用前审查变更计划
- 03隔离并保护不同环境的状态
- 04配置 AWS VPC、ECS 或 S3 资源
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ dralgorhythm/ claude-agentic-framework --skill infrastructure安装后在 Claude Code 中输入/infrastructure确认已加载。
详细介绍
基础设施即代码
原则
- 一切皆代码:不进行手动更改
- 版本控制:跟踪所有更改
- 幂等性:可安全地多次运行
- 经过测试:应用前进行验证
Terraform 基础
项目结构
infrastructure/
├── main.tf # Main configuration
├── variables.tf # Input variables
├── outputs.tf # Output values
├── providers.tf # Provider config
├── terraform.tfvars # Variable values
└── modules/
└── vpc/ # Reusable modules
示例:AWS VPC
# providers.tf
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
# main.tf
resource "aws_vpc" "main" {
cidr_block = var.vpc_cidr
tags = {
Name = "${var.project}-vpc"
Environment = var.environment
}
}
# variables.tf
variable "vpc_cidr" {
description = "CIDR block for VPC"
type = string
default = "10.0.0.0/16"
}
工作流
# Initialize
terraform init
# Plan changes
terraform plan -out=tfplan
# Apply changes
terraform apply tfplan
# Destroy resources
terraform destroy
最佳实践
- 使用远程状态:将状态存储在 S3/GCS 中
- 锁定状态:防止并发修改
- 使用模块:构建可复用的基础设施组件
- 环境隔离:为每个环境单独设置状态
- 密钥管理:绝不将密钥存储在代码中
状态管理
terraform {
backend "s3" {
bucket = "terraform-state-bucket"
key = "prod/terraform.tfstate"
region = "us-east-1"
dynamodb_table = "terraform-locks"
encrypt = true
}
}
ECS/Fargate
# Task Definition
resource "aws_ecs_task_definition" "app" {
family = "${var.project}-task"
requires_compatibilities = ["FARGATE"]
network_mode = "awsvpc"
cpu = 256
memory = 512
execution_role_arn = aws_iam_role.ecs_execution.arn
container_definitions = jsonencode([{
name = "app"
image = "${aws_ecr_repository.app.repository_url}:latest"
portMappings = [{
containerPort = 8080
protocol = "tcp"
}]
logConfiguration = {
logDriver = "awslogs"
options = {
awslogs-group = aws_cloudwatch_log_group.app.name
awslogs-region = var.aws_region
awslogs-stream-prefix = "app"
}
}
}])
}
# ECS Service
resource "aws_ecs_service" "app" {
name = "${var.project}-service"
cluster = aws_ecs_cluster.main.id
task_definition = aws_ecs_task_definition.app.arn
desired_count = var.app_count
launch_type = "FARGATE"
network_configuration {
subnets = aws_subnet.private[*].id
security_groups = [aws_security_group.app.id]
}
}
S3 存储桶
resource "aws_s3_bucket" "assets" {
bucket = "${var.project}-assets-${var.environment}"
}
resource "aws_s3_bucket_versioning" "assets" {
bucket = aws_s3_bucket.assets.id
versioning_configuration {
status = "Enabled"
}
}
resource "aws_s3_bucket_server_side_encryption_configuration" "assets" {
bucket = aws_s3_bucket.assets.id
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}
评论
支持 Markdown