{"id":19329757,"url":"https://github.com/outerbounds/terraform-aws-metaflow","last_synced_at":"2025-04-05T13:02:04.002Z","repository":{"id":37338234,"uuid":"433963725","full_name":"outerbounds/terraform-aws-metaflow","owner":"outerbounds","description":"Deploy production-grade Metaflow cloud infrastructure on AWS","archived":false,"fork":false,"pushed_at":"2025-01-02T22:14:41.000Z","size":623,"stargazers_count":65,"open_issues_count":39,"forks_count":57,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-03-29T12:02:51.057Z","etag":null,"topics":["aws","metaflow","mlops","terraform","terraform-module"],"latest_commit_sha":null,"homepage":"https://registry.terraform.io/modules/outerbounds/metaflow/aws/latest","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/outerbounds.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":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-12-01T19:47:46.000Z","updated_at":"2025-03-16T11:30:51.000Z","dependencies_parsed_at":"2023-02-16T20:31:33.787Z","dependency_job_id":"a1eeea4d-3ef2-4352-b5ec-354aa4175566","html_url":"https://github.com/outerbounds/terraform-aws-metaflow","commit_stats":null,"previous_names":[],"tags_count":30,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/outerbounds%2Fterraform-aws-metaflow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/outerbounds%2Fterraform-aws-metaflow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/outerbounds%2Fterraform-aws-metaflow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/outerbounds%2Fterraform-aws-metaflow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/outerbounds","download_url":"https://codeload.github.com/outerbounds/terraform-aws-metaflow/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247339147,"owners_count":20923013,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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","metaflow","mlops","terraform","terraform-module"],"created_at":"2024-11-10T02:29:47.563Z","updated_at":"2025-04-05T13:02:03.984Z","avatar_url":"https://github.com/outerbounds.png","language":"HCL","funding_links":[],"categories":["Infrastructure \u0026 IaC"],"sub_categories":[],"readme":"[![](https://img.shields.io/badge/slack-@outerbounds-purple.svg?logo=slack )](http://slack.outerbounds.co/)\n\n# Metaflow Terraform module\n\nTerraform module that provisions AWS resources to run [Metaflow](https://metaflow.org/) in production.\n\nThis module consists of submodules that can be used separately as well:\n\n- AWS Batch cluster to run Metaflow steps ([`metaflow-computation`](./modules/computation))\n- blob storage and metadata database ([`metaflow-datastore`](./modules/datastore))\n- a service providing API to record and query past executions ([`metaflow-metadata-service`](./modules/metadata-service))\n- resources to deploy Metaflow flows on Step Functions processing ([`metaflow-step-functions`](./modules/step-functions))\n- Metaflow UI([`metaflow-ui`](./modules/ui))\n\n![modules diagram](./docs/terraform_modules.png)\n\nYou can either use this high-level module, or submodules individually. See each submodule's corresponding `README.md` for more details.\n\nHere's a minimal end-to-end example of using this module with VPC:\n\n```terraform\n# Random suffix for this deployment\nresource \"random_string\" \"suffix\" {\n  length  = 8\n  special = false\n  upper = false\n}\n\nlocals {\n  resource_prefix = \"metaflow\"\n  resource_suffix = random_string.suffix.result\n}\n\ndata \"aws_availability_zones\" \"available\" {\n}\n\n# VPC infra using https://github.com/terraform-aws-modules/terraform-aws-vpc\nmodule \"vpc\" {\n  source = \"terraform-aws-modules/vpc/aws\"\n  version = \"3.13.0\"\n\n  name = \"${local.resource_prefix}-${local.resource_suffix}\"\n  cidr = \"10.10.0.0/16\"\n\n  azs             = data.aws_availability_zones.available.names\n  private_subnets = [\"10.10.8.0/21\", \"10.10.16.0/21\", \"10.10.24.0/21\"]\n  public_subnets  = [\"10.10.128.0/21\", \"10.10.136.0/21\", \"10.10.144.0/21\"]\n\n  enable_nat_gateway   = true\n  single_nat_gateway   = true\n  enable_dns_hostnames = true\n}\n\n\nmodule \"metaflow\" {\n  source = \"outerbounds/metaflow/aws\"\n  version = \"0.3.0\"\n\n  resource_prefix = local.resource_prefix\n  resource_suffix = local.resource_suffix\n\n  enable_step_functions = false\n  subnet1_id            = module.vpc.public_subnets[0]\n  subnet2_id            = module.vpc.public_subnets[1]\n  vpc_cidr_blocks       = module.vpc.vpc_cidr_blocks\n  vpc_id                = module.vpc.vpc_id\n  with_public_ip        = true\n\n  tags = {\n      \"managedBy\" = \"terraform\"\n  }\n}\n\n# export all outputs from metaflow modules\noutput \"metaflow\" {\n  value = module.metaflow\n}\n\n# The module will generate a Metaflow config in JSON format, write it to a file\nresource \"local_file\" \"metaflow_config\" {\n  content  = module.metaflow.metaflow_profile_json\n  filename = \"./metaflow_profile.json\"\n}\n```\n\n**Note:** You can find a more complete example that uses this module but also includes setting up sagemaker notebooks and other non-Metaflow-specific parts of infra [in this repo](https://github.com/outerbounds/metaflow-tools/tree/master/aws/terraform).\n\n\u003c!-- BEGIN_TF_DOCS --\u003e\n## Modules\n\n| Name | Source | Version |\n|------|--------|---------|\n| \u003ca name=\"module_metaflow-common\"\u003e\u003c/a\u003e [metaflow-common](#module\\_metaflow-common) | ./modules/common | n/a |\n| \u003ca name=\"module_metaflow-computation\"\u003e\u003c/a\u003e [metaflow-computation](#module\\_metaflow-computation) | ./modules/computation | n/a |\n| \u003ca name=\"module_metaflow-datastore\"\u003e\u003c/a\u003e [metaflow-datastore](#module\\_metaflow-datastore) | ./modules/datastore | n/a |\n| \u003ca name=\"module_metaflow-metadata-service\"\u003e\u003c/a\u003e [metaflow-metadata-service](#module\\_metaflow-metadata-service) | ./modules/metadata-service | n/a |\n| \u003ca name=\"module_metaflow-step-functions\"\u003e\u003c/a\u003e [metaflow-step-functions](#module\\_metaflow-step-functions) | ./modules/step-functions | n/a |\n| \u003ca name=\"module_metaflow-ui\"\u003e\u003c/a\u003e [metaflow-ui](#module\\_metaflow-ui) | ./modules/ui | n/a |\n\n## Inputs\n\n| Name | Description | Type | Default | Required |\n|------|-------------|------|---------|:--------:|\n| \u003ca name=\"input_access_list_cidr_blocks\"\u003e\u003c/a\u003e [access\\_list\\_cidr\\_blocks](#input\\_access\\_list\\_cidr\\_blocks) | List of CIDRs we want to grant access to our Metaflow Metadata Service. Usually this is our VPN's CIDR blocks. | `list(string)` | `[]` | no |\n| \u003ca name=\"input_batch_type\"\u003e\u003c/a\u003e [batch\\_type](#input\\_batch\\_type) | AWS Batch Compute Type ('ec2', 'fargate') | `string` | `\"ec2\"` | no |\n| \u003ca name=\"input_compute_environment_desired_vcpus\"\u003e\u003c/a\u003e [compute\\_environment\\_desired\\_vcpus](#input\\_compute\\_environment\\_desired\\_vcpus) | Desired Starting VCPUs for Batch Compute Environment [0-16] for EC2 Batch Compute Environment (ignored for Fargate) | `number` | `8` | no |\n| \u003ca name=\"input_compute_environment_egress_cidr_blocks\"\u003e\u003c/a\u003e [compute\\_environment\\_egress\\_cidr\\_blocks](#input\\_compute\\_environment\\_egress\\_cidr\\_blocks) | CIDR blocks to which egress is allowed from the Batch Compute environment's security group | `list(string)` | \u003cpre\u003e[\u003cbr\u003e  \"0.0.0.0/0\"\u003cbr\u003e]\u003c/pre\u003e | no |\n| \u003ca name=\"input_compute_environment_instance_types\"\u003e\u003c/a\u003e [compute\\_environment\\_instance\\_types](#input\\_compute\\_environment\\_instance\\_types) | The instance types for the compute environment | `list(string)` | \u003cpre\u003e[\u003cbr\u003e  \"c4.large\",\u003cbr\u003e  \"c4.xlarge\",\u003cbr\u003e  \"c4.2xlarge\",\u003cbr\u003e  \"c4.4xlarge\",\u003cbr\u003e  \"c4.8xlarge\"\u003cbr\u003e]\u003c/pre\u003e | no |\n| \u003ca name=\"input_compute_environment_max_vcpus\"\u003e\u003c/a\u003e [compute\\_environment\\_max\\_vcpus](#input\\_compute\\_environment\\_max\\_vcpus) | Maximum VCPUs for Batch Compute Environment [16-96] | `number` | `64` | no |\n| \u003ca name=\"input_compute_environment_min_vcpus\"\u003e\u003c/a\u003e [compute\\_environment\\_min\\_vcpus](#input\\_compute\\_environment\\_min\\_vcpus) | Minimum VCPUs for Batch Compute Environment [0-16] for EC2 Batch Compute Environment (ignored for Fargate) | `number` | `8` | no |\n| \u003ca name=\"input_db_engine_version\"\u003e\u003c/a\u003e [db\\_engine\\_version](#input\\_db\\_engine\\_version) | n/a | `string` | `\"11\"` | no |\n| \u003ca name=\"input_db_instance_type\"\u003e\u003c/a\u003e [db\\_instance\\_type](#input\\_db\\_instance\\_type) | RDS instance type to launch for PostgresQL database. | `string` | `\"db.t2.small\"` | no |\n| \u003ca name=\"input_db_migrate_lambda_zip_file\"\u003e\u003c/a\u003e [db\\_migrate\\_lambda\\_zip\\_file](#input\\_db\\_migrate\\_lambda\\_zip\\_file) | Output path for the zip file containing the DB migrate lambda | `string` | `null` | no |\n| \u003ca name=\"input_enable_custom_batch_container_registry\"\u003e\u003c/a\u003e [enable\\_custom\\_batch\\_container\\_registry](#input\\_enable\\_custom\\_batch\\_container\\_registry) | Provisions infrastructure for custom Amazon ECR container registry if enabled | `bool` | `false` | no |\n| \u003ca name=\"input_enable_key_rotation\"\u003e\u003c/a\u003e [enable\\_key\\_rotation](#input\\_enable\\_key\\_rotation) | Enable key rotation for KMS keys | `bool` | `false` | no |\n| \u003ca name=\"input_enable_step_functions\"\u003e\u003c/a\u003e [enable\\_step\\_functions](#input\\_enable\\_step\\_functions) | Provisions infrastructure for step functions if enabled | `bool` | n/a | yes |\n| \u003ca name=\"input_extra_ui_backend_env_vars\"\u003e\u003c/a\u003e [extra\\_ui\\_backend\\_env\\_vars](#input\\_extra\\_ui\\_backend\\_env\\_vars) | Additional environment variables for UI backend container | `map(string)` | `{}` | no |\n| \u003ca name=\"input_extra_ui_static_env_vars\"\u003e\u003c/a\u003e [extra\\_ui\\_static\\_env\\_vars](#input\\_extra\\_ui\\_static\\_env\\_vars) | Additional environment variables for UI static app | `map(string)` | `{}` | no |\n| \u003ca name=\"input_force_destroy_s3_bucket\"\u003e\u003c/a\u003e [force\\_destroy\\_s3\\_bucket](#input\\_force\\_destroy\\_s3\\_bucket) | Empty S3 bucket before destroying via terraform destroy | `bool` | `false` | no |\n| \u003ca name=\"input_iam_partition\"\u003e\u003c/a\u003e [iam\\_partition](#input\\_iam\\_partition) | IAM Partition (Select aws-us-gov for AWS GovCloud, otherwise leave as is) | `string` | `\"aws\"` | no |\n| \u003ca name=\"input_launch_template_http_endpoint\"\u003e\u003c/a\u003e [launch\\_template\\_http\\_endpoint](#input\\_launch\\_template\\_http\\_endpoint) | Whether the metadata service is available. Can be 'enabled' or 'disabled' | `string` | `\"enabled\"` | no |\n| \u003ca name=\"input_launch_template_http_put_response_hop_limit\"\u003e\u003c/a\u003e [launch\\_template\\_http\\_put\\_response\\_hop\\_limit](#input\\_launch\\_template\\_http\\_put\\_response\\_hop\\_limit) | The desired HTTP PUT response hop limit for instance metadata requests. Can be an integer from 1 to 64 | `number` | `2` | no |\n| \u003ca name=\"input_launch_template_http_tokens\"\u003e\u003c/a\u003e [launch\\_template\\_http\\_tokens](#input\\_launch\\_template\\_http\\_tokens) | Whether or not the metadata service requires session tokens, also referred to as Instance Metadata Service Version 2 (IMDSv2). Can be 'optional' or 'required' | `string` | `\"optional\"` | no |\n| \u003ca name=\"input_metadata_service_container_image\"\u003e\u003c/a\u003e [metadata\\_service\\_container\\_image](#input\\_metadata\\_service\\_container\\_image) | Container image for metadata service | `string` | `\"\"` | no |\n| \u003ca name=\"input_metadata_service_enable_api_basic_auth\"\u003e\u003c/a\u003e [metadata\\_service\\_enable\\_api\\_basic\\_auth](#input\\_metadata\\_service\\_enable\\_api\\_basic\\_auth) | Enable basic auth for API Gateway? (requires key export) | `bool` | `true` | no |\n| \u003ca name=\"input_metadata_service_enable_api_gateway\"\u003e\u003c/a\u003e [metadata\\_service\\_enable\\_api\\_gateway](#input\\_metadata\\_service\\_enable\\_api\\_gateway) | Enable API Gateway for public metadata service endpoint | `bool` | `true` | no |\n| \u003ca name=\"input_resource_prefix\"\u003e\u003c/a\u003e [resource\\_prefix](#input\\_resource\\_prefix) | string prefix for all resources | `string` | `\"metaflow\"` | no |\n| \u003ca name=\"input_resource_suffix\"\u003e\u003c/a\u003e [resource\\_suffix](#input\\_resource\\_suffix) | string suffix for all resources | `string` | `\"\"` | no |\n| \u003ca name=\"input_subnet1_id\"\u003e\u003c/a\u003e [subnet1\\_id](#input\\_subnet1\\_id) | First subnet used for availability zone redundancy | `string` | n/a | yes |\n| \u003ca name=\"input_subnet2_id\"\u003e\u003c/a\u003e [subnet2\\_id](#input\\_subnet2\\_id) | Second subnet used for availability zone redundancy | `string` | n/a | yes |\n| \u003ca name=\"input_tags\"\u003e\u003c/a\u003e [tags](#input\\_tags) | aws tags | `map(string)` | n/a | yes |\n| \u003ca name=\"input_ui_alb_internal\"\u003e\u003c/a\u003e [ui\\_alb\\_internal](#input\\_ui\\_alb\\_internal) | Defines whether the ALB for the UI is internal | `bool` | `false` | no |\n| \u003ca name=\"input_ui_allow_list\"\u003e\u003c/a\u003e [ui\\_allow\\_list](#input\\_ui\\_allow\\_list) | List of CIDRs we want to grant access to our Metaflow UI Service. Usually this is our VPN's CIDR blocks. | `list(string)` | `[]` | no |\n| \u003ca name=\"input_ui_certificate_arn\"\u003e\u003c/a\u003e [ui\\_certificate\\_arn](#input\\_ui\\_certificate\\_arn) | SSL certificate for UI. If set to empty string, UI is disabled. | `string` | `\"\"` | no |\n| \u003ca name=\"input_ui_static_container_image\"\u003e\u003c/a\u003e [ui\\_static\\_container\\_image](#input\\_ui\\_static\\_container\\_image) | Container image for the UI frontend app | `string` | `\"\"` | no |\n| \u003ca name=\"input_vpc_cidr_blocks\"\u003e\u003c/a\u003e [vpc\\_cidr\\_blocks](#input\\_vpc\\_cidr\\_blocks) | The VPC CIDR blocks that we'll access list on our Metadata Service API to allow all internal communications | `list(string)` | n/a | yes |\n| \u003ca name=\"input_vpc_id\"\u003e\u003c/a\u003e [vpc\\_id](#input\\_vpc\\_id) | The id of the single VPC we stood up for all Metaflow resources to exist in. | `string` | n/a | yes |\n| \u003ca name=\"input_with_public_ip\"\u003e\u003c/a\u003e [with\\_public\\_ip](#input\\_with\\_public\\_ip) | Enable public IP assignment for the Metadata Service. If the subnets specified for subnet1\\_id and subnet2\\_id are public subnets, you will NEED to set this to true to allow pulling container images from public registries. Otherwise this should be set to false. | `bool` | n/a | yes |\n\n## Outputs\n\n| Name | Description |\n|------|-------------|\n| \u003ca name=\"output_METAFLOW_BATCH_JOB_QUEUE\"\u003e\u003c/a\u003e [METAFLOW\\_BATCH\\_JOB\\_QUEUE](#output\\_METAFLOW\\_BATCH\\_JOB\\_QUEUE) | AWS Batch Job Queue ARN for Metaflow |\n| \u003ca name=\"output_METAFLOW_DATASTORE_SYSROOT_S3\"\u003e\u003c/a\u003e [METAFLOW\\_DATASTORE\\_SYSROOT\\_S3](#output\\_METAFLOW\\_DATASTORE\\_SYSROOT\\_S3) | Amazon S3 URL for Metaflow DataStore |\n| \u003ca name=\"output_METAFLOW_DATATOOLS_S3ROOT\"\u003e\u003c/a\u003e [METAFLOW\\_DATATOOLS\\_S3ROOT](#output\\_METAFLOW\\_DATATOOLS\\_S3ROOT) | Amazon S3 URL for Metaflow DataTools |\n| \u003ca name=\"output_METAFLOW_ECS_S3_ACCESS_IAM_ROLE\"\u003e\u003c/a\u003e [METAFLOW\\_ECS\\_S3\\_ACCESS\\_IAM\\_ROLE](#output\\_METAFLOW\\_ECS\\_S3\\_ACCESS\\_IAM\\_ROLE) | Role for AWS Batch to Access Amazon S3 |\n| \u003ca name=\"output_METAFLOW_EVENTS_SFN_ACCESS_IAM_ROLE\"\u003e\u003c/a\u003e [METAFLOW\\_EVENTS\\_SFN\\_ACCESS\\_IAM\\_ROLE](#output\\_METAFLOW\\_EVENTS\\_SFN\\_ACCESS\\_IAM\\_ROLE) | IAM role for Amazon EventBridge to access AWS Step Functions. |\n| \u003ca name=\"output_METAFLOW_SERVICE_INTERNAL_URL\"\u003e\u003c/a\u003e [METAFLOW\\_SERVICE\\_INTERNAL\\_URL](#output\\_METAFLOW\\_SERVICE\\_INTERNAL\\_URL) | URL for Metadata Service (Accessible in VPC) |\n| \u003ca name=\"output_METAFLOW_SERVICE_URL\"\u003e\u003c/a\u003e [METAFLOW\\_SERVICE\\_URL](#output\\_METAFLOW\\_SERVICE\\_URL) | URL for Metadata Service (Accessible in VPC) |\n| \u003ca name=\"output_METAFLOW_SFN_DYNAMO_DB_TABLE\"\u003e\u003c/a\u003e [METAFLOW\\_SFN\\_DYNAMO\\_DB\\_TABLE](#output\\_METAFLOW\\_SFN\\_DYNAMO\\_DB\\_TABLE) | AWS DynamoDB table name for tracking AWS Step Functions execution metadata. |\n| \u003ca name=\"output_METAFLOW_SFN_IAM_ROLE\"\u003e\u003c/a\u003e [METAFLOW\\_SFN\\_IAM\\_ROLE](#output\\_METAFLOW\\_SFN\\_IAM\\_ROLE) | IAM role for AWS Step Functions to access AWS resources (AWS Batch, AWS DynamoDB). |\n| \u003ca name=\"output_api_gateway_rest_api_id_key_id\"\u003e\u003c/a\u003e [api\\_gateway\\_rest\\_api\\_id\\_key\\_id](#output\\_api\\_gateway\\_rest\\_api\\_id\\_key\\_id) | API Gateway Key ID for Metadata Service. Fetch Key from AWS Console [METAFLOW\\_SERVICE\\_AUTH\\_KEY] |\n| \u003ca name=\"output_batch_compute_environment_security_group_id\"\u003e\u003c/a\u003e [batch\\_compute\\_environment\\_security\\_group\\_id](#output\\_batch\\_compute\\_environment\\_security\\_group\\_id) | The ID of the security group attached to the Batch Compute environment. |\n| \u003ca name=\"output_datastore_s3_bucket_kms_key_arn\"\u003e\u003c/a\u003e [datastore\\_s3\\_bucket\\_kms\\_key\\_arn](#output\\_datastore\\_s3\\_bucket\\_kms\\_key\\_arn) | The ARN of the KMS key used to encrypt the Metaflow datastore S3 bucket |\n| \u003ca name=\"output_metadata_svc_ecs_task_role_arn\"\u003e\u003c/a\u003e [metadata\\_svc\\_ecs\\_task\\_role\\_arn](#output\\_metadata\\_svc\\_ecs\\_task\\_role\\_arn) | n/a |\n| \u003ca name=\"output_metaflow_api_gateway_rest_api_id\"\u003e\u003c/a\u003e [metaflow\\_api\\_gateway\\_rest\\_api\\_id](#output\\_metaflow\\_api\\_gateway\\_rest\\_api\\_id) | The ID of the API Gateway REST API we'll use to accept MetaData service requests to forward to the Fargate API instance |\n| \u003ca name=\"output_metaflow_batch_container_image\"\u003e\u003c/a\u003e [metaflow\\_batch\\_container\\_image](#output\\_metaflow\\_batch\\_container\\_image) | The ECR repo containing the metaflow batch image |\n| \u003ca name=\"output_metaflow_profile_json\"\u003e\u003c/a\u003e [metaflow\\_profile\\_json](#output\\_metaflow\\_profile\\_json) | Metaflow profile JSON object that can be used to communicate with this Metaflow Stack. Store this in `~/.metaflow/config_[stack-name]` and select with `$ export METAFLOW_PROFILE=[stack-name]`. |\n| \u003ca name=\"output_metaflow_s3_bucket_arn\"\u003e\u003c/a\u003e [metaflow\\_s3\\_bucket\\_arn](#output\\_metaflow\\_s3\\_bucket\\_arn) | The ARN of the bucket we'll be using as blob storage |\n| \u003ca name=\"output_metaflow_s3_bucket_name\"\u003e\u003c/a\u003e [metaflow\\_s3\\_bucket\\_name](#output\\_metaflow\\_s3\\_bucket\\_name) | The name of the bucket we'll be using as blob storage |\n| \u003ca name=\"output_migration_function_arn\"\u003e\u003c/a\u003e [migration\\_function\\_arn](#output\\_migration\\_function\\_arn) | ARN of DB Migration Function |\n| \u003ca name=\"output_ui_alb_arn\"\u003e\u003c/a\u003e [ui\\_alb\\_arn](#output\\_ui\\_alb\\_arn) | UI ALB ARN |\n| \u003ca name=\"output_ui_alb_dns_name\"\u003e\u003c/a\u003e [ui\\_alb\\_dns\\_name](#output\\_ui\\_alb\\_dns\\_name) | UI ALB DNS name |\n\u003c!-- END_TF_DOCS --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fouterbounds%2Fterraform-aws-metaflow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fouterbounds%2Fterraform-aws-metaflow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fouterbounds%2Fterraform-aws-metaflow/lists"}