{"id":47820214,"url":"https://github.com/artifactsystems/terraform-huawei-dms","last_synced_at":"2026-04-03T19:06:05.315Z","repository":{"id":344156429,"uuid":"1115207656","full_name":"artifactsystems/terraform-huawei-dms","owner":"artifactsystems","description":"Terraform module to create Huawei DMS resources","archived":false,"fork":false,"pushed_at":"2026-03-13T14:13:09.000Z","size":51,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-13T22:08:12.023Z","etag":null,"topics":["distributed-message-service","dms","huaweicloud","huaweicloud-dms","kafka-broker","managed-kafka","terraform-module"],"latest_commit_sha":null,"homepage":"","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/artifactsystems.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-12T13:56:06.000Z","updated_at":"2026-03-13T14:13:06.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/artifactsystems/terraform-huawei-dms","commit_stats":null,"previous_names":["artifactsystems/terraform-huawei-dms"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/artifactsystems/terraform-huawei-dms","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artifactsystems%2Fterraform-huawei-dms","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artifactsystems%2Fterraform-huawei-dms/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artifactsystems%2Fterraform-huawei-dms/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artifactsystems%2Fterraform-huawei-dms/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/artifactsystems","download_url":"https://codeload.github.com/artifactsystems/terraform-huawei-dms/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artifactsystems%2Fterraform-huawei-dms/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31371879,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T17:53:18.093Z","status":"ssl_error","status_checked_at":"2026-04-03T17:53:17.617Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["distributed-message-service","dms","huaweicloud","huaweicloud-dms","kafka-broker","managed-kafka","terraform-module"],"created_at":"2026-04-03T19:06:04.518Z","updated_at":"2026-04-03T19:06:05.297Z","avatar_url":"https://github.com/artifactsystems.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"# HuaweiCloud DMS Terraform Module\n\nTerraform module which creates DMS (Distributed Message Service) resources on HuaweiCloud — supports both **Kafka** and **RabbitMQ** instances.\n\n## Usage\n\n### Kafka\n\n```hcl\nmodule \"kafka\" {\n  source = \"github.com/artifactsystems/terraform-huawei-dms?ref=v1.1.0\"\n\n  name              = \"my-kafka-cluster\"\n  engine_version    = \"2.7\"\n  flavor_id         = \"kafka.2u4g.cluster.small\"\n  storage_spec_code = \"dms.physical.storage.high.v2\"\n  storage_space     = 300\n  broker_num        = 3\n\n  availability_zones = [\"tr-west-1a\"]\n  vpc_id             = \"your-vpc-id\"\n  network_id         = \"your-subnet-id\"\n  security_group_id  = \"your-security-group-id\"\n\n  tags = {\n    Terraform   = \"true\"\n    Environment = \"dev\"\n  }\n}\n```\n\n### RabbitMQ\n\n```hcl\nmodule \"rabbitmq\" {\n  source = \"github.com/artifactsystems/terraform-huawei-dms?ref=v1.1.0\"\n\n  create_rabbitmq_instance = true\n  create_kafka_instance    = false\n\n  rabbitmq_name              = \"my-rabbitmq-cluster\"\n  rabbitmq_engine_version    = \"3.8.35\"\n  rabbitmq_flavor_id         = \"rabbitmq.2u4g.cluster\"\n  rabbitmq_storage_spec_code = \"dms.physical.storage.high.v2\"\n  rabbitmq_storage_space     = 300\n  rabbitmq_broker_num        = 3\n\n  rabbitmq_availability_zones = [\"tr-west-1a\", \"tr-west-1b\", \"tr-west-1c\"]\n  rabbitmq_vpc_id             = \"your-vpc-id\"\n  rabbitmq_network_id         = \"your-subnet-id\"\n  rabbitmq_security_group_id  = \"your-security-group-id\"\n\n  rabbitmq_access_user = \"admin\"\n  rabbitmq_password    = \"YourSecurePassword@123\"\n\n  tags = {\n    Terraform   = \"true\"\n    Environment = \"dev\"\n  }\n}\n```\n\n## Features\n\n### Kafka\n- ✅ **Kafka Instance**: Create and manage Kafka clusters with flexible configurations\n- ✅ **Multiple Engine Versions**: Support for Kafka 1.1.0, 2.3.0, 2.7, and other supported versions\n- ✅ **Flexible Flavors**: Choose from various instance flavors (c6.2u4g, c6.4u8g, c6.8u16g, c6.16u32g)\n- ✅ **Scalable Storage**: 300GB to 900,000GB storage capacity based on flavor\n- ✅ **Multi-Broker Clusters**: Configure multiple brokers for high availability\n- ✅ **SASL/SSL Authentication**: Secure access with username/password authentication\n- ✅ **Security Protocols**: SASL_SSL (encrypted) or SASL_PLAINTEXT (plaintext with auth)\n- ✅ **Public Access**: Internet access via EIP binding\n- ✅ **Cross-VPC Access**: Enable access from other VPCs with advertised IP configuration\n- ✅ **Port Protocol Configuration**: Fine-grained control over private/public access protocols\n- ✅ **Custom Parameters**: Configure Kafka broker parameters\n\n### RabbitMQ\n- ✅ **RabbitMQ Instance**: Create and manage RabbitMQ clusters\n- ✅ **Virtual Hosts (vhosts)**: Create and manage isolated virtual host environments\n- ✅ **User Management**: Create users with per-vhost permissions (conf/write/read)\n- ✅ **Plugin Management**: Enable RabbitMQ plugins (e.g. `rabbitmq_sharding`)\n- ✅ **SSL Support**: Enable SSL for secure AMQP connections\n- ✅ **ACL Support**: Enable ACL for AMQP-0-9-1 protocol\n- ✅ **Public Access**: Internet access via single EIP binding\n\n### Common\n- ✅ **VPC Integration**: Deploy within your existing VPC and subnet\n- ✅ **Multi-AZ Deployment**: Distribute brokers across Availability Zones (1 or 3+ AZs)\n- ✅ **Maintenance Window**: Configurable maintenance schedules\n- ✅ **Enterprise Project Integration**: Support for HuaweiCloud Enterprise Projects\n- ✅ **Flexible Billing**: Pay-per-use (postPaid) or subscription (prePaid) modes\n- ✅ **Tag Management**: Comprehensive tagging support\n\n## Examples\n\n- [basic](./examples/basic) - Basic Kafka cluster with SASL/SSL authentication and custom parameters\n- [rabbitmq](./examples/rabbitmq) - Basic RabbitMQ cluster with VPC and security group\n\n## Instance Sizing\n\n### Flavor-based Configuration (Recommended)\n\nUse `flavor_id` for more granular control over resources:\n\n| Flavor ID | vCPU | Memory | Max Bandwidth | Storage Range |\n|-----------|------|--------|---------------|---------------|\n| `kafka.2u4g.cluster.small` | 2 | 4GB | 100MB/s | 300-300,000GB |\n| `kafka.4u8g.cluster` | 4 | 8GB | 300MB/s | 300-600,000GB |\n| `kafka.8u16g.cluster` | 8 | 16GB | 600MB/s | 300-900,000GB |\n| `kafka.16u32g.cluster` | 16 | 32GB | 1,200MB/s | 300-900,000GB |\n\n```hcl\nmodule \"kafka\" {\n  source = \"github.com/artifactsystems/terraform-huawei-dms?ref=v1.0.0\"\n\n  name              = \"high-performance-kafka\"\n  engine_version    = \"2.7\"\n  flavor_id         = \"kafka.8u16g.cluster\"\n  storage_spec_code = \"dms.physical.storage.ultra.v2\"  # Ultra-high I/O\n  storage_space     = 1000\n  broker_num        = 5\n\n  # ... other configuration\n}\n```\n\n### Storage Specification\n\n| Storage Spec Code | Description | Use Case |\n|-------------------|-------------|----------|\n| `dms.physical.storage.high.v2` | High I/O | Standard workloads |\n| `dms.physical.storage.ultra.v2` | Ultra-high I/O | High-throughput workloads |\n\n## Authentication Configuration\n\n### SASL/SSL (Recommended for Production)\n\n```hcl\nmodule \"kafka\" {\n  source = \"github.com/artifactsystems/terraform-huawei-dms?ref=v1.0.0\"\n\n  name           = \"secure-kafka\"\n  engine_version = \"2.7\"\n\n  ssl_enable        = true\n  access_user       = \"admin\"\n  password          = \"YourSecurePassword@123\"\n  security_protocol = \"SASL_SSL\"           # Encrypted\n  enabled_mechanisms = [\"SCRAM-SHA-512\"]   # More secure than PLAIN\n\n  # ... other configuration\n}\n```\n\n### Port Protocol Configuration\n\n```hcl\nmodule \"kafka\" {\n  source = \"github.com/artifactsystems/terraform-huawei-dms?ref=v1.0.0\"\n\n  name           = \"multi-protocol-kafka\"\n  engine_version = \"2.7\"\n\n  port_protocol = {\n    private_plain_enable          = true   # Port 9092\n    private_sasl_ssl_enable       = true   # Port 9093\n    private_sasl_plaintext_enable = false\n    public_plain_enable           = false\n    public_sasl_ssl_enable        = false\n    public_sasl_plaintext_enable  = false\n  }\n\n  # ... other configuration\n}\n```\n\n## Public Access Configuration\n\n### Enable Public Access with EIPs\n\n```hcl\nmodule \"kafka\" {\n  source = \"github.com/artifactsystems/terraform-huawei-dms?ref=v1.0.0\"\n\n  name       = \"public-kafka\"\n  broker_num = 3\n\n  # One EIP per broker\n  public_ip_ids = [\n    \"eip-id-1\",\n    \"eip-id-2\",\n    \"eip-id-3\"\n  ]\n\n  # ... other configuration\n}\n```\n\n## Cross-VPC Access\n\n```hcl\nmodule \"kafka\" {\n  source = \"github.com/artifactsystems/terraform-huawei-dms?ref=v1.0.0\"\n\n  name = \"cross-vpc-kafka\"\n\n  cross_vpc_accesses = [\n    {\n      advertised_ip = \"192.168.0.100\"\n    },\n    {\n      advertised_ip = \"192.168.0.101\"\n    }\n  ]\n\n  # ... other configuration\n}\n```\n\n## Kafka Parameters\n\nConfigure Kafka broker parameters:\n\n```hcl\nmodule \"kafka\" {\n  source = \"github.com/artifactsystems/terraform-huawei-dms?ref=v1.0.0\"\n\n  name = \"tuned-kafka\"\n\n  parameters = [\n    {\n      name  = \"min.insync.replicas\"\n      value = \"2\"\n    },\n    {\n      name  = \"message.max.bytes\"\n      value = \"10485760\"  # 10MB\n    },\n    {\n      name  = \"log.retention.hours\"\n      value = \"168\"  # 7 days\n    },\n    {\n      name  = \"num.partitions\"\n      value = \"3\"\n    }\n  ]\n\n  # ... other configuration\n}\n```\n\n\u003e **Note**: Some parameters are static and require an instance restart to take effect.\n\n## Maintenance Configuration\n\n```hcl\nmodule \"kafka\" {\n  source = \"github.com/artifactsystems/terraform-huawei-dms?ref=v1.0.0\"\n\n  name = \"maintained-kafka\"\n\n  maintain_begin = \"02:00\"  # Maintenance window start (UTC)\n  maintain_end   = \"06:00\"  # Maintenance window end (4 hours later)\n\n  retention_policy  = \"time_base\"     # or \"produce_reject\"\n  enable_auto_topic = true            # Auto-create topics\n\n  # ... other configuration\n}\n```\n\n## High Availability\n\n### Multi-AZ Deployment\n\nDeploy across 3 Availability Zones for production:\n\n```hcl\nmodule \"kafka\" {\n  source = \"github.com/artifactsystems/terraform-huawei-dms?ref=v1.0.0\"\n\n  name       = \"ha-kafka\"\n  broker_num = 6  # 2 brokers per AZ\n\n  availability_zones = [\n    \"tr-west-1a\",\n    \"tr-west-1b\",\n    \"tr-west-1c\"\n  ]\n\n  # Ensure replicas are in sync\n  parameters = [\n    {\n      name  = \"min.insync.replicas\"\n      value = \"2\"\n    }\n  ]\n\n  # ... other configuration\n}\n```\n\n\u003e **Note**: Kafka requires 1 or 3+ Availability Zones. Do not use exactly 2 AZs.\n\n## Conditional Creation\n\n```hcl\n# Create only Kafka (default behaviour)\nmodule \"kafka\" {\n  source = \"github.com/artifactsystems/terraform-huawei-dms?ref=v1.1.0\"\n\n  create                = true\n  create_kafka_instance = true\n\n  # ... other configuration\n}\n\n# Create only RabbitMQ\nmodule \"rabbitmq\" {\n  source = \"github.com/artifactsystems/terraform-huawei-dms?ref=v1.1.0\"\n\n  create                   = true\n  create_kafka_instance    = false\n  create_rabbitmq_instance = true\n\n  # ... other configuration\n}\n```\n\n## Contributing\n\nReport issues/questions/feature requests in the [issues](https://github.com/artifactsystems/terraform-huawei-dms/issues/new) section.\n\nFull contributing [guidelines are covered here](.github/CONTRIBUTING.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fartifactsystems%2Fterraform-huawei-dms","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fartifactsystems%2Fterraform-huawei-dms","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fartifactsystems%2Fterraform-huawei-dms/lists"}