1
0
mirror of synced 2026-05-22 22:53:35 +00:00
Files
Tesfagabir Meharizghi 83b72e1dda Add Terraform Infrastructure-as-Code (IaC) patterns for AgentCore deployment (#654)
* feat: Add Terraform basic-runtime pattern

* Modified the Terraform basic-runtime with test script, README, default region

* feat: Add Terraform mcp-server-runtime pattern

* feat: Add Terraform multi-agent-runtime pattern

* feat: Add Terraform end-to-end-weather-agent runtime pattern

* Added Terraform main README

* Fixed basic runtime test script

* docs: add Terraform support to IaC README

* Replaced resources to intuitive names, removed hardcoded values, cleaned README

* Enhanced Terraform READMEs

* Removed unused imports

---------

Co-authored-by: Tesfagabir Meharizghi <mehariz@amazon.com>
2025-11-24 08:38:56 -05:00

91 lines
2.7 KiB
Terraform

# ============================================================================
# CodeBuild Project - Build and Push Docker Image
# ============================================================================
resource "aws_codebuild_project" "agent_image" {
name = "${var.stack_name}-basic-agent-build"
description = "Build basic agent Docker image for ${var.stack_name}"
service_role = aws_iam_role.image_build.arn
build_timeout = 60
artifacts {
type = "NO_ARTIFACTS"
}
environment {
compute_type = "BUILD_GENERAL1_LARGE"
image = "aws/codebuild/amazonlinux2-aarch64-standard:3.0"
type = "ARM_CONTAINER"
privileged_mode = true
image_pull_credentials_type = "CODEBUILD"
environment_variable {
name = "AWS_DEFAULT_REGION"
value = data.aws_region.current.id
}
environment_variable {
name = "AWS_ACCOUNT_ID"
value = data.aws_caller_identity.current.id
}
environment_variable {
name = "IMAGE_REPO_NAME"
value = aws_ecr_repository.agent_ecr.name
}
environment_variable {
name = "IMAGE_TAG"
value = var.image_tag
}
environment_variable {
name = "STACK_NAME"
value = var.stack_name
}
}
source {
type = "S3"
location = "${aws_s3_bucket.agent_source.id}/${aws_s3_object.agent_source.key}"
buildspec = file("${path.module}/buildspec.yml")
}
logs_config {
cloudwatch_logs {
group_name = "/aws/codebuild/${var.stack_name}-basic-agent-build"
}
}
tags = {
Name = "${var.stack_name}-basic-build"
Module = "CodeBuild"
}
}
# ============================================================================
# Trigger CodeBuild - Build Image Before Creating Runtime
# ============================================================================
resource "null_resource" "trigger_build" {
triggers = {
build_project = aws_codebuild_project.agent_image.id
image_tag = var.image_tag
# Trigger rebuild if ECR repository changes
ecr_repository = aws_ecr_repository.agent_ecr.id
# Trigger rebuild when source code changes (MD5 hash)
source_code_md5 = data.archive_file.agent_source.output_md5
}
provisioner "local-exec" {
command = "${path.module}/scripts/build-image.sh \"${aws_codebuild_project.agent_image.name}\" \"${data.aws_region.current.id}\" \"${aws_ecr_repository.agent_ecr.name}\" \"${var.image_tag}\" \"${aws_ecr_repository.agent_ecr.repository_url}\""
}
depends_on = [
aws_codebuild_project.agent_image,
aws_ecr_repository.agent_ecr,
aws_iam_role_policy.image_build,
aws_s3_object.agent_source
]
}