aws-hpc/
├── README.md # Project overview
├── VERSIONING.md # Versioning strategy
├── PROJECT_STRUCTURE.md # This file
├── CONTRIBUTING.md # Contribution guidelines
├── LICENSE # MIT License
├──.gitignore
├── Makefile # Build automation
│
├── pkg/ # Platform code (v1.0.0)
│ ├── version.go # Platform version
│ ├── aws/ # AWS service clients
│ │ ├── batch.go # AWS Batch management
│ │ ├── ec2.go # EC2 instances
│ │ ├── ecr.go # Container registry
│ │ ├── efs.go # Elastic File System
│ │ ├── s3.go # S3 storage
│ │ └── vpc.go # Networking
│ ├── config/ # Configuration management
│ │ ├── application.go # Application spec loader
│ │ ├── environment.go # Environment config
│ │ └── state.go # State management
│ ├── container/ # Container build system
│ │ ├── builder.go # Multi-arch builds
│ │ ├── base.go # Base image management
│ │ ├── layer.go # Layer caching
│ │ └── registry.go # ECR operations
│ ├── job/ # Job management
│ │ ├── scheduler.go # Job scheduling
│ │ ├── queue.go # Priority queues
│ │ ├── monitor.go # Job monitoring
│ │ └── array.go # Array jobs
│ ├── cost/ # Cost management
│ │ ├── calculator.go # Cost estimation
│ │ ├── optimizer.go # Cost optimization
│ │ └── tracker.go # Usage tracking
│ └── license/ # License management
│ ├── flexlm.go # FlexLM integration
│ ├── rlm.go # RLM integration
│ └── tracker.go # License usage tracking
│
├── applications/ # Application plugins
│ ├── _template/ # Template for new apps
│ │ ├── app.yaml # Application specification template
│ │ ├── containers/ # Container definitions
│ │ ├── scripts/ # Runtime scripts
│ │ ├── configs/ # Configuration templates
│ │ └── environments/ # Environment configs
│ │
│ ├── geos-chem/ # GEOS-Chem application
│ │ ├── app.yaml # Application specification
│ │ ├── README.md # Application-specific docs
│ │ ├── CHANGELOG.md # Version history
│ │ ├── containers/
│ │ │ ├── Dockerfile.template
│ │ │ ├── classic/
│ │ │ │ ├── entrypoint.sh
│ │ │ │ └── config-generator.py
│ │ │ └── gchp/
│ │ │ └── entrypoint.sh
│ │ ├── scripts/
│ │ │ ├── preprocess.sh
│ │ │ └── postprocess.sh
│ │ ├── configs/
│ │ │ └── templates/
│ │ │ ├── geoschem_config.yml
│ │ │ ├── HEMCO_Config.rc
│ │ │ └── HISTORY.rc
│ │ └── environments/
│ │ ├── benchmark.yaml
│ │ ├── production.yaml
│ │ └── transport.yaml
│ │
│ ├── gaussian/ # Gaussian (planned)
│ │ └── app.yaml
│ │
│ └── wrf/ # WRF (planned)
│ └── app.yaml
│
├── base-images/ # HPC base container images
│ ├── README.md # Base image documentation
│ ├── build.sh # Build script for all bases
│ ├── amd/
│ │ ├── Dockerfile.zen4 # AMD EPYC Genoa
│ │ ├── Dockerfile.zen3 # AMD EPYC Milan
│ │ └── Dockerfile.zen2 # AMD EPYC Rome
│ ├── intel/
│ │ ├── Dockerfile.spr # Sapphire Rapids
│ │ ├── Dockerfile.icl # Ice Lake
│ │ └── Dockerfile.clk # Cascade Lake
│ ├── arm/
│ │ ├── Dockerfile.graviton4 # Neoverse V2
│ │ ├── Dockerfile.graviton3 # Neoverse V1
│ │ └── Dockerfile.graviton2 # Neoverse N1
│ └── gpu/ # GPU-enabled bases (future)
│ ├── Dockerfile.cuda-amd
│ └── Dockerfile.cuda-intel
│
├── infrastructure/ # Infrastructure as Code
│ ├── cdk/ # AWS CDK (TypeScript)
│ │ ├── package.json
│ │ ├── cdk.json
│ │ ├── bin/
│ │ │ └── aws-hpc.ts # CDK app entry point
│ │ └── lib/
│ │ ├── core-stack.ts # VPC, networking
│ │ ├── compute-stack.ts # Batch, EC2
│ │ ├── storage-stack.ts # S3, EFS, FSx
│ │ ├── app-stack.ts # Per-application stacks
│ │ └── license-stack.ts # License servers
│ └── modules/ # Reusable Terraform (future)
│
├── cli/ # Command-line tool
│ ├── main.go # CLI entry point
│ ├── go.mod
│ ├── go.sum
│ └── cmd/
│ ├── root.go # Root command
│ ├── app.go # Application management
│ ├── job.go # Job submission
│ ├── cost.go # Cost analysis
│ ├── environment.go # Environment management
│ └── base.go # Base image management
│
├── web/ # Web interface (future)
│ ├── dashboard/ # Universal dashboard
│ │ ├── package.json
│ │ └── src/
│ └── app-specific/ # Per-app UI extensions
│
├── docs/ # Documentation
│ ├── platform/
│ │ ├── architecture.md # Platform architecture
│ │ ├── adding-applications.md
│ │ ├── containers.md # Container strategy
│ │ ├── versioning.md # Version management
│ │ ├── research-computing-applications.md
│ │ └── api-reference.md # Platform API docs
│ ├── applications/
│ │ ├── geos-chem.md # GEOS-Chem guide
│ │ ├── gaussian.md # Gaussian guide
│ │ └── wrf.md # WRF guide
│ └── guides/
│ ├── quick-start.md
│ ├── deployment.md
│ └── troubleshooting.md
│
├── examples/ # Example configurations
│ ├── job-submissions/
│ │ ├── geos-chem-benchmark.yaml
│ │ └── array-job.yaml
│ └── environments/
│ └── custom-environment.yaml
│
└── scripts/ # Utility scripts
├── init-project.sh # Initialize new application
├── build-bases.sh # Build all base images
├── deploy-app.sh # Deploy application
└── test-app.sh # Test application
- Platform (
pkg/): Stable, reusable AWS infrastructure - Applications (
applications/): Self-contained, pluggable apps - Base Images (
base-images/): Shared compiler/library layers - Infrastructure (
infrastructure/): Deployment automation
- Platform has its own version (
pkg/v1.0.0) - Each application has its own version (
geos-chem/v0.2.0) - Base images are date-tagged (
hpc-base-amd-zen4:20251018)
Application Container
↓ (FROM)
Base Image (compilers + libraries)
↓ (FROM)
OS Base (Amazon Linux 2023)
Benefits:
- Faster application builds
- Shared library updates propagate easily
- Clear separation of infrastructure vs. application
Each application defines its own requirements in app.yaml:
- Compute architectures
- Math libraries
- Parallelism type (OpenMP/MPI)
- Storage requirements
- License requirements
pkg/ provides stable APIs that applications depend on:
pkg/config.LoadApplication()- Load app.yamlpkg/container.Build()- Build containerspkg/job.Submit()- Submit jobspkg/cost.Estimate()- Estimate costs
Breaking changes require major version bump.
app.yaml- Application specification (required)README.md- Application documentationCHANGELOG.md- Version historyDockerfile.template- Container template with placeholders
Dockerfile.{arch}- e.g.,Dockerfile.zen4,Dockerfile.graviton3- Pattern:
Dockerfile.{generation}
{purpose}.yaml- e.g.,benchmark.yaml,production.yaml- Lowercase, descriptive names
{action}-{target}.sh- e.g.,build-bases.sh,deploy-app.sh- Kebab-case
- Format: YAML
- Schema: See
applications/_template/app.yaml - Required Fields: name, version, platform_version, compute, containers
- Format: YAML
- Purpose: Runtime configuration per use case
- Examples: benchmark, production, debug
- CDK: TypeScript (
*.ts) - Terraform: HCL (
*.tf) - future
- Copy template:
cp -r applications/_template applications/myapp - Edit
applications/myapp/app.yaml - Create Dockerfile template
- Add runtime scripts
- Test build:
aws-hpc app build myapp - Test deployment:
aws-hpc app deploy myapp --env test
cd base-images
./build.sh amd/zen4
./build.sh --all # Build all architectures# Test platform changes
cd pkg && go test ./...
# Test application
cd applications/geos-chem
aws-hpc app validate .
# Test infrastructure
cd infrastructure/cdk
npm testmain- Stable releasesdevelop- Development integrationfeature/*- Feature branchesapp/*- Application-specific work
- Platform:
pkg/v1.0.0 - Applications:
geos-chem/v0.2.0 - Base images:
base-amd-zen4/20251018
Single repository contains:
- Platform code
- All applications
- Base image definitions
- Infrastructure code
- Documentation
Benefits:
- Atomic cross-component changes
- Simplified dependency management
- Unified CI/CD
- Easier for contributors
- Update Dockerfiles
- Build:
./base-images/build.sh --all - Tag with date:
YYYYMMDD - Push to ECR
- Update application
app.yamlreferences
- Update
app.yamlversion - Build containers:
aws-hpc app build geos-chem --all-arch - Run tests:
aws-hpc app test geos-chem - Tag:
git tag geos-chem/v0.2.0 - Update CHANGELOG
- Update
pkg/version.go - Run tests:
go test ./... - Build CLI:
make build - Tag:
git tag pkg/v1.0.0 - Create GitHub release
See CONTRIBUTING.md for contribution guidelines. See docs/platform/adding-applications.md for detailed application development guide.