diff --git a/docs/data-sources/apig_groups.md b/docs/data-sources/apig_groups.md
new file mode 100644
index 00000000..6d2f9fe1
--- /dev/null
+++ b/docs/data-sources/apig_groups.md
@@ -0,0 +1,123 @@
+---
+subcategory: "API Gateway (Dedicated APIG)"
+---
+
+# flexibleengine_apig_groups
+
+Use this data source to query and filter the group list under the APIG instance within FlexibleEngine.
+
+## Example Usage
+
+```hcl
+variable "instance_id" {}
+variable "group_name" {}
+
+data "flexibleengine_apig_groups" "test" {
+ instance_id = var.instance_id
+ name = var.group_name
+}
+```
+
+## Argument Reference
+
+The following arguments are supported:
+
+* `region` - (Optional, String) Specifies the region in which to query the API group list.
+ If omitted, the provider-level region will be used.
+
+* `instance_id` - (Required, String) Specifies an ID of the APIG dedicated instance to which the API group belongs.
+
+* `group_id` - (Optional, String) Specifies the API group ID used to query.
+
+* `name` - (Optional, String) Specifies the API group name used to query.
+
+## Attribute Reference
+
+In addition to all arguments above, the following attributes are exported:
+
+* `id` - Data source ID.
+
+* `groups` - All groups that match the filter parameters.
+ The [groups](#APIG_Groups) structure is documented below.
+
+
+The `groups` block supports:
+
+* `id` - The API group ID.
+
+* `name` - The API group name.
+
+* `status` - The current status of the API group.
+ The valid values are as follows:
+ + **1**: Normal.
+
+* `sl_domain` - The subdomain name assigned by the system by default.
+
+* `created_at` - The creation time of the API group.
+
+* `updated_at` - The latest update time of the API group.
+
+* `on_sell_status` - Whether it has been listed on the cloud store.
+ The valid values are as follows:
+ + **1**: Listed.
+ + **2**: Not listed.
+ + **3**: Under review.
+
+* `url_domains` - List of independent domains bound on the API group.
+ The [url_domains](#APIG_Groups_urlDomains) structure is documented below.
+
+* `sl_domains` - List of subdomain names assigned by the system by default.
+
+* `description` - The description of the API group.
+
+* `is_default` - Indicates whether the API group is the default group.
+
+* `environment` - The array of one or more environments of the API group.
+ The [environment](#APIG_Groups_environment_attr) structure is documented below.
+
+
+The `url_domains` block supports:
+
+* `id` - The domain ID.
+
+* `name` - The domain name.
+
+* `cname_status` - CNAME resolution status of the domain name.
+ The valid values are as follows:
+ + **1**: Not resolved.
+ + **2**: Resolving.
+ + **3**: Resolved.
+ + **4**: Resolution failed.
+
+* `ssl_id` - The SSL certificate ID.
+
+* `ssl_name` - The SSL certificate name.
+
+* `min_ssl_version` - Minimum SSL version. The default is **TLSv1.1**.
+ The valid values are as follows:
+ + **TLSv1.1**
+ + **TLSv1.2**
+
+* `verified_client_certificate_enabled` - Whether to enable client certificate verification.
+ This parameter is available only when a certificate is bound. It is enabled by default if trusted_root_ca exists,
+ and disabled if trusted_root_ca does not exist. The default is **false**.
+
+* `is_has_trusted_root_ca` - Whether a trusted root certificate (CA) exists. The value is true
+ if trusted_root_ca exists in the bound certificate. The default is **false**.
+
+
+The `environment` block supports:
+
+* `variable` - The array of one or more environment variables.
+ The [variable](#APIG_Groups_environment_variable_attr) structure is documented below.
+
+* `environment_id` - The ID of the environment to which the variables belong.
+
+
+The `variable` block supports:
+
+* `name` - The variable name.
+
+* `value` - The variable value.
+
+* `id` - The variable ID.
diff --git a/flexibleengine/acceptance/data_source_flexibleengine_apig_groups_test.go b/flexibleengine/acceptance/data_source_flexibleengine_apig_groups_test.go
new file mode 100644
index 00000000..21e9b81f
--- /dev/null
+++ b/flexibleengine/acceptance/data_source_flexibleengine_apig_groups_test.go
@@ -0,0 +1,136 @@
+package acceptance
+
+import (
+ "fmt"
+ "testing"
+
+ "github.com/hashicorp/go-uuid"
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
+
+ "github.com/huaweicloud/terraform-provider-huaweicloud/huaweicloud/services/acceptance"
+)
+
+func TestAccGroupsDataSource_basic(t *testing.T) {
+ var (
+ dataSourceName = "data.flexibleengine_apig_groups.filter_by_name"
+ rName = acceptance.RandomAccResourceName()
+ dc = acceptance.InitDataSourceCheck(dataSourceName)
+ )
+
+ resource.ParallelTest(t, resource.TestCase{
+ PreCheck: func() {
+ testAccPreCheck(t)
+ },
+ ProviderFactories: TestAccProviderFactories,
+ Steps: []resource.TestStep{
+ {
+ Config: testAccGroupsDataSource_filterByName(rName),
+ Check: resource.ComposeTestCheckFunc(
+ dc.CheckResourceExists(),
+ resource.TestCheckOutput("is_name_filter_useful", "true"),
+ resource.TestCheckOutput("not_found_validation_pass", "true"),
+ ),
+ },
+ },
+ })
+}
+
+func testAccGroupsDataSource_filterByName(name string) string {
+ return fmt.Sprintf(`
+%[1]s
+
+data "flexibleengine_apig_groups" "filter_by_name" {
+ // The behavior of parameter 'name' is 'Required', means this parameter does not have 'Know After Apply' behavior.
+ depends_on = [
+ flexibleengine_apig_group.test,
+ ]
+
+ instance_id = flexibleengine_apig_instance.test.id
+ name = flexibleengine_apig_group.test.name
+}
+
+data "flexibleengine_apig_groups" "not_found" {
+ // Since a specified name is used, there is no dependency relationship with resource attachment, and the dependency
+ // needs to be manually set.
+ depends_on = [
+ flexibleengine_apig_group.test,
+ ]
+
+ instance_id = flexibleengine_apig_instance.test.id
+ name = "resource_not_found"
+}
+
+locals {
+ filter_result = [for v in data.flexibleengine_apig_groups.filter_by_name.groups[*].id : v == flexibleengine_apig_group.test.id]
+}
+
+output "is_name_filter_useful" {
+ value = alltrue(local.filter_result) && length(local.filter_result) > 0
+}
+
+output "not_found_validation_pass" {
+ value = length(data.flexibleengine_apig_groups.not_found.groups) == 0
+}
+`, testAccApigGroup_basic(name))
+}
+
+func TestAccGroupsDataSource_filterById(t *testing.T) {
+ var (
+ dataSourceName = "data.flexibleengine_apig_groups.filter_by_id"
+ rName = acceptance.RandomAccResourceName()
+ dc = acceptance.InitDataSourceCheck(dataSourceName)
+ )
+
+ resource.ParallelTest(t, resource.TestCase{
+ PreCheck: func() {
+ testAccPreCheck(t)
+ },
+ ProviderFactories: TestAccProviderFactories,
+ Steps: []resource.TestStep{
+ {
+ Config: testAccGroupsDataSource_filterById(rName),
+ Check: resource.ComposeTestCheckFunc(
+ dc.CheckResourceExists(),
+ resource.TestCheckOutput("is_id_filter_useful", "true"),
+ resource.TestCheckOutput("not_found_validation_pass", "true"),
+ ),
+ },
+ },
+ })
+}
+
+func testAccGroupsDataSource_filterById(name string) string {
+ randUUID, _ := uuid.GenerateUUID()
+
+ return fmt.Sprintf(`
+%[1]s
+
+data "flexibleengine_apig_groups" "filter_by_id" {
+ instance_id = flexibleengine_apig_instance.test.id
+ group_id = flexibleengine_apig_group.test.id
+}
+
+data "flexibleengine_apig_groups" "not_found" {
+ // Since a random ID is used, there is no dependency relationship with resource attachment, and the dependency needs
+ // to be manually set.
+ depends_on = [
+ flexibleengine_apig_group.test,
+ ]
+
+ instance_id = flexibleengine_apig_instance.test.id
+ group_id = "%[2]s"
+}
+
+locals {
+ filter_result = [for v in data.flexibleengine_apig_groups.filter_by_id.groups[*].id : v == flexibleengine_apig_group.test.id]
+}
+
+output "is_id_filter_useful" {
+ value = alltrue(local.filter_result) && length(local.filter_result) > 0
+}
+
+output "not_found_validation_pass" {
+ value = length(data.flexibleengine_apig_groups.not_found.groups) == 0
+}
+`, testAccApigGroup_basic(name), randUUID)
+}
diff --git a/flexibleengine/provider.go b/flexibleengine/provider.go
index 447acff7..812c357a 100644
--- a/flexibleengine/provider.go
+++ b/flexibleengine/provider.go
@@ -282,6 +282,7 @@ func Provider() *schema.Provider {
// importing new data source
"flexibleengine_apig_environments": apig.DataSourceEnvironments(),
+ "flexibleengine_apig_groups": apig.DataSourceGroups(),
"flexibleengine_as_configurations": as.DataSourceASConfigurations(),
"flexibleengine_as_groups": as.DataSourceASGroups(),