{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"7.6.26\",\"stackType\":\"function-Lambda\",\"metadata\":{}}",
  "Mappings": {
    "EnvironmentMap": {
      "HlsMediaBucket": {
        "dev": "media-converted.dev.sizzl.com",
        "prod": "media-converted.prod.sizzl.com",
        "stage": "media-converted.stage.sizzl.com"
      },
      "SourceMediaBucket": {
        "dev": "media-storage.dev.sizzl.com",
        "prod": "media-storage.prod.sizzl.com",
        "stage": "media-storage.stage.sizzl.com"
      },
      "MediaconvertEndpoint": {
        "dev": "https://lxlxpswfb.mediaconvert.us-east-1.amazonaws.com",
        "prod": "https://lxlxpswfb.mediaconvert.us-east-1.amazonaws.com",
        "stage": "https://lxlxpswfb.mediaconvert.us-east-1.amazonaws.com"
      },
      "HslCloudfront": {
        "dev": "https://d1upm5c71egu5y.cloudfront.net",
        "stage": "https://d1w3a63my3q1ki.cloudfront.net",
        "prod": "https://d1vt81pafxalk0.cloudfront.net"
      },
      "MediaconvertQueue": {
        "dev": "arn:aws:mediaconvert:us-east-1:478721825699:queues/Default",
        "prod": "arn:aws:mediaconvert:us-east-1:478721825699:queues/Default",
        "stage": "arn:aws:mediaconvert:us-east-1:478721825699:queues/Default"
      }
    }
  },
  "Parameters": {
    "CloudWatchRule": {
      "Type": "String",
      "Default": "NONE",
      "Description": " Schedule Expression"
    },
    "deploymentBucketName": {
      "Type": "String"
    },
    "env": {
      "Type": "String"
    },
    "s3Key": {
      "Type": "String"
    },
    "apiamplifiedchatappGraphQLAPIIdOutput": {
      "Type": "String",
      "Default": "apiamplifiedchatappGraphQLAPIIdOutput"
    },
    "apiamplifiedchatappGraphQLAPIEndpointOutput": {
      "Type": "String",
      "Default": "apiamplifiedchatappGraphQLAPIEndpointOutput"
    },
    "apiamplifiedchatappGraphQLAPIKeyOutput": {
      "Type": "String",
      "Default": "apiamplifiedchatappGraphQLAPIKeyOutput"
    },
    "apiGraphQLAPIIdOutput": {
      "Type": "String"
    },
    "apiGraphQLAPIEndpointOutput": {
      "Type": "String"
    },
    "apiGraphQLAPIKeyOutput": {
      "Type": "String"
    },
    "apiAppName": {
      "Type": "String"
    }
  },
  "Conditions": {
    "ShouldNotCreateEnvResources": {
      "Fn::Equals": [
        {
          "Ref": "env"
        },
        "NONE"
      ]
    }
  },
  "Resources": {
    "LambdaFunction": {
      "Type": "AWS::Lambda::Function",
      "Metadata": {
        "aws:asset:path": "./src",
        "aws:asset:property": "Code"
      },
      "Properties": {
        "Code": {
          "S3Bucket": {
            "Ref": "deploymentBucketName"
          },
          "S3Key": {
            "Ref": "s3Key"
          }
        },
        "Handler": "index.handler",
        "FunctionName": {
          "Fn::If": [
            "ShouldNotCreateEnvResources",
            "videoConvertService",
            {
              "Fn::Join": [
                "",
                [
                  "videoConvertService",
                  "-",
                  {
                    "Ref": "env"
                  }
                ]
              ]
            }
          ]
        },
        "Environment": {
          "Variables": {
            "ENV": {
              "Ref": "env"
            },
            "REGION": {
              "Ref": "AWS::Region"
            },
            "API_AMPLIFIEDCHATAPP_GRAPHQLAPIIDOUTPUT": {
              "Ref": "apiamplifiedchatappGraphQLAPIIdOutput"
            },
            "API_AMPLIFIEDCHATAPP_GRAPHQLAPIENDPOINTOUTPUT": {
              "Ref": "apiamplifiedchatappGraphQLAPIEndpointOutput"
            },
            "API_AMPLIFIEDCHATAPP_GRAPHQLAPIKEYOUTPUT": {
              "Ref": "apiamplifiedchatappGraphQLAPIKeyOutput"
            },
            "VIDEOTABLE": {
              "Fn::ImportValue": {
                "Fn::Sub": "${apiGraphQLAPIIdOutput}:GetAtt:VideoTable:Name"
              }
            },
            "CONVERTJOBTABLE": {
              "Fn::ImportValue": {
                "Fn::Sub": "${apiGraphQLAPIIdOutput}:GetAtt:ConvertJobTable:Name"
              }
            },
            "LIBRARYTABLE": {
              "Fn::ImportValue": {
                "Fn::Sub": "${apiGraphQLAPIIdOutput}:GetAtt:LibraryTable:Name"
              }
            },
            "GRAPHQLAPIENDPOINTOUTPUT": {
              "Ref": "apiGraphQLAPIEndpointOutput"
            },
            "GRAPHQLAPIKEYOUTPUT": {
              "Ref": "apiGraphQLAPIKeyOutput"
            },
            "MediaConvertJobRole": {
              "Fn::GetAtt": [
                "MediaConvertJobRole",
                "Arn"
              ]
            },
            "HlsMediaBucket": {
              "Fn::FindInMap": [
                "EnvironmentMap",
                "HlsMediaBucket",
                {
                  "Ref": "env"
                }
              ]
            },
            "ConvertVideoBucket": {
              "Fn::Sub": [
                "s3://${HlsMediaBucket}-${account}",
                {
                  "account": {
                    "Ref": "AWS::AccountId"
                  },
                  "HlsMediaBucket": {
                    "Fn::FindInMap": [
                      "EnvironmentMap",
                      "HlsMediaBucket",
                      {
                        "Ref": "env"
                      }
                    ]
                  }
                }
              ]
            },
            "SourceMediaBucket": {
              "Fn::FindInMap": [
                "EnvironmentMap",
                "SourceMediaBucket",
                {
                  "Ref": "env"
                }
              ]
            },
            "HslCloudfront": {
              "Fn::FindInMap": [
                "EnvironmentMap",
                "HslCloudfront",
                {
                  "Ref": "env"
                }
              ]
            },
            "MediaconvertEndpoint": {
              "Fn::FindInMap": [
                "EnvironmentMap",
                "MediaconvertEndpoint",
                {
                  "Ref": "env"
                }
              ]
            },
            "MediaconvertQueue": {
              "Fn::FindInMap": [
                "EnvironmentMap",
                "MediaconvertQueue",
                {
                  "Ref": "env"
                }
              ]
            }
          }
        },
        "Role": {
          "Fn::GetAtt": [
            "LambdaExecutionRole",
            "Arn"
          ]
        },
        "Runtime": "nodejs14.x",
        "Layers": [],
        "Timeout": 25
      }
    },
    "LambdaExecutionRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "RoleName": {
          "Fn::If": [
            "ShouldNotCreateEnvResources",
            "amplifiedchatappLambdaRoled6d4e084",
            {
              "Fn::Join": [
                "",
                [
                  "amplifiedchatappLambdaRoled6d4e084",
                  "-",
                  {
                    "Ref": "env"
                  }
                ]
              ]
            }
          ]
        },
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Principal": {
                "Service": [
                  "lambda.amazonaws.com"
                ]
              },
              "Action": [
                "sts:AssumeRole"
              ]
            }
          ]
        }
      }
    },
    "lambdaexecutionpolicy": {
      "DependsOn": [
        "LambdaExecutionRole"
      ],
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyName": "lambda-execution-policy",
        "Roles": [
          {
            "Ref": "LambdaExecutionRole"
          }
        ],
        "PolicyDocument": {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
              ],
              "Resource": {
                "Fn::Sub": [
                  "arn:aws:logs:${region}:${account}:log-group:/aws/lambda/${lambda}:log-stream:*",
                  {
                    "region": {
                      "Ref": "AWS::Region"
                    },
                    "account": {
                      "Ref": "AWS::AccountId"
                    },
                    "lambda": {
                      "Ref": "LambdaFunction"
                    }
                  }
                ]
              }
            }
          ]
        }
      }
    },
    "LambdaTriggerPolicyS3MediaConvert": {
      "DependsOn": [
        "LambdaExecutionRole"
      ],
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyName": "amplify-lambda-execution-policy-S3-MediaConvert",
        "Roles": [
          {
            "Ref": "LambdaExecutionRole"
          }
        ],
        "PolicyDocument": {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Action": [
                "s3:GetObject",
                "s3:ListBucket",
                "iam:PassRole",
                "mediaconvert:CreateJob",
                "mediaconvert:GetJob",
                "mediaconvert:CreateJobTemplate",
                "mediaconvert:ListJobs"
              ],
              "Resource": [
                {
                  "Fn::Sub": [
                    "arn:aws:s3:::${HlsMediaBucket}-${account}/*",
                    {
                      "account": {
                        "Ref": "AWS::AccountId"
                      },
                      "HlsMediaBucket": {
                        "Fn::FindInMap": [
                          "EnvironmentMap",
                          "HlsMediaBucket",
                          {
                            "Ref": "env"
                          }
                        ]
                      }
                    }
                  ]
                },
                {
                  "Fn::Sub": [
                    "arn:aws:s3:::${HlsMediaBucket}-${account}",
                    {
                      "account": {
                        "Ref": "AWS::AccountId"
                      },
                      "HlsMediaBucket": {
                        "Fn::FindInMap": [
                          "EnvironmentMap",
                          "HlsMediaBucket",
                          {
                            "Ref": "env"
                          }
                        ]
                      }
                    }
                  ]
                },
                {
                  "Fn::Sub": [
                    "arn:aws:s3:::${SourceMediaBucket}-${account}/*",
                    {
                      "account": {
                        "Ref": "AWS::AccountId"
                      },
                      "SourceMediaBucket": {
                        "Fn::FindInMap": [
                          "EnvironmentMap",
                          "SourceMediaBucket",
                          {
                            "Ref": "env"
                          }
                        ]
                      }
                    }
                  ]
                },
                {
                  "Fn::Sub": [
                    "arn:aws:mediaconvert:*:${account}:jobTemplates/*",
                    {
                      "account": {
                        "Ref": "AWS::AccountId"
                      }
                    }
                  ]
                },
                {
                  "Fn::Sub": [
                    "arn:aws:mediaconvert:*:${account}:queues/*",
                    {
                      "account": {
                        "Ref": "AWS::AccountId"
                      }
                    }
                  ]
                },
                {
                  "Fn::Sub": [
                    "arn:aws:mediaconvert:*:${account}:jobs/*",
                    {
                      "account": {
                        "Ref": "AWS::AccountId"
                      }
                    }
                  ]
                },
                {
                  "Fn::GetAtt": [
                    "MediaConvertJobRole",
                    "Arn"
                  ]
                }
              ]
            }
          ]
        }
      }
    },
    "MediaConvertJobRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "RoleName": {
          "Fn::Sub": [
            "${apiAppName}-MediaConvertJobRole-${env}",
            {
              "apiAppName": {
                "Ref": "apiAppName"
              },
              "env": {
                "Ref": "env"
              }
            }
          ]
        },
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Principal": {
                "Service": [
                  "mediaconvert.amazonaws.com",
                  "mediaconvert.us-east-1.amazonaws.com",
                  "mediaconvert.ap-northeast-1.amazonaws.com",
                  "mediaconvert.ap-southeast-1.amazonaws.com",
                  "mediaconvert.ap-southeast-2.amazonaws.com",
                  "mediaconvert.eu-central-1.amazonaws.com",
                  "mediaconvert.eu-west-1.amazonaws.com",
                  "mediaconvert.us-east-1.amazonaws.com",
                  "mediaconvert.us-west-1.amazonaws.com",
                  "mediaconvert.us-west-2.amazonaws.com"
                ]
              },
              "Action": [
                "sts:AssumeRole"
              ]
            }
          ]
        },
        "Policies": [
          {
            "PolicyName": {
              "Fn::Sub": [
                "${apiAppName}-MediaConvertJobPolicy-${env}",
                {
                  "apiAppName": {
                    "Ref": "apiAppName"
                  },
                  "env": {
                    "Ref": "env"
                  }
                }
              ]
            },
            "PolicyDocument": {
              "Statement": [
                {
                  "Effect": "Allow",
                  "Action": [
                    "s3:GetObject",
                    "s3:PutObject"
                  ],
                  "Resource": [
                    {
                      "Fn::Sub": [
                        "arn:aws:s3:::${HlsMediaBucket}-${account}/*",
                        {
                          "account": {
                            "Ref": "AWS::AccountId"
                          },
                          "HlsMediaBucket": {
                            "Fn::FindInMap": [
                              "EnvironmentMap",
                              "HlsMediaBucket",
                              {
                                "Ref": "env"
                              }
                            ]
                          }
                        }
                      ]
                    },
                    {
                      "Fn::Sub": [
                        "arn:aws:s3:::${SourceMediaBucket}-${account}/*",
                        {
                          "account": {
                            "Ref": "AWS::AccountId"
                          },
                          "SourceMediaBucket": {
                            "Fn::FindInMap": [
                              "EnvironmentMap",
                              "SourceMediaBucket",
                              {
                                "Ref": "env"
                              }
                            ]
                          }
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          }
        ]
      }
    },
    "AccessDynamoDBApiResourcesPolicy": {
      "DependsOn": [
        "LambdaExecutionRole"
      ],
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyName": "amplify-lambda-execution-policy",
        "Roles": [
          {
            "Ref": "LambdaExecutionRole"
          }
        ],
        "PolicyDocument": {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Action": [
                "dynamodb:BatchWriteItem",
                "dynamodb:BatchGet*",
                "dynamodb:DescribeStream",
                "dynamodb:DescribeTable",
                "dynamodb:Get*",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:BatchWrite*",
                "dynamodb:CreateTable",
                "dynamodb:Delete*",
                "dynamodb:Update*",
                "dynamodb:PutItem",
                "dynamodb:GetItem"
              ],
              "Resource": [
                {
                  "Fn::Sub": [
                    "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tablename}",
                    {
                      "tablename": {
                        "Fn::ImportValue": {
                          "Fn::Sub": "${apiGraphQLAPIIdOutput}:GetAtt:ConvertJobTable:Name"
                        }
                      }
                    }
                  ]
                },
                {
                  "Fn::Sub": [
                    "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tablename}/index/*",
                    {
                      "tablename": {
                        "Fn::ImportValue": {
                          "Fn::Sub": "${apiGraphQLAPIIdOutput}:GetAtt:ConvertJobTable:Name"
                        }
                      }
                    }
                  ]
                },
                {
                  "Fn::Sub": [
                    "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tablename}",
                    {
                      "tablename": {
                        "Fn::ImportValue": {
                          "Fn::Sub": "${apiGraphQLAPIIdOutput}:GetAtt:ChannelTable:Name"
                        }
                      }
                    }
                  ]
                },
                {
                  "Fn::Sub": [
                    "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tablename}",
                    {
                      "tablename": {
                        "Fn::ImportValue": {
                          "Fn::Sub": "${apiGraphQLAPIIdOutput}:GetAtt:VideoTable:Name"
                        }
                      }
                    }
                  ]
                },
                {
                  "Fn::Sub": [
                    "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tablename}",
                    {
                      "tablename": {
                        "Fn::ImportValue": {
                          "Fn::Sub": "${apiGraphQLAPIIdOutput}:GetAtt:ViewerTable:Name"
                        }
                      }
                    }
                  ]
                },
                {
                  "Fn::Sub": [
                    "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tablename}",
                    {
                      "tablename": {
                        "Fn::ImportValue": {
                          "Fn::Sub": "${apiGraphQLAPIIdOutput}:GetAtt:LibraryTable:Name"
                        }
                      }
                    }
                  ]
                }
              ]
            }
          ]
        }
      }
    }
  },
  "Outputs": {
    "Name": {
      "Value": {
        "Ref": "LambdaFunction"
      }
    },
    "Arn": {
      "Value": {
        "Fn::GetAtt": [
          "LambdaFunction",
          "Arn"
        ]
      }
    },
    "Region": {
      "Value": {
        "Ref": "AWS::Region"
      }
    },
    "LambdaExecutionRole": {
      "Value": {
        "Ref": "LambdaExecutionRole"
      }
    },
    "HlsMediaBucket": {
      "Value": {
        "Fn::FindInMap": [
          "EnvironmentMap",
          "HlsMediaBucket",
          {
            "Ref": "env"
          }
        ]
      }
    },
    "SourceMediaBucket": {
      "Value": {
        "Fn::FindInMap": [
          "EnvironmentMap",
          "SourceMediaBucket",
          {
            "Ref": "env"
          }
        ]
      }
    },
    "LambdaExecutionRoleArn": {
      "Value": {
        "Fn::GetAtt": [
          "LambdaExecutionRole",
          "Arn"
        ]
      }
    }
  }
}