@aws/ml-container-creator 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/LICENSE +202 -0
  2. package/LICENSE-THIRD-PARTY +68620 -0
  3. package/NOTICE +2 -0
  4. package/README.md +106 -0
  5. package/bin/cli.js +365 -0
  6. package/config/defaults.json +32 -0
  7. package/config/presets/transformers-djl.json +26 -0
  8. package/config/presets/transformers-gpu.json +24 -0
  9. package/config/presets/transformers-lmi.json +27 -0
  10. package/package.json +129 -0
  11. package/servers/README.md +419 -0
  12. package/servers/base-image-picker/catalogs/model-servers.json +1191 -0
  13. package/servers/base-image-picker/catalogs/python-slim.json +38 -0
  14. package/servers/base-image-picker/catalogs/triton-backends.json +51 -0
  15. package/servers/base-image-picker/catalogs/triton.json +38 -0
  16. package/servers/base-image-picker/index.js +495 -0
  17. package/servers/base-image-picker/manifest.json +17 -0
  18. package/servers/base-image-picker/package.json +15 -0
  19. package/servers/hyperpod-cluster-picker/LICENSE +202 -0
  20. package/servers/hyperpod-cluster-picker/index.js +424 -0
  21. package/servers/hyperpod-cluster-picker/manifest.json +14 -0
  22. package/servers/hyperpod-cluster-picker/package.json +17 -0
  23. package/servers/instance-recommender/LICENSE +202 -0
  24. package/servers/instance-recommender/catalogs/instances.json +852 -0
  25. package/servers/instance-recommender/index.js +284 -0
  26. package/servers/instance-recommender/manifest.json +16 -0
  27. package/servers/instance-recommender/package.json +15 -0
  28. package/servers/lib/LICENSE +202 -0
  29. package/servers/lib/bedrock-client.js +160 -0
  30. package/servers/lib/custom-validators.js +46 -0
  31. package/servers/lib/dynamic-resolver.js +36 -0
  32. package/servers/lib/package.json +11 -0
  33. package/servers/lib/schemas/image-catalog.schema.json +185 -0
  34. package/servers/lib/schemas/instances.schema.json +124 -0
  35. package/servers/lib/schemas/manifest.schema.json +64 -0
  36. package/servers/lib/schemas/model-catalog.schema.json +91 -0
  37. package/servers/lib/schemas/regions.schema.json +26 -0
  38. package/servers/lib/schemas/triton-backends.schema.json +51 -0
  39. package/servers/model-picker/catalogs/jumpstart-public.json +66 -0
  40. package/servers/model-picker/catalogs/popular-diffusors.json +88 -0
  41. package/servers/model-picker/catalogs/popular-transformers.json +226 -0
  42. package/servers/model-picker/index.js +1693 -0
  43. package/servers/model-picker/manifest.json +18 -0
  44. package/servers/model-picker/package.json +20 -0
  45. package/servers/region-picker/LICENSE +202 -0
  46. package/servers/region-picker/catalogs/regions.json +263 -0
  47. package/servers/region-picker/index.js +230 -0
  48. package/servers/region-picker/manifest.json +16 -0
  49. package/servers/region-picker/package.json +15 -0
  50. package/src/app.js +1007 -0
  51. package/src/copy-tpl.js +77 -0
  52. package/src/lib/accelerator-validator.js +39 -0
  53. package/src/lib/asset-manager.js +385 -0
  54. package/src/lib/aws-profile-parser.js +181 -0
  55. package/src/lib/bootstrap-command-handler.js +1647 -0
  56. package/src/lib/bootstrap-config.js +238 -0
  57. package/src/lib/ci-register-helpers.js +124 -0
  58. package/src/lib/ci-report-helpers.js +158 -0
  59. package/src/lib/ci-stage-helpers.js +268 -0
  60. package/src/lib/cli-handler.js +529 -0
  61. package/src/lib/comment-generator.js +544 -0
  62. package/src/lib/community-reports-validator.js +91 -0
  63. package/src/lib/config-manager.js +2106 -0
  64. package/src/lib/configuration-exporter.js +204 -0
  65. package/src/lib/configuration-manager.js +695 -0
  66. package/src/lib/configuration-matcher.js +221 -0
  67. package/src/lib/cpu-validator.js +36 -0
  68. package/src/lib/cuda-validator.js +57 -0
  69. package/src/lib/deployment-config-resolver.js +103 -0
  70. package/src/lib/deployment-entry-schema.js +125 -0
  71. package/src/lib/deployment-registry.js +598 -0
  72. package/src/lib/docker-introspection-validator.js +51 -0
  73. package/src/lib/engine-prefix-resolver.js +60 -0
  74. package/src/lib/huggingface-client.js +172 -0
  75. package/src/lib/key-value-parser.js +37 -0
  76. package/src/lib/known-flags-validator.js +200 -0
  77. package/src/lib/manifest-cli.js +280 -0
  78. package/src/lib/mcp-client.js +303 -0
  79. package/src/lib/mcp-command-handler.js +532 -0
  80. package/src/lib/neuron-validator.js +80 -0
  81. package/src/lib/parameter-schema-validator.js +284 -0
  82. package/src/lib/prompt-runner.js +1349 -0
  83. package/src/lib/prompts.js +1138 -0
  84. package/src/lib/registry-command-handler.js +519 -0
  85. package/src/lib/registry-loader.js +198 -0
  86. package/src/lib/rocm-validator.js +80 -0
  87. package/src/lib/schema-validator.js +157 -0
  88. package/src/lib/sensitive-redactor.js +59 -0
  89. package/src/lib/template-engine.js +156 -0
  90. package/src/lib/template-manager.js +341 -0
  91. package/src/lib/validation-engine.js +314 -0
  92. package/src/prompt-adapter.js +63 -0
  93. package/templates/Dockerfile +300 -0
  94. package/templates/IAM_PERMISSIONS.md +84 -0
  95. package/templates/MIGRATION.md +488 -0
  96. package/templates/PROJECT_README.md +439 -0
  97. package/templates/TEMPLATE_SYSTEM.md +243 -0
  98. package/templates/buildspec.yml +64 -0
  99. package/templates/code/chat_template.jinja +1 -0
  100. package/templates/code/flask/gunicorn_config.py +35 -0
  101. package/templates/code/flask/wsgi.py +10 -0
  102. package/templates/code/model_handler.py +387 -0
  103. package/templates/code/serve +300 -0
  104. package/templates/code/serve.py +175 -0
  105. package/templates/code/serving.properties +105 -0
  106. package/templates/code/start_server.py +39 -0
  107. package/templates/code/start_server.sh +39 -0
  108. package/templates/diffusors/Dockerfile +72 -0
  109. package/templates/diffusors/patch_image_api.py +35 -0
  110. package/templates/diffusors/serve +115 -0
  111. package/templates/diffusors/start_server.sh +114 -0
  112. package/templates/do/.gitkeep +1 -0
  113. package/templates/do/README.md +541 -0
  114. package/templates/do/build +83 -0
  115. package/templates/do/ci +681 -0
  116. package/templates/do/clean +811 -0
  117. package/templates/do/config +260 -0
  118. package/templates/do/deploy +1560 -0
  119. package/templates/do/export +306 -0
  120. package/templates/do/logs +319 -0
  121. package/templates/do/manifest +12 -0
  122. package/templates/do/push +119 -0
  123. package/templates/do/register +580 -0
  124. package/templates/do/run +113 -0
  125. package/templates/do/submit +417 -0
  126. package/templates/do/test +1147 -0
  127. package/templates/hyperpod/configmap.yaml +24 -0
  128. package/templates/hyperpod/deployment.yaml +71 -0
  129. package/templates/hyperpod/pvc.yaml +42 -0
  130. package/templates/hyperpod/service.yaml +17 -0
  131. package/templates/nginx-diffusors.conf +74 -0
  132. package/templates/nginx-predictors.conf +47 -0
  133. package/templates/nginx-tensorrt.conf +74 -0
  134. package/templates/requirements.txt +61 -0
  135. package/templates/sample_model/test_inference.py +123 -0
  136. package/templates/sample_model/train_abalone.py +252 -0
  137. package/templates/test/test_endpoint.sh +79 -0
  138. package/templates/test/test_local_image.sh +80 -0
  139. package/templates/test/test_model_handler.py +180 -0
  140. package/templates/triton/Dockerfile +128 -0
  141. package/templates/triton/config.pbtxt +163 -0
  142. package/templates/triton/model.py +130 -0
  143. package/templates/triton/requirements.txt +11 -0
@@ -0,0 +1,119 @@
1
+ #!/bin/bash
2
+ # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ set -e
6
+ set -u
7
+ set -o pipefail
8
+
9
+ # Source configuration
10
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
11
+ source "${SCRIPT_DIR}/config"
12
+
13
+ echo "🚀 Pushing Docker image to Amazon ECR"
14
+ echo " Project: ${PROJECT_NAME}"
15
+ echo " Region: ${AWS_REGION}"
16
+ echo " Repository: ${ECR_REPOSITORY_NAME}"
17
+
18
+ # Validate AWS credentials
19
+ echo "🔍 Validating AWS credentials..."
20
+ if ! aws sts get-caller-identity &> /dev/null; then
21
+ echo "❌ AWS credentials not configured"
22
+ echo ""
23
+ echo "Please configure AWS credentials:"
24
+ echo " • Run: aws configure"
25
+ echo " • Or set environment variables: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY"
26
+ echo " • Or use IAM role (recommended for EC2/ECS)"
27
+ exit 4
28
+ fi
29
+
30
+ # Get AWS account ID
31
+ AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
32
+ echo "✅ AWS credentials validated (Account: ${AWS_ACCOUNT_ID})"
33
+
34
+ # Construct ECR repository URI
35
+ ECR_REPOSITORY="${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${ECR_REPOSITORY_NAME}"
36
+
37
+ # Authenticate with ECR
38
+ echo "🔐 Authenticating with Amazon ECR..."
39
+ if ! aws ecr get-login-password --region "${AWS_REGION}" | \
40
+ docker login --username AWS --password-stdin "${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com"; then
41
+ echo "❌ Failed to authenticate with ECR"
42
+ echo ""
43
+ echo "Possible causes:"
44
+ echo " • IAM permissions missing for ecr:GetAuthorizationToken"
45
+ echo " • Docker daemon not running"
46
+ echo " • Network connectivity issues"
47
+ exit 4
48
+ fi
49
+ echo "✅ ECR authentication successful"
50
+
51
+ # Check ECR repository exists (must be bootstrapped first)
52
+ echo "🔍 Checking ECR repository..."
53
+ if ! aws ecr describe-repositories \
54
+ --repository-names "${ECR_REPOSITORY_NAME}" \
55
+ --region "${AWS_REGION}" &> /dev/null; then
56
+ echo "❌ ECR repository '${ECR_REPOSITORY_NAME}' not found."
57
+ echo ""
58
+ echo "Run 'ml-container-creator bootstrap' to create it."
59
+ exit 4
60
+ fi
61
+ echo "✅ ECR repository exists"
62
+
63
+ # Tag images for ECR
64
+ echo "🏷️ Tagging images for ECR..."
65
+ TIMESTAMP=$(date +%Y%m%d-%H%M%S)
66
+
67
+ # Tag latest
68
+ if ! docker tag "${PROJECT_NAME}:latest" "${ECR_REPOSITORY}:latest"; then
69
+ echo "❌ Failed to tag image"
70
+ echo ""
71
+ echo "Possible causes:"
72
+ echo " • Image ${PROJECT_NAME}:latest not found"
73
+ echo " • Run ./do/build first to build the image"
74
+ exit 5
75
+ fi
76
+
77
+ # Tag with project name and latest
78
+ docker tag "${PROJECT_NAME}:latest" "${ECR_REPOSITORY}:${PROJECT_NAME}-latest"
79
+
80
+ # Tag with timestamp
81
+ docker tag "${PROJECT_NAME}:latest" "${ECR_REPOSITORY}:${PROJECT_NAME}-${TIMESTAMP}"
82
+
83
+ echo "✅ Images tagged for ECR"
84
+
85
+ # Push images to ECR
86
+ echo "📤 Pushing images to ECR..."
87
+ echo " This may take several minutes depending on image size..."
88
+
89
+ if ! docker push "${ECR_REPOSITORY}:latest"; then
90
+ echo "❌ Failed to push image to ECR"
91
+ echo ""
92
+ echo "Possible causes:"
93
+ echo " • IAM permissions missing for ecr:PutImage"
94
+ echo " • Network connectivity issues"
95
+ echo " • ECR repository not accessible"
96
+ exit 4
97
+ fi
98
+
99
+ docker push "${ECR_REPOSITORY}:${PROJECT_NAME}-latest"
100
+ docker push "${ECR_REPOSITORY}:${PROJECT_NAME}-${TIMESTAMP}"
101
+
102
+ # Record ECR image in manifest (non-blocking)
103
+ ./do/manifest add \
104
+ --type ecr-image \
105
+ --id "${ECR_REPOSITORY}:${PROJECT_NAME}-${TIMESTAMP}" \
106
+ --project "${PROJECT_NAME}" \
107
+ --meta "{\"repositoryName\":\"${ECR_REPOSITORY_NAME}\",\"imageTag\":\"${PROJECT_NAME}-${TIMESTAMP}\",\"region\":\"${AWS_REGION}\"}" \
108
+ 2>/dev/null || true
109
+
110
+ echo "✅ Push complete!"
111
+ echo ""
112
+ echo "📦 Pushed image URIs:"
113
+ echo " ${ECR_REPOSITORY}:latest"
114
+ echo " ${ECR_REPOSITORY}:${PROJECT_NAME}-latest"
115
+ echo " ${ECR_REPOSITORY}:${PROJECT_NAME}-${TIMESTAMP}"
116
+ echo ""
117
+ echo "Next steps:"
118
+ echo " • Deploy to SageMaker: ./do/deploy"
119
+ echo " • View in ECR console: https://console.aws.amazon.com/ecr/repositories/${ECR_REPOSITORY_NAME}?region=${AWS_REGION}"