Files
wifi-densepose/terraform/outputs.tf
2025-06-07 11:44:19 +00:00

460 lines
12 KiB
HCL

# WiFi-DensePose Terraform Outputs
# This file defines outputs that can be used by other Terraform configurations or external systems
# VPC Outputs
output "vpc_id" {
description = "ID of the VPC"
value = aws_vpc.main.id
}
output "vpc_cidr_block" {
description = "CIDR block of the VPC"
value = aws_vpc.main.cidr_block
}
output "public_subnet_ids" {
description = "IDs of the public subnets"
value = aws_subnet.public[*].id
}
output "private_subnet_ids" {
description = "IDs of the private subnets"
value = aws_subnet.private[*].id
}
output "internet_gateway_id" {
description = "ID of the Internet Gateway"
value = aws_internet_gateway.main.id
}
output "nat_gateway_ids" {
description = "IDs of the NAT Gateways"
value = aws_nat_gateway.main[*].id
}
# EKS Cluster Outputs
output "cluster_id" {
description = "EKS cluster ID"
value = aws_eks_cluster.main.id
}
output "cluster_arn" {
description = "EKS cluster ARN"
value = aws_eks_cluster.main.arn
}
output "cluster_endpoint" {
description = "Endpoint for EKS control plane"
value = aws_eks_cluster.main.endpoint
}
output "cluster_security_group_id" {
description = "Security group ID attached to the EKS cluster"
value = aws_eks_cluster.main.vpc_config[0].cluster_security_group_id
}
output "cluster_iam_role_name" {
description = "IAM role name associated with EKS cluster"
value = aws_iam_role.eks_cluster.name
}
output "cluster_iam_role_arn" {
description = "IAM role ARN associated with EKS cluster"
value = aws_iam_role.eks_cluster.arn
}
output "cluster_certificate_authority_data" {
description = "Base64 encoded certificate data required to communicate with the cluster"
value = aws_eks_cluster.main.certificate_authority[0].data
}
output "cluster_primary_security_group_id" {
description = "The cluster primary security group ID created by the EKS cluster"
value = aws_eks_cluster.main.vpc_config[0].cluster_security_group_id
}
output "cluster_service_cidr" {
description = "The CIDR block that Kubernetes pod and service IP addresses are assigned from"
value = aws_eks_cluster.main.kubernetes_network_config[0].service_ipv4_cidr
}
# EKS Node Group Outputs
output "node_groups" {
description = "EKS node groups"
value = {
main = {
arn = aws_eks_node_group.main.arn
status = aws_eks_node_group.main.status
capacity_type = aws_eks_node_group.main.capacity_type
instance_types = aws_eks_node_group.main.instance_types
scaling_config = aws_eks_node_group.main.scaling_config
}
}
}
output "node_security_group_id" {
description = "ID of the EKS node shared security group"
value = aws_security_group.eks_nodes.id
}
output "node_iam_role_name" {
description = "IAM role name associated with EKS node group"
value = aws_iam_role.eks_nodes.name
}
output "node_iam_role_arn" {
description = "IAM role ARN associated with EKS node group"
value = aws_iam_role.eks_nodes.arn
}
# Database Outputs
output "db_instance_endpoint" {
description = "RDS instance endpoint"
value = aws_db_instance.main.endpoint
sensitive = true
}
output "db_instance_name" {
description = "RDS instance name"
value = aws_db_instance.main.db_name
}
output "db_instance_username" {
description = "RDS instance root username"
value = aws_db_instance.main.username
sensitive = true
}
output "db_instance_port" {
description = "RDS instance port"
value = aws_db_instance.main.port
}
output "db_subnet_group_id" {
description = "RDS subnet group name"
value = aws_db_subnet_group.main.id
}
output "db_subnet_group_arn" {
description = "RDS subnet group ARN"
value = aws_db_subnet_group.main.arn
}
output "db_instance_resource_id" {
description = "RDS instance resource ID"
value = aws_db_instance.main.resource_id
}
output "db_instance_status" {
description = "RDS instance status"
value = aws_db_instance.main.status
}
output "db_instance_availability_zone" {
description = "RDS instance availability zone"
value = aws_db_instance.main.availability_zone
}
output "db_instance_backup_retention_period" {
description = "RDS instance backup retention period"
value = aws_db_instance.main.backup_retention_period
}
# Redis Outputs
output "redis_cluster_id" {
description = "ElastiCache Redis cluster identifier"
value = aws_elasticache_replication_group.main.id
}
output "redis_primary_endpoint_address" {
description = "Address of the endpoint for the primary node in the replication group"
value = aws_elasticache_replication_group.main.primary_endpoint_address
sensitive = true
}
output "redis_reader_endpoint_address" {
description = "Address of the endpoint for the reader node in the replication group"
value = aws_elasticache_replication_group.main.reader_endpoint_address
sensitive = true
}
output "redis_port" {
description = "Redis port"
value = aws_elasticache_replication_group.main.port
}
output "redis_subnet_group_name" {
description = "ElastiCache subnet group name"
value = aws_elasticache_subnet_group.main.name
}
# S3 Outputs
output "s3_bucket_id" {
description = "S3 bucket ID for application data"
value = aws_s3_bucket.app_data.id
}
output "s3_bucket_arn" {
description = "S3 bucket ARN for application data"
value = aws_s3_bucket.app_data.arn
}
output "s3_bucket_domain_name" {
description = "S3 bucket domain name"
value = aws_s3_bucket.app_data.bucket_domain_name
}
output "s3_bucket_regional_domain_name" {
description = "S3 bucket region-specific domain name"
value = aws_s3_bucket.app_data.bucket_regional_domain_name
}
output "alb_logs_bucket_id" {
description = "S3 bucket ID for ALB logs"
value = aws_s3_bucket.alb_logs.id
}
output "alb_logs_bucket_arn" {
description = "S3 bucket ARN for ALB logs"
value = aws_s3_bucket.alb_logs.arn
}
# Load Balancer Outputs
output "alb_id" {
description = "Application Load Balancer ID"
value = aws_lb.main.id
}
output "alb_arn" {
description = "Application Load Balancer ARN"
value = aws_lb.main.arn
}
output "alb_dns_name" {
description = "Application Load Balancer DNS name"
value = aws_lb.main.dns_name
}
output "alb_zone_id" {
description = "Application Load Balancer zone ID"
value = aws_lb.main.zone_id
}
output "alb_security_group_id" {
description = "Application Load Balancer security group ID"
value = aws_security_group.alb.id
}
# Security Group Outputs
output "security_groups" {
description = "Security groups created"
value = {
eks_cluster = aws_security_group.eks_cluster.id
eks_nodes = aws_security_group.eks_nodes.id
rds = aws_security_group.rds.id
redis = aws_security_group.redis.id
alb = aws_security_group.alb.id
}
}
# KMS Key Outputs
output "kms_key_ids" {
description = "KMS Key IDs"
value = {
eks = aws_kms_key.eks.id
rds = aws_kms_key.rds.id
s3 = aws_kms_key.s3.id
cloudwatch = aws_kms_key.cloudwatch.id
secrets = aws_kms_key.secrets.id
}
}
output "kms_key_arns" {
description = "KMS Key ARNs"
value = {
eks = aws_kms_key.eks.arn
rds = aws_kms_key.rds.arn
s3 = aws_kms_key.s3.arn
cloudwatch = aws_kms_key.cloudwatch.arn
secrets = aws_kms_key.secrets.arn
}
}
# Secrets Manager Outputs
output "secrets_manager_secret_id" {
description = "Secrets Manager secret ID"
value = aws_secretsmanager_secret.app_secrets.id
}
output "secrets_manager_secret_arn" {
description = "Secrets Manager secret ARN"
value = aws_secretsmanager_secret.app_secrets.arn
}
# CloudWatch Outputs
output "cloudwatch_log_group_name" {
description = "CloudWatch log group name for EKS cluster"
value = aws_cloudwatch_log_group.eks_cluster.name
}
output "cloudwatch_log_group_arn" {
description = "CloudWatch log group ARN for EKS cluster"
value = aws_cloudwatch_log_group.eks_cluster.arn
}
# IAM Role Outputs
output "iam_roles" {
description = "IAM roles created"
value = {
eks_cluster = aws_iam_role.eks_cluster.arn
eks_nodes = aws_iam_role.eks_nodes.arn
rds_monitoring = aws_iam_role.rds_monitoring.arn
}
}
# Region and Account Information
output "aws_region" {
description = "AWS region"
value = var.aws_region
}
output "aws_account_id" {
description = "AWS account ID"
value = data.aws_caller_identity.current.account_id
}
# Kubernetes Configuration
output "kubeconfig" {
description = "kubectl config as generated by the module"
value = {
apiVersion = "v1"
kind = "Config"
current_context = "terraform"
contexts = [{
name = "terraform"
context = {
cluster = "terraform"
user = "terraform"
}
}]
clusters = [{
name = "terraform"
cluster = {
certificate_authority_data = aws_eks_cluster.main.certificate_authority[0].data
server = aws_eks_cluster.main.endpoint
}
}]
users = [{
name = "terraform"
user = {
exec = {
apiVersion = "client.authentication.k8s.io/v1beta1"
command = "aws"
args = [
"eks",
"get-token",
"--cluster-name",
aws_eks_cluster.main.name,
"--region",
var.aws_region,
]
}
}
}]
}
sensitive = true
}
# Connection Strings (Sensitive)
output "database_url" {
description = "Database connection URL"
value = "postgresql://${aws_db_instance.main.username}:${random_password.db_password.result}@${aws_db_instance.main.endpoint}/${aws_db_instance.main.db_name}"
sensitive = true
}
output "redis_url" {
description = "Redis connection URL"
value = "redis://:${random_password.redis_auth_token.result}@${aws_elasticache_replication_group.main.primary_endpoint_address}:6379"
sensitive = true
}
# Application Configuration
output "app_config" {
description = "Application configuration values"
value = {
environment = var.environment
region = var.aws_region
vpc_id = aws_vpc.main.id
cluster_name = aws_eks_cluster.main.name
namespace = "wifi-densepose"
}
}
# Monitoring Configuration
output "monitoring_config" {
description = "Monitoring configuration"
value = {
log_group_name = aws_cloudwatch_log_group.eks_cluster.name
log_retention = var.log_retention_days
kms_key_id = aws_kms_key.cloudwatch.id
}
}
# Network Configuration Summary
output "network_config" {
description = "Network configuration summary"
value = {
vpc_id = aws_vpc.main.id
vpc_cidr = aws_vpc.main.cidr_block
public_subnets = aws_subnet.public[*].id
private_subnets = aws_subnet.private[*].id
availability_zones = aws_subnet.public[*].availability_zone
nat_gateways = aws_nat_gateway.main[*].id
internet_gateway = aws_internet_gateway.main.id
}
}
# Security Configuration Summary
output "security_config" {
description = "Security configuration summary"
value = {
kms_keys = {
eks = aws_kms_key.eks.arn
rds = aws_kms_key.rds.arn
s3 = aws_kms_key.s3.arn
cloudwatch = aws_kms_key.cloudwatch.arn
secrets = aws_kms_key.secrets.arn
}
security_groups = {
eks_cluster = aws_security_group.eks_cluster.id
eks_nodes = aws_security_group.eks_nodes.id
rds = aws_security_group.rds.id
redis = aws_security_group.redis.id
alb = aws_security_group.alb.id
}
secrets_manager = aws_secretsmanager_secret.app_secrets.arn
}
}
# Resource Tags
output "common_tags" {
description = "Common tags applied to resources"
value = {
Project = var.project_name
Environment = var.environment
ManagedBy = "Terraform"
Owner = var.owner
}
}
# Deployment Information
output "deployment_info" {
description = "Deployment information"
value = {
timestamp = timestamp()
terraform_version = ">=1.0"
aws_region = var.aws_region
environment = var.environment
project_name = var.project_name
}
}