@@ -2035,4 +2035,76 @@ describe('#compileIamRole', () => {
2035
2035
'*limited*' ,
2036
2036
] ) ;
2037
2037
} ) ;
2038
+
2039
+ it ( 'should give sagemaker batch transform permissions' , ( ) => {
2040
+ const genStateMachine = id => ( {
2041
+ id,
2042
+ definition : {
2043
+ StartAt : 'A' ,
2044
+ States : {
2045
+ A : {
2046
+ Type : 'Task' ,
2047
+ Resource : 'arn:aws:states:::sagemaker:createTransformJob.sync' ,
2048
+ Parameters : {
2049
+ ModelName : 'a-model-name' ,
2050
+ TransformInput : {
2051
+ CompressionType : 'None' ,
2052
+ ContentType : 'text/csv' ,
2053
+ DataSource : {
2054
+ S3DataSource : {
2055
+ S3DataType : 'S3Prefix' ,
2056
+ S3Uri : 's3://your-bucket' ,
2057
+ } ,
2058
+ } ,
2059
+ } ,
2060
+ TransformOutput : {
2061
+ S3OutputPath : 's3://your-bucket/TrasformOutputPath' ,
2062
+ } ,
2063
+ TransformResources : {
2064
+ InstanceCount : 1 ,
2065
+ InstanceType : 'ml.m4.xlarge' ,
2066
+ } ,
2067
+ TransformJobName : 'your-job-name' ,
2068
+ } ,
2069
+ End : true ,
2070
+ } ,
2071
+ } ,
2072
+ } ,
2073
+ } ) ;
2074
+
2075
+ serverless . service . stepFunctions = {
2076
+ stateMachines : {
2077
+ myStateMachine1 : genStateMachine ( 'StateMachine1' ) ,
2078
+ } ,
2079
+ } ;
2080
+
2081
+ serverlessStepFunctions . compileIamRole ( ) ;
2082
+ const statements = serverlessStepFunctions . serverless . service
2083
+ . provider . compiledCloudFormationTemplate . Resources . StateMachine1Role
2084
+ . Properties . Policies [ 0 ] . PolicyDocument . Statement ;
2085
+
2086
+ const transformPermissions = statements . filter ( s => _ . isEqual ( s . Action , [ 'sagemaker:CreateTransformJob' , 'sagemaker:DescribeTransformJob' , 'sagemaker:StopTransformJob' ] ) ) ;
2087
+ expect ( transformPermissions ) . to . have . lengthOf ( 1 ) ;
2088
+ expect ( transformPermissions [ 0 ] . Resource ) . to . deep . eq ( [
2089
+ {
2090
+ 'Fn::Sub' : [
2091
+ 'arn:aws:sagemaker:${AWS::Region}:${AWS::AccountId}:transform-job/your-job-name*' ,
2092
+ { } ,
2093
+ ] ,
2094
+ } ,
2095
+ ] ) ;
2096
+
2097
+ const listTagPermission = statements . filter ( s => _ . isEqual ( s . Action , [ 'sagemaker:ListTags' ] ) ) ;
2098
+ expect ( listTagPermission ) . to . have . lengthOf ( 1 ) ;
2099
+ expect ( listTagPermission [ 0 ] . Resource ) . to . equal ( '*' ) ;
2100
+
2101
+ const eventPermissions = statements . filter ( s => _ . isEqual ( s . Action , [ 'events:PutTargets' , 'events:PutRule' , 'events:DescribeRule' ] ) ) ;
2102
+ expect ( eventPermissions ) . to . has . lengthOf ( 1 ) ;
2103
+ expect ( eventPermissions [ 0 ] . Resource ) . to . deep . eq ( [ {
2104
+ 'Fn::Sub' : [
2105
+ 'arn:aws:events:${AWS::Region}:${AWS::AccountId}:rule/StepFunctionsGetEventsForSageMakerTransformJobsRule' ,
2106
+ { } ,
2107
+ ] ,
2108
+ } ] ) ;
2109
+ } ) ;
2038
2110
} ) ;
0 commit comments