{"id":19188774,"url":"https://github.com/miquido/terraform-video-converter","last_synced_at":"2026-06-19T19:01:31.522Z","repository":{"id":234372384,"uuid":"689940625","full_name":"miquido/terraform-video-converter","owner":"miquido","description":null,"archived":false,"fork":false,"pushed_at":"2024-07-26T03:25:00.000Z","size":1540,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-23T03:42:21.595Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/miquido.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-09-11T08:17:17.000Z","updated_at":"2023-09-11T13:19:56.000Z","dependencies_parsed_at":"2025-02-23T03:42:22.554Z","dependency_job_id":"26550c05-f8f9-40d9-9adf-9189ae992ccf","html_url":"https://github.com/miquido/terraform-video-converter","commit_stats":null,"previous_names":["miquido/terraform-video-converter"],"tags_count":63,"template":false,"template_full_name":null,"purl":"pkg:github/miquido/terraform-video-converter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miquido%2Fterraform-video-converter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miquido%2Fterraform-video-converter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miquido%2Fterraform-video-converter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miquido%2Fterraform-video-converter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/miquido","download_url":"https://codeload.github.com/miquido/terraform-video-converter/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miquido%2Fterraform-video-converter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34544413,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-19T02:00:06.005Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-09T11:25:59.297Z","updated_at":"2026-06-19T19:01:31.473Z","avatar_url":"https://github.com/miquido.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- This file was automatically generated by the `build-harness`. Make all changes to `README.yaml` and run `make readme` to rebuild this file. --\u003e\n[![Miquido][logo]](https://www.miquido.com/)\n\n# terraform-video-converter\nA solution that will generate adaptive streaming urls for videos uploaded to video-source bucket.\nAfter conversion, videos will be available under\nmodule.video-cdn.cf_domain_name/file_name/protocol/file_name.protocol_extension\nex. https://playground-test-video.s3.eu-central-1.amazonaws.com/IMG_6326.mov/AppleHLS1/IMG_6326.m3u8\nAlso there will be notifications send on endpoint under vars submit-lambda-notification-webhook and\ncomplete-lambda-notification-webhook.\n\nBy default the solution will make 3 types of conversion: HLS, DASHIS and mp4. This can be changed by\nmodifiying video-source/converter-config-1/job-settings.json file.\n\nFiles should be uploaded to video-source/converter-config-1 and only .mp4, .mpg, .m4v, .mov, .m2ts\nare supported (case sensitive)\n\n\nMost useful fields from 'Complete lambda' notification will be probably:\n```\nevent.detail.userMetadata.guid,\nevent.detail.userMetadata.filename,\nevent.detail.status,\n```\n\u003cb\u003eImportant\u003c/b\u003e\u003cbr\u003e\nThe solution assumes that a video file will be uploaded into `...video-source` bucket with a path format:\u003cbr\u003e\n`config-name/guid/.../filename`\u003cbr\u003e\nWhere `guid` in the path is `guid` in the notification. For example:\u003cbr\u003e\n`myVideoConfig/user1/video2` or \u003cbr\u003e\n`converter-config-1/7269c6d9-7884-4458-9f70-f142f6879a18/feed/video/28cc892d-0118-4c4c-957e-78aa39462e92`\u003cbr\u003e\n---\n**Terraform Module**\n## Usage\n\n```hcl\nmodule \"adaptive-video\" {\n  source    = \"git::ssh://git@gitlab.com/miquido/terraform/terraform-video-converter.git?ref=tags/...\"\n  name      = \"adaptive-video\"\n  stage     = var.environment\n  namespace = var.project\n\n  aws_region          = var.aws_region\n  aws_used_account_no = var.aws_used_account_no\n\n  dns_alias_enabled   = true\n  dns_alias_name      = local.videos_domain\n  parent_zone_id      = aws_route53_zone.primary.zone_id\n  acm_certificate_arn = local.cdn_acm_certificate_arn\n\n  // ECS task that uploads videos\n  uploading_service_role = module.ecs-alb-task-main-api.task_role_name\n\n  // unique endpoint from your account\n  mediaconvert-endpoint                = \"https://xxxxxxxx.mediaconvert.us-east-1.amazonaws.com\"\n  // sends error when can't create conversion job\n  submit-lambda-notification-webhook    = \"https://${local.main_api_domain}/submit\"\n  // sends completed job details or error object\n  complete-lambda-notification-webhook  = \"https://${local.main_api_domain}/complete\"\n  notification-webhook-auth-header     = \"Api-Key ${data.aws_ssm_parameter.main-api_JOBS_API_KEY.value}\"\n}\n```\n\u003c!-- markdownlint-disable --\u003e\n## Makefile Targets\n```text\nAvailable targets:\n\n  help                                Help screen\n  help/all                            Display help for all targets\n  help/short                          This help short screen\n  lint                                Lint terraform code\n\n```\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- markdownlint-disable --\u003e\n## Requirements\n\n| Name | Version |\n|------|---------|\n| \u003ca name=\"requirement_terraform\"\u003e\u003c/a\u003e [terraform](#requirement\\_terraform) | \u003e= 0.13 |\n| \u003ca name=\"requirement_archive\"\u003e\u003c/a\u003e [archive](#requirement\\_archive) | \u003e= 2.2.0 |\n| \u003ca name=\"requirement_aws\"\u003e\u003c/a\u003e [aws](#requirement\\_aws) | ~\u003e 3.41 |\n\n## Providers\n\n| Name | Version |\n|------|---------|\n| \u003ca name=\"provider_archive\"\u003e\u003c/a\u003e [archive](#provider\\_archive) | \u003e= 2.2.0 |\n| \u003ca name=\"provider_aws\"\u003e\u003c/a\u003e [aws](#provider\\_aws) | ~\u003e 3.41 |\n\n## Modules\n\n| Name | Source | Version |\n|------|--------|---------|\n| \u003ca name=\"module_label\"\u003e\u003c/a\u003e [label](#module\\_label) | git::https://github.com/cloudposse/terraform-terraform-label.git | 0.8.0 |\n| \u003ca name=\"module_video-cdn\"\u003e\u003c/a\u003e [video-cdn](#module\\_video-cdn) | git::https://github.com/cloudposse/terraform-aws-cloudfront-s3-cdn.git | 0.82.3 |\n| \u003ca name=\"module_video-source\"\u003e\u003c/a\u003e [video-source](#module\\_video-source) | git::https://github.com/cloudposse/terraform-aws-s3-bucket.git | 0.47.0 |\n\n## Resources\n\n| Name | Type |\n|------|------|\n| [aws_cloudwatch_event_rule.complete_lambda_event_rule](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cloudwatch_event_rule) | resource |\n| [aws_cloudwatch_event_target.default](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cloudwatch_event_target) | resource |\n| [aws_iam_policy.video-s3-iam-policy-user](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_policy) | resource |\n| [aws_iam_role.media-convert-execute-role](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role) | resource |\n| [aws_iam_role.video-conversion-complete-lambda-role](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role) | resource |\n| [aws_iam_role.video-conversion-submit-lambda-role](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role) | resource |\n| [aws_iam_role_policy_attachment.video-iam-policy](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |\n| [aws_lambda_function.video-conversion-complete](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lambda_function) | resource |\n| [aws_lambda_function.video-conversion-submit](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lambda_function) | resource |\n| [aws_lambda_permission.allow_cloudwatch_to_invoke_video_complete](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lambda_permission) | resource |\n| [aws_lambda_permission.s3_notification](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lambda_permission) | resource |\n| [aws_s3_bucket_notification.new_video](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket_notification) | resource |\n| [aws_s3_bucket_object.converter-config](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket_object) | resource |\n| [aws_s3_bucket_public_access_block.video-cdn](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket_public_access_block) | resource |\n| [aws_s3_bucket_public_access_block.video-source](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket_public_access_block) | resource |\n| [archive_file.complete-lambda-archive](https://registry.terraform.io/providers/hashicorp/archive/latest/docs/data-sources/file) | data source |\n| [archive_file.lambda](https://registry.terraform.io/providers/hashicorp/archive/latest/docs/data-sources/file) | data source |\n| [aws_iam_policy_document.assume_role](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document) | data source |\n| [aws_iam_policy_document.media-convert-execute-assume_role](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document) | data source |\n| [aws_iam_policy_document.video-s3-iam-policy-user](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document) | data source |\n\n## Inputs\n\n| Name | Description | Type | Default | Required |\n|------|-------------|------|---------|:--------:|\n| \u003ca name=\"input_acm_certificate_arn\"\u003e\u003c/a\u003e [acm\\_certificate\\_arn](#input\\_acm\\_certificate\\_arn) | Existing ACM Certificate ARN | `string` | `\"\"` | no |\n| \u003ca name=\"input_attributes\"\u003e\u003c/a\u003e [attributes](#input\\_attributes) | Additional attributes (e.g. `1`) | `list(string)` | `[]` | no |\n| \u003ca name=\"input_aws_region\"\u003e\u003c/a\u003e [aws\\_region](#input\\_aws\\_region) | AWS Region | `string` | n/a | yes |\n| \u003ca name=\"input_aws_used_account_no\"\u003e\u003c/a\u003e [aws\\_used\\_account\\_no](#input\\_aws\\_used\\_account\\_no) | AWS Organization Account number used to assume role on | `string` | n/a | yes |\n| \u003ca name=\"input_cloudfront_price_class\"\u003e\u003c/a\u003e [cloudfront\\_price\\_class](#input\\_cloudfront\\_price\\_class) | Price class for video cloudfront distribution: `PriceClass_All`, `PriceClass_200`, `PriceClass_100` | `string` | `\"PriceClass_100\"` | no |\n| \u003ca name=\"input_complete-lambda-notification-webhook\"\u003e\u003c/a\u003e [complete-lambda-notification-webhook](#input\\_complete-lambda-notification-webhook) | endpoint for notification about conversion process | `string` | n/a | yes |\n| \u003ca name=\"input_delimiter\"\u003e\u003c/a\u003e [delimiter](#input\\_delimiter) | Delimiter to be used between `namespace`, `stage`, `name` and `attributes` | `string` | `\"-\"` | no |\n| \u003ca name=\"input_dns_alias_enabled\"\u003e\u003c/a\u003e [dns\\_alias\\_enabled](#input\\_dns\\_alias\\_enabled) | Create a DNS alias for the CDN. Requires `parent_zone_id` or `parent_zone_name` | `bool` | `false` | no |\n| \u003ca name=\"input_dns_alias_name\"\u003e\u003c/a\u003e [dns\\_alias\\_name](#input\\_dns\\_alias\\_name) | Create a DNS alias for the CDN | `string` | `false` | no |\n| \u003ca name=\"input_mediaconvert-endpoint\"\u003e\u003c/a\u003e [mediaconvert-endpoint](#input\\_mediaconvert-endpoint) | your media convert endpoint | `string` | n/a | yes |\n| \u003ca name=\"input_name\"\u003e\u003c/a\u003e [name](#input\\_name) | Solution name, e.g. 'app' or 'cluster' | `string` | `\"app\"` | no |\n| \u003ca name=\"input_namespace\"\u003e\u003c/a\u003e [namespace](#input\\_namespace) | Namespace, which could be your organization name, e.g. 'eg' or 'cp' | `string` | n/a | yes |\n| \u003ca name=\"input_notification-webhook-auth-header\"\u003e\u003c/a\u003e [notification-webhook-auth-header](#input\\_notification-webhook-auth-header) | webhook authorization header | `string` | `\"\"` | no |\n| \u003ca name=\"input_parent_zone_id\"\u003e\u003c/a\u003e [parent\\_zone\\_id](#input\\_parent\\_zone\\_id) | ID of the hosted zone to contain this record (or specify `parent_zone_name`). Requires `dns_alias_enabled` set to true | `string` | `\"\"` | no |\n| \u003ca name=\"input_stage\"\u003e\u003c/a\u003e [stage](#input\\_stage) | Stage, e.g. 'prod', 'staging', 'dev', or 'test' | `string` | n/a | yes |\n| \u003ca name=\"input_submit-lambda-notification-webhook\"\u003e\u003c/a\u003e [submit-lambda-notification-webhook](#input\\_submit-lambda-notification-webhook) | endpoint for notification about errors | `string` | n/a | yes |\n| \u003ca name=\"input_tags\"\u003e\u003c/a\u003e [tags](#input\\_tags) | Additional tags (e.g. `map('BusinessUnit','XYZ')` | `map(string)` | `{}` | no |\n| \u003ca name=\"input_uploading_service_role\"\u003e\u003c/a\u003e [uploading\\_service\\_role](#input\\_uploading\\_service\\_role) | Role of the service that will upload videos | `string` | `\"\"` | no |\n\n## Outputs\n\nNo outputs.\n\u003c!-- markdownlint-restore --\u003e\n\n\n## Developing\n\n1. Make changes in terraform files\n\n2. Regenerate documentation\n\n    ```bash\n    bash \u003c(git archive --remote=git@gitlab.com:miquido/terraform/terraform-readme-update.git master update.sh | tar -xO)\n    ```\n\n3. Run lint\n\n    ```\n    make lint\n    ```\n\n## Copyright\n\nCopyright © 2017-2022 [Miquido](https://miquido.com)\n\n\n\n\n  [logo]: https://www.miquido.com/img/logos/logo__miquido.svg\n  [website]: https://www.miquido.com/\n  [gitlab]: https://gitlab.com/miquido\n  [github]: https://github.com/miquido\n  [bitbucket]: https://bitbucket.org/miquido\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiquido%2Fterraform-video-converter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmiquido%2Fterraform-video-converter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiquido%2Fterraform-video-converter/lists"}