{"id":19129417,"url":"https://github.com/launchbynttdata/tf-aws-module_collection-ecr","last_synced_at":"2026-05-18T15:32:57.822Z","repository":{"id":255041665,"uuid":"839444516","full_name":"launchbynttdata/tf-aws-module_collection-ecr","owner":"launchbynttdata","description":null,"archived":false,"fork":false,"pushed_at":"2026-04-23T21:11:45.000Z","size":132,"stargazers_count":0,"open_issues_count":4,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-23T21:28:20.870Z","etag":null,"topics":["aws","infrastructure-as-code","platform-automation","reference","terraform"],"latest_commit_sha":null,"homepage":null,"language":"HCL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/launchbynttdata.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-08-07T16:10:23.000Z","updated_at":"2025-11-20T15:22:11.000Z","dependencies_parsed_at":"2024-08-27T17:59:40.084Z","dependency_job_id":"b581f96c-6f80-4465-8148-e7239156b1dc","html_url":"https://github.com/launchbynttdata/tf-aws-module_collection-ecr","commit_stats":null,"previous_names":["launchbynttdata/tf-aws-module_collection-ecr"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/launchbynttdata/tf-aws-module_collection-ecr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/launchbynttdata%2Ftf-aws-module_collection-ecr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/launchbynttdata%2Ftf-aws-module_collection-ecr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/launchbynttdata%2Ftf-aws-module_collection-ecr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/launchbynttdata%2Ftf-aws-module_collection-ecr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/launchbynttdata","download_url":"https://codeload.github.com/launchbynttdata/tf-aws-module_collection-ecr/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/launchbynttdata%2Ftf-aws-module_collection-ecr/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33182806,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-18T09:27:30.708Z","status":"ssl_error","status_checked_at":"2026-05-18T09:27:28.300Z","response_time":71,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["aws","infrastructure-as-code","platform-automation","reference","terraform"],"created_at":"2024-11-09T06:07:25.610Z","updated_at":"2026-05-18T15:32:57.790Z","avatar_url":"https://github.com/launchbynttdata.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"# tf-aws-module_collection-ecr\n\n## Overview\n\nTerraform collection module for AWS Elastic Container Registry (ECR). It creates and configures one or more private ECR repositories by composing the [`cloudposse/ecr/aws`](https://registry.terraform.io/modules/cloudposse/ecr/aws/latest) primitive module (pinned to `~\u003e 1.0`).\n\n**What this module manages:**\n\n- **Repositories** — one private ECR repository per entry in `image_names`; the `name` / `namespace` / `stage` context controls the resulting repository name when `use_fullname = true`\n- **Lifecycle policies** — enabled by default (`enable_lifecycle_policy = true`); `max_image_count` (default 500) controls how many image versions are retained, and `time_based_rotation` switches the count type to `sinceImagePushed`\n- **Image scanning** — `scan_images_on_push = true` by default\n- **Tag immutability** — defaults to `IMMUTABLE`; set `image_tag_mutability = \"MUTABLE\"` when tags must be overwritten. `image_tag_mutability_exclusion_filter` carves specific tag patterns out of the mutability setting (e.g. keep the registry `IMMUTABLE` but allow `latest` / `stable-*` to move)\n- **Encryption** — AES-256 by default; pass `encryption_configuration = { encryption_type = \"KMS\", kms_key = \"\u003carn\u003e\" }` for CMK encryption\n- **Access control** — granular IAM repository policies via `principals_full_access`, `principals_push_access`, `principals_readonly_access`, `principals_lambda`, `principals_pull_through_access`, and the corresponding `organizations_*` lists for AWS Organizations-level grants\n- **Pull-through cache** — `prefixes_pull_through_repositories` exposes upstream registry namespace prefixes\n- **Cross-region / cross-account replication** — `replication_configurations` maps to the `aws_ecr_replication_configuration` resource arguments (up to 10 rules, 25 destinations each)\n- **Protected tags** — `protected_tags` lists image-tag prefixes excluded from lifecycle eviction (e.g. `[\"prod\", \"staging\"]`)\n\n**Provider and Terraform versions:** AWS `\u003e= 6.8.0, \u003c 7.0`, Terraform `~\u003e 1.10`.\n\n\u003e **AWS-imposed limits on `image_tag_mutability_exclusion_filter`.** AWS enforces a maximum of **5 filters per repository**, plus length and allowed-character constraints on each `filter` string. This wrapper deliberately does not duplicate those checks (see the comment on the variable in `variables.tf`); they are surfaced by the AWS provider at plan/apply time. Consult the [AWS ECR docs](https://docs.aws.amazon.com/AmazonECR/latest/userguide/image-tag-mutability.html) for the current authoritative limits.\n\n**Example:** `examples/complete` — used by Terratest (`tests/post_deploy_functional`). The example injects a random suffix via `TF_VAR_suffix` to guarantee a unique repository name per test run.\n\n## Pre-commit Hooks\n\nThis repository uses [pre-commit](https://pre-commit.com/) to enforce code quality. The hooks are configured in `.pre-commit-config.yaml` and include:\n\n| Hook | Purpose |\n|------|---------|\n| `pre-commit-hooks` (v4.5.0) | Trailing whitespace, YAML/JSON validity, merge-conflict detection, line-ending normalization |\n| `terraform_fmt` | Canonical Terraform formatting |\n| `terraform_validate` | Module-level `terraform validate` |\n| `terraform_docs` | Regenerates the `\u003c!-- BEGIN_TF_DOCS --\u003e\n## Requirements\n\n| Name | Version |\n|------|---------|\n| \u003ca name=\"requirement_terraform\"\u003e\u003c/a\u003e [terraform](#requirement\\_terraform) | ~\u003e 1.10 |\n| \u003ca name=\"requirement_aws\"\u003e\u003c/a\u003e [aws](#requirement\\_aws) | \u003e= 6.8.0, \u003c 7.0 |\n\n## Providers\n\nNo providers.\n\n## Modules\n\n| Name | Source | Version |\n|------|--------|---------|\n| \u003ca name=\"module_ecr\"\u003e\u003c/a\u003e [ecr](#module\\_ecr) | cloudposse/ecr/aws | ~\u003e 1.0 |\n\n## Resources\n\nNo resources.\n\n## Inputs\n\n| Name | Description | Type | Default | Required |\n|------|-------------|------|---------|:--------:|\n| \u003ca name=\"input_additional_tag_map\"\u003e\u003c/a\u003e [additional\\_tag\\_map](#input\\_additional\\_tag\\_map) | Additional key-value pairs to add to each map in `tags_as_list_of_maps`. Not added to `tags` or `id`. This is for some rare cases where resources want additional configuration of tags and therefore take a list of maps with tag key, value, and additional configuration. | `map(string)` | `{}` | no |\n| \u003ca name=\"input_attributes\"\u003e\u003c/a\u003e [attributes](#input\\_attributes) | ID element. Additional attributes (e.g. `workers` or `cluster`) to add to `id`, in the order they appear in the list. New attributes are appended to the end of the list. The elements of the list are joined by the `delimiter` and treated as a single ID element. | `list(string)` | `[]` | no |\n| \u003ca name=\"input_context\"\u003e\u003c/a\u003e [context](#input\\_context) | Single object for setting entire context at once. See description of individual variables for details. Leave string and numeric variables as `null` to use default value. Individual variable settings (non-null) override settings in context object, except for attributes, tags, and additional\\_tag\\_map, which are merged. | `any` | \u003cpre\u003e{\u003cbr/\u003e  \"additional_tag_map\": {},\u003cbr/\u003e  \"attributes\": [],\u003cbr/\u003e  \"delimiter\": null,\u003cbr/\u003e  \"descriptor_formats\": {},\u003cbr/\u003e  \"enabled\": true,\u003cbr/\u003e  \"environment\": null,\u003cbr/\u003e  \"id_length_limit\": null,\u003cbr/\u003e  \"label_key_case\": null,\u003cbr/\u003e  \"label_order\": [],\u003cbr/\u003e  \"label_value_case\": null,\u003cbr/\u003e  \"labels_as_tags\": [\u003cbr/\u003e    \"unset\"\u003cbr/\u003e  ],\u003cbr/\u003e  \"name\": null,\u003cbr/\u003e  \"namespace\": null,\u003cbr/\u003e  \"regex_replace_chars\": null,\u003cbr/\u003e  \"stage\": null,\u003cbr/\u003e  \"tags\": {},\u003cbr/\u003e  \"tenant\": null\u003cbr/\u003e}\u003c/pre\u003e | no |\n| \u003ca name=\"input_delimiter\"\u003e\u003c/a\u003e [delimiter](#input\\_delimiter) | Delimiter to be used between ID elements. Defaults to `-` (hyphen). Set to `\"\"` to use no delimiter at all. | `string` | `null` | no |\n| \u003ca name=\"input_descriptor_formats\"\u003e\u003c/a\u003e [descriptor\\_formats](#input\\_descriptor\\_formats) | Describe additional descriptors to be output in the `descriptors` output map. Map of maps. Keys are names of descriptors. Values are maps of the form `{ format = string labels = list(string) }` (Type is `any` so the map values can later be enhanced to provide additional options.) `format` is a Terraform format string to be passed to the `format()` function. `labels` is a list of labels, in order, to pass to `format()` function. Label values will be normalized before being passed to `format()` so they will be identical to how they appear in `id`. Default is `{}` (`descriptors` output will be empty). | `any` | `{}` | no |\n| \u003ca name=\"input_enable_lifecycle_policy\"\u003e\u003c/a\u003e [enable\\_lifecycle\\_policy](#input\\_enable\\_lifecycle\\_policy) | Set to false to prevent the module from adding any lifecycle policies to any repositories | `bool` | `true` | no |\n| \u003ca name=\"input_enabled\"\u003e\u003c/a\u003e [enabled](#input\\_enabled) | Set to false to prevent the module from creating any resources | `bool` | `null` | no |\n| \u003ca name=\"input_encryption_configuration\"\u003e\u003c/a\u003e [encryption\\_configuration](#input\\_encryption\\_configuration) | ECR encryption configuration | \u003cpre\u003eobject({\u003cbr/\u003e    encryption_type = string\u003cbr/\u003e    kms_key         = string\u003cbr/\u003e  })\u003c/pre\u003e | `null` | no |\n| \u003ca name=\"input_environment\"\u003e\u003c/a\u003e [environment](#input\\_environment) | ID element. Usually used for region e.g. 'uw2', 'us-west-2', OR role 'prod', 'staging', 'dev', 'UAT' | `string` | `null` | no |\n| \u003ca name=\"input_force_delete\"\u003e\u003c/a\u003e [force\\_delete](#input\\_force\\_delete) | Whether to delete the repository even if it contains images | `bool` | `false` | no |\n| \u003ca name=\"input_id_length_limit\"\u003e\u003c/a\u003e [id\\_length\\_limit](#input\\_id\\_length\\_limit) | Limit `id` to this many characters (minimum 6). Set to `0` for unlimited length. Set to `null` for keep the existing setting, which defaults to `0`. Does not affect `id_full`. | `number` | `null` | no |\n| \u003ca name=\"input_image_names\"\u003e\u003c/a\u003e [image\\_names](#input\\_image\\_names) | List of Docker local image names, used as repository names for AWS ECR | `list(string)` | `[]` | no |\n| \u003ca name=\"input_image_tag_mutability\"\u003e\u003c/a\u003e [image\\_tag\\_mutability](#input\\_image\\_tag\\_mutability) | The tag mutability setting for the repository. Must be one of: `MUTABLE`, `IMMUTABLE`, `MUTABLE_WITH_EXCLUSION`, or `IMMUTABLE_WITH_EXCLUSION`. Use `*_WITH_EXCLUSION` variants when setting `image_tag_mutability_exclusion_filter`. | `string` | `\"IMMUTABLE\"` | no |\n| \u003ca name=\"input_image_tag_mutability_exclusion_filter\"\u003e\u003c/a\u003e [image\\_tag\\_mutability\\_exclusion\\_filter](#input\\_image\\_tag\\_mutability\\_exclusion\\_filter) | List of exclusion filters for image tag mutability. Each filter object must contain 'filter' and 'filter\\_type' attributes.\u003cbr/\u003eRequires AWS provider \u003e= 6.8.0 (the minimum required by this module).\u003cbr/\u003eAWS-imposed limits (enforced by the provider, not by this wrapper): a maximum of 5 filters per repository, and per-filter length / allowed-character constraints. Refer to the AWS ECR docs for current limits. | \u003cpre\u003elist(object({\u003cbr/\u003e    filter      = string\u003cbr/\u003e    filter_type = optional(string, \"WILDCARD\")\u003cbr/\u003e  }))\u003c/pre\u003e | `[]` | no |\n| \u003ca name=\"input_label_key_case\"\u003e\u003c/a\u003e [label\\_key\\_case](#input\\_label\\_key\\_case) | Controls the letter case of the `tags` keys (label names) for tags generated by this module. Does not affect keys of tags passed in via the `tags` input. Possible values: `lower`, `title`, `upper`. Default value: `title`. | `string` | `null` | no |\n| \u003ca name=\"input_label_order\"\u003e\u003c/a\u003e [label\\_order](#input\\_label\\_order) | The order in which the labels (ID elements) appear in the `id`.\u003cbr/\u003e    Defaults to [\\\"namespace\\\", \\\"environment\\\", \\\"stage\\\", \\\"name\\\", \\\"attributes\\\"]. You can omit any of the\u003cbr/\u003e    6 labels (\\\"tenant\\\" is the 6th), but at least one must be present.\u003cbr/\u003e\u003cbr/\u003e    This module is configured to work with the name of the repository provided as input | `list(string)` | \u003cpre\u003e[\u003cbr/\u003e  \"name\"\u003cbr/\u003e]\u003c/pre\u003e | no |\n| \u003ca name=\"input_label_value_case\"\u003e\u003c/a\u003e [label\\_value\\_case](#input\\_label\\_value\\_case) | Controls the letter case of ID elements (labels) as included in `id`, set as tag values, and output by this module individually. Does not affect values of tags passed in via the `tags` input. Possible values: `lower`, `title`, `upper` and `none` (no transformation). Set this to `title` and set `delimiter` to `\"\"` to yield Pascal Case IDs. Default value: `lower`. | `string` | `null` | no |\n| \u003ca name=\"input_labels_as_tags\"\u003e\u003c/a\u003e [labels\\_as\\_tags](#input\\_labels\\_as\\_tags) | Set of labels (ID elements) to include as tags in the `tags` output. Default is to include all labels. Tags with empty values will not be included in the `tags` output. Set to `[]` to suppress all generated tags. **Notes:** The value of the `name` tag, if included, will be the `id`, not the `name`. Unlike other `null-label` inputs, the initial setting of `labels_as_tags` cannot be changed in later chained modules. Attempts to change it will be silently ignored. | `list(string)` | \u003cpre\u003e[\u003cbr/\u003e  \"default\"\u003cbr/\u003e]\u003c/pre\u003e | no |\n| \u003ca name=\"input_max_image_count\"\u003e\u003c/a\u003e [max\\_image\\_count](#input\\_max\\_image\\_count) | How many Docker Image versions AWS ECR will store | `number` | `500` | no |\n| \u003ca name=\"input_name\"\u003e\u003c/a\u003e [name](#input\\_name) | ID element. Usually the component or solution name, e.g. 'app' or 'jenkins'. This is the only ID element not also included as a `tag`. The \"name\" tag is set to the full `id` string. There is no tag with the value of the `name` input. | `string` | `null` | no |\n| \u003ca name=\"input_namespace\"\u003e\u003c/a\u003e [namespace](#input\\_namespace) | ID element. Usually an abbreviation of your organization name, e.g. 'eg' or 'cp', to help ensure generated IDs are globally unique | `string` | `null` | no |\n| \u003ca name=\"input_organizations_full_access\"\u003e\u003c/a\u003e [organizations\\_full\\_access](#input\\_organizations\\_full\\_access) | Organization IDs to provide with full access to the ECR. | `list(string)` | `[]` | no |\n| \u003ca name=\"input_organizations_push_access\"\u003e\u003c/a\u003e [organizations\\_push\\_access](#input\\_organizations\\_push\\_access) | Organization IDs to provide with push access to the ECR | `list(string)` | `[]` | no |\n| \u003ca name=\"input_organizations_readonly_access\"\u003e\u003c/a\u003e [organizations\\_readonly\\_access](#input\\_organizations\\_readonly\\_access) | Organization IDs to provide with readonly access to the ECR. | `list(string)` | `[]` | no |\n| \u003ca name=\"input_prefixes_pull_through_repositories\"\u003e\u003c/a\u003e [prefixes\\_pull\\_through\\_repositories](#input\\_prefixes\\_pull\\_through\\_repositories) | Organization IDs to provide with push access to the ECR | `list(string)` | `[]` | no |\n| \u003ca name=\"input_principals_full_access\"\u003e\u003c/a\u003e [principals\\_full\\_access](#input\\_principals\\_full\\_access) | Principal ARNs to provide with full access to the ECR | `list(string)` | `[]` | no |\n| \u003ca name=\"input_principals_lambda\"\u003e\u003c/a\u003e [principals\\_lambda](#input\\_principals\\_lambda) | Principal account IDs of Lambdas allowed to consume ECR | `list(string)` | `[]` | no |\n| \u003ca name=\"input_principals_pull_through_access\"\u003e\u003c/a\u003e [principals\\_pull\\_through\\_access](#input\\_principals\\_pull\\_through\\_access) | Principal ARNs to provide with pull through access to the ECR | `list(string)` | `[]` | no |\n| \u003ca name=\"input_principals_push_access\"\u003e\u003c/a\u003e [principals\\_push\\_access](#input\\_principals\\_push\\_access) | Principal ARNs to provide with push access to the ECR | `list(string)` | `[]` | no |\n| \u003ca name=\"input_principals_readonly_access\"\u003e\u003c/a\u003e [principals\\_readonly\\_access](#input\\_principals\\_readonly\\_access) | Principal ARNs to provide with readonly access to the ECR | `list(string)` | `[]` | no |\n| \u003ca name=\"input_protected_tags\"\u003e\u003c/a\u003e [protected\\_tags](#input\\_protected\\_tags) | Name of image tags prefixes that should not be destroyed. Useful if you tag images with names like `dev`, `staging`, and `prod` | `list(string)` | `[]` | no |\n| \u003ca name=\"input_regex_replace_chars\"\u003e\u003c/a\u003e [regex\\_replace\\_chars](#input\\_regex\\_replace\\_chars) | Terraform regular expression (regex) string. Characters matching the regex will be removed from the ID elements. If not set, `\"/[^a-zA-Z0-9-]/\"` is used to remove all characters other than hyphens, letters and digits. | `string` | `null` | no |\n| \u003ca name=\"input_replication_configurations\"\u003e\u003c/a\u003e [replication\\_configurations](#input\\_replication\\_configurations) | Replication configuration for a registry. See [Replication Configuration](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/ecr_replication_configuration#replication-configuration). | \u003cpre\u003elist(object({\u003cbr/\u003e    rules = list(object({          # Maximum 10\u003cbr/\u003e      destinations = list(object({ # Maximum 25\u003cbr/\u003e        region      = string\u003cbr/\u003e        registry_id = string\u003cbr/\u003e      }))\u003cbr/\u003e      repository_filters = list(object({\u003cbr/\u003e        filter      = string\u003cbr/\u003e        filter_type = string\u003cbr/\u003e      }))\u003cbr/\u003e    }))\u003cbr/\u003e  }))\u003c/pre\u003e | `[]` | no |\n| \u003ca name=\"input_scan_images_on_push\"\u003e\u003c/a\u003e [scan\\_images\\_on\\_push](#input\\_scan\\_images\\_on\\_push) | Indicates whether images are scanned after being pushed to the repository (true) or not (false) | `bool` | `true` | no |\n| \u003ca name=\"input_stage\"\u003e\u003c/a\u003e [stage](#input\\_stage) | ID element. Usually used to indicate role, e.g. 'prod', 'staging', 'source', 'build', 'test', 'deploy', 'release' | `string` | `null` | no |\n| \u003ca name=\"input_tags\"\u003e\u003c/a\u003e [tags](#input\\_tags) | Additional tags (e.g. `{'BusinessUnit': 'XYZ'}`). Neither the tag keys nor the tag values will be modified by this module. | `map(string)` | `{}` | no |\n| \u003ca name=\"input_tenant\"\u003e\u003c/a\u003e [tenant](#input\\_tenant) | ID element \\_(Rarely used, not included by default)\\_. A customer identifier, indicating who this instance of a resource is for | `string` | `null` | no |\n| \u003ca name=\"input_time_based_rotation\"\u003e\u003c/a\u003e [time\\_based\\_rotation](#input\\_time\\_based\\_rotation) | Set to true to filter image based on the `sinceImagePushed` count type. | `bool` | `false` | no |\n| \u003ca name=\"input_use_fullname\"\u003e\u003c/a\u003e [use\\_fullname](#input\\_use\\_fullname) | Set 'true' to use `namespace-stage-name` for ecr repository name, else `name` | `bool` | `true` | no |\n\n## Outputs\n\n| Name | Description |\n|------|-------------|\n| \u003ca name=\"output_registry_id\"\u003e\u003c/a\u003e [registry\\_id](#output\\_registry\\_id) | Registry ID |\n| \u003ca name=\"output_repository_arn\"\u003e\u003c/a\u003e [repository\\_arn](#output\\_repository\\_arn) | ARN of first repository created |\n| \u003ca name=\"output_repository_arn_map\"\u003e\u003c/a\u003e [repository\\_arn\\_map](#output\\_repository\\_arn\\_map) | Map of repository names to repository ARNs |\n| \u003ca name=\"output_repository_name\"\u003e\u003c/a\u003e [repository\\_name](#output\\_repository\\_name) | Name of first repository created |\n| \u003ca name=\"output_repository_url\"\u003e\u003c/a\u003e [repository\\_url](#output\\_repository\\_url) | URL of first repository created |\n| \u003ca name=\"output_repository_url_map\"\u003e\u003c/a\u003e [repository\\_url\\_map](#output\\_repository\\_url\\_map) | Map of repository names to repository URLs |\n\u003c!-- END_TF_DOCS --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flaunchbynttdata%2Ftf-aws-module_collection-ecr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flaunchbynttdata%2Ftf-aws-module_collection-ecr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flaunchbynttdata%2Ftf-aws-module_collection-ecr/lists"}