@@ -115,6 +115,8 @@ def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
115
115
116
116
self .check_config ()
117
117
118
+ self .cluster_region = self .config ['Region' ]
119
+
118
120
if self .use_parallel_cluster :
119
121
self .create_vpc ()
120
122
@@ -1096,6 +1098,58 @@ def create_lambdas(self):
1096
1098
def create_parallel_cluster_lambdas (self ):
1097
1099
self .create_callSlurmRestApiLambda ()
1098
1100
1101
+ self .parallel_cluster_lambda_layer = aws_lambda .LayerVersion (self , "ParallelClusterLambdaLayer" ,
1102
+ description = 'ParallelCluster Layer' ,
1103
+ code = aws_lambda .Code .from_bucket (
1104
+ s3 .Bucket .from_bucket_name (self , 'ParallelClusterBucket' , f"{ self .cluster_region } -aws-parallelcluster" ),
1105
+ f"parallelcluster/{ self .config ['slurm' ]['ParallelClusterConfig' ]['Version' ]} /layers/aws-parallelcluster/lambda-layer.zip"
1106
+ ),
1107
+ compatible_architectures = [
1108
+ aws_lambda .Architecture .ARM_64 ,
1109
+ aws_lambda .Architecture .X86_64 ,
1110
+ ],
1111
+ compatible_runtimes = [
1112
+ aws_lambda .Runtime .PYTHON_3_9 ,
1113
+ aws_lambda .Runtime .PYTHON_3_10 ,
1114
+ # aws_lambda.Runtime.PYTHON_3_11, # Doesn't work: No module named 'rpds.rpds'
1115
+ ],
1116
+ )
1117
+
1118
+ createParallelClusterLambdaAsset = s3_assets .Asset (self , "CreateParallelClusterAsset" , path = "resources/lambdas/CreateParallelCluster" )
1119
+ self .create_parallel_cluster_lambda = aws_lambda .Function (
1120
+ self , "CreateParallelClusterLambda" ,
1121
+ function_name = f"{ self .stack_name } -CreateParallelCluster" ,
1122
+ description = "Create ParallelCluster from json string" ,
1123
+ memory_size = 2048 ,
1124
+ runtime = aws_lambda .Runtime .PYTHON_3_9 ,
1125
+ architecture = aws_lambda .Architecture .X86_64 ,
1126
+ timeout = Duration .minutes (15 ),
1127
+ log_retention = logs .RetentionDays .INFINITE ,
1128
+ handler = "CreateParallelCluster.lambda_handler" ,
1129
+ code = aws_lambda .Code .from_bucket (createParallelClusterLambdaAsset .bucket , createParallelClusterLambdaAsset .s3_object_key ),
1130
+ layers = [self .parallel_cluster_lambda_layer ],
1131
+ vpc = self .vpc ,
1132
+ allow_all_outbound = True
1133
+ )
1134
+ self .create_parallel_cluster_lambda .add_to_role_policy (
1135
+ statement = iam .PolicyStatement (
1136
+ effect = iam .Effect .ALLOW ,
1137
+ actions = [
1138
+ 's3:*' ,
1139
+ ],
1140
+ resources = ['*' ]
1141
+ )
1142
+ )
1143
+ self .create_parallel_cluster_lambda .add_to_role_policy (
1144
+ statement = iam .PolicyStatement (
1145
+ effect = iam .Effect .ALLOW ,
1146
+ actions = [
1147
+ '*' ,
1148
+ ],
1149
+ resources = ['*' ]
1150
+ )
1151
+ )
1152
+
1099
1153
def create_callSlurmRestApiLambda (self ):
1100
1154
callSlurmRestApiLambdaAsset = s3_assets .Asset (self , "CallSlurmRestApiLambdaAsset" , path = "resources/lambdas/CallSlurmRestApi" )
1101
1155
self .call_slurm_rest_api_lambda = aws_lambda .Function (
@@ -4143,102 +4197,29 @@ def create_parallel_cluster_config(self):
4143
4197
}
4144
4198
self .parallel_cluster_config ['SharedStorage' ].append (parallel_cluster_storage_dict )
4145
4199
4146
- fh = NamedTemporaryFile ()
4147
- yaml .dump (self .parallel_cluster_config , fh , encoding = 'utf-8' , sort_keys = False )
4148
- self .parallelClusterConfigAsset = s3_assets .Asset (self , "ParallelClusterConfigAsset" , path = fh .name )
4149
- self .parallelClusterConfigAsset .grant_read (self .parallel_cluster_asset_read_policy )
4150
-
4151
- createParallelClusterConfigAsset = s3_assets .Asset (self , "CreateParallelClusterConfigAsset" , path = "resources/lambdas/CreateParallelClusterConfig" )
4152
- self .create_parallel_cluster_config_lambda = aws_lambda .Function (
4153
- self , "CreateParallelClusterConfigLambda" ,
4154
- function_name = f"{ self .stack_name } -CreateParallelClusterConfig" ,
4155
- description = "Create ParallelCluster config file in s3" ,
4156
- memory_size = 128 ,
4157
- runtime = aws_lambda .Runtime .PYTHON_3_8 ,
4158
- architecture = aws_lambda .Architecture .ARM_64 ,
4159
- timeout = Duration .minutes (3 ),
4160
- log_retention = logs .RetentionDays .INFINITE ,
4161
- handler = "CreateParallelClusterConfig.lambda_handler" ,
4162
- code = aws_lambda .Code .from_bucket (createParallelClusterConfigAsset .bucket , createParallelClusterConfigAsset .s3_object_key ),
4163
- vpc = self .vpc ,
4164
- allow_all_outbound = True
4165
- )
4166
- self .create_parallel_cluster_config_lambda .add_to_role_policy (
4167
- statement = iam .PolicyStatement (
4168
- effect = iam .Effect .ALLOW ,
4169
- actions = [
4170
- 's3:*' ,
4171
- ],
4172
- resources = ['*' ]
4173
- )
4174
- )
4175
- # This is created as a custom resource so that resources get resolved in the config string before it gets passed to the lambda.
4176
- self .parallel_cluster_config_s3_url = CustomResource (
4177
- self , "ParallelClusterConfigS3Object" ,
4178
- service_token = self .create_parallel_cluster_config_lambda .function_arn ,
4179
- properties = {
4180
- 'ParallelClusterConfigYaml' : yaml .dump (self .parallel_cluster_config , sort_keys = False ),
4181
- 'S3Bucket' : self .parallelClusterConfigAsset .s3_bucket_name ,
4182
- 'S3Key' : self .parallelClusterConfigAsset .s3_object_key ,
4183
- 'S3ObjectUrl' : self .parallelClusterConfigAsset .s3_object_url
4184
- }
4185
- ).get_att_string ('S3ObjectUrl' )
4200
+ self .parallel_cluster_config_json_s3_key = f"{ self .assets_base_key } /ParallelClusterConfig.json"
4201
+ self .parallel_cluster_config_yaml_s3_key = f"{ self .assets_base_key } /ParallelClusterConfig.yml"
4186
4202
4187
- self .parallel_cluster_lambda_layer = aws_lambda .LayerVersion (self , "ParallelClusterLambdaLayer" ,
4188
- description = 'ParallelCluster Layer' ,
4189
- code = aws_lambda .Code .from_bucket (
4190
- s3 .Bucket .from_bucket_name (self , 'ParallelClusterBucket' , f"{ self .config ['Region' ]} -aws-parallelcluster" ),
4191
- f"parallelcluster/{ self .config ['slurm' ]['ParallelClusterConfig' ]['Version' ]} /layers/aws-parallelcluster/lambda-layer.zip"
4192
- ),
4193
- compatible_architectures = [
4194
- aws_lambda .Architecture .ARM_64 ,
4195
- aws_lambda .Architecture .X86_64 ,
4196
- ],
4197
- compatible_runtimes = [
4198
- aws_lambda .Runtime .PYTHON_3_8 ,
4199
- aws_lambda .Runtime .PYTHON_3_9 ,
4200
- # aws_lambda.Runtime.PYTHON_3_10,
4201
- # aws_lambda.Runtime.PYTHON_3_11,
4202
- ],
4203
- )
4204
- createParallelClusterAsset = s3_assets .Asset (self , "CreateParallelClusterAsset" , path = "resources/lambdas/CreateParallelCluster" )
4205
- self .create_parallel_cluster_lambda = aws_lambda .Function (
4206
- self , "CreateParallelClusterLambda" ,
4207
- function_name = f"{ self .stack_name } -CreateParallelCluster" ,
4208
- description = "Create ParallelCluster from config file in s3" ,
4209
- memory_size = 2048 ,
4210
- runtime = aws_lambda .Runtime .PYTHON_3_9 ,
4211
- architecture = aws_lambda .Architecture .X86_64 ,
4212
- timeout = Duration .minutes (15 ),
4213
- log_retention = logs .RetentionDays .INFINITE ,
4214
- handler = "CreateParallelCluster.lambda_handler" ,
4215
- code = aws_lambda .Code .from_bucket (createParallelClusterAsset .bucket , createParallelClusterAsset .s3_object_key ),
4216
- layers = [self .parallel_cluster_lambda_layer ],
4217
- vpc = self .vpc ,
4218
- allow_all_outbound = True
4219
- )
4220
- self .create_parallel_cluster_lambda .add_to_role_policy (
4221
- statement = iam .PolicyStatement (
4222
- effect = iam .Effect .ALLOW ,
4223
- actions = [
4224
- '*' ,
4225
- ],
4226
- resources = ['*' ]
4227
- )
4228
- )
4229
4203
self .parallel_cluster = CustomResource (
4230
- self , "CreatedParallelCluster " ,
4204
+ self , "ParallelCluster " ,
4231
4205
service_token = self .create_parallel_cluster_lambda .function_arn ,
4232
4206
properties = {
4207
+ 'ParallelClusterConfigJson' : json .dumps (self .parallel_cluster_config , sort_keys = False ),
4208
+ 'ParallelClusterConfigS3Bucket' : self .assets_bucket ,
4209
+ 'ParallelClusterConfigJsonS3Key' : self .parallel_cluster_config_json_s3_key ,
4210
+ 'ParallelClusterConfigYamlS3Key' : self .parallel_cluster_config_yaml_s3_key ,
4233
4211
'Region' : self .config ['Region' ],
4234
4212
'ClusterName' : self .config ['slurm' ]['ClusterName' ],
4235
- 'ParallelClusterConfigJson' : self .parallel_cluster_config ,
4236
- 'ParallelClusterConfigS3Url' : self .parallel_cluster_config_s3_url ,
4237
4213
}
4238
4214
)
4215
+ self .parallel_cluster_config_json_s3_url = self .parallel_cluster .get_att_string ('ConfigJsonS3Url' )
4216
+ self .parallel_cluster_config_yaml_s3_url = self .parallel_cluster .get_att_string ('ConfigYamlS3Url' )
4239
4217
4240
- CfnOutput (self , "ParallelClusterConfigS3Url" ,
4241
- value = self .parallelClusterConfigAsset .s3_object_url
4218
+ CfnOutput (self , "ParallelClusterConfigJsonS3Url" ,
4219
+ value = self .parallel_cluster_config_json_s3_url
4220
+ )
4221
+ CfnOutput (self , "ParallelClusterConfigYamlS3Url" ,
4222
+ value = self .parallel_cluster_config_yaml_s3_url
4242
4223
)
4243
4224
CfnOutput (self , "MungeParameterName" ,
4244
4225
value = self .munge_key_ssm_parameter .parameter_name
0 commit comments