Add complete ECS Fargate infrastructure for Clawdbot Discord bot deployment on AWS. ## Infrastructure (Terraform) - **VPC**: 100.64.0.0/16 with DNS support - **Public Subnets**: 2 subnets in different AZs - **ECR Repository**: clawdbot/bot with lifecycle policy - **IAM Roles**: Task Role (DynamoDB+S3) + Execution Role - **ECS Resources**: Fargate (256 CPU, 2048 MB memory) - **Security Group**: Outbound only - **CloudWatch**: Log group with 7-day retention ## Security Improvements - Discord Bot Token → AWS Secrets Manager - IAM policy with least privilege principle - No plaintext secrets in code ## Code Quality - Fix all 22 lint errors - Add *.d.ts to oxlint ignore patterns - Fix Dockerfile .buildstamp for Linux compatibility Closes #2049 Co-Authored-By: Claude <noreply@anthropic.com>
37 lines
752 B
HCL
37 lines
752 B
HCL
/**
|
|
* Amazon ECR Repository for Clawdbot Container Images
|
|
*/
|
|
|
|
resource "aws_ecr_repository" "clawdbot" {
|
|
name = "${var.project_name}/bot"
|
|
image_tag_mutability = "MUTABLE"
|
|
|
|
image_scanning_configuration {
|
|
scan_on_push = true
|
|
}
|
|
|
|
tags = {
|
|
Name = "${var.project_name}-ecr"
|
|
}
|
|
}
|
|
|
|
# ECR Lifecycle Policy (keep last 10 images)
|
|
resource "aws_ecr_lifecycle_policy" "clawdbot" {
|
|
repository = aws_ecr_repository.clawdbot.name
|
|
|
|
policy = jsonencode({
|
|
rules = [{
|
|
rulePriority = 1
|
|
description = "Keep last 10 images"
|
|
selection = {
|
|
tagStatus = "any"
|
|
countType = "imageCountMoreThan"
|
|
countNumber = 10
|
|
}
|
|
action = {
|
|
type = "expire"
|
|
}
|
|
}]
|
|
})
|
|
}
|