diff --git a/riffdog/command_line.py b/riffdog/command_line.py
index e3c46df..7009182 100644
--- a/riffdog/command_line.py
+++ b/riffdog/command_line.py
@@ -77,6 +77,7 @@ def _add_core_arguments(parser):
     parser.add_argument('--json', help='Produce Json output rather then Human readble', action='store_const', const=True)  # noqa: E501
     parser.add_argument('--show-matched', help='Shows all resources, including those that matched', action='store_const', const=True)  # noqa: E501
     parser.add_argument('--exclude-resource', help="Excludes a particular resource", action='append', default=[])
+    parser.add_argument('--include-resource', help="Includes a particular resource", action="append", default=[])
     
 
 def main(*args):
@@ -112,6 +113,8 @@ def main(*args):
     config = RDConfig()
 
     config.external_resource_libs += pre_parsed_args.include
+    config.excluded_resources = pre_parsed_args.exclude_resource
+    config.included_resources = pre_parsed_args.include_resource
 
     find_arguments(parser, config.external_resource_libs)
     
diff --git a/riffdog/config.py b/riffdog/config.py
index 4e1d847..d5d3536 100644
--- a/riffdog/config.py
+++ b/riffdog/config.py
@@ -24,8 +24,11 @@ class RDConfig:
 
         @property
         def elements_to_scan(self):
-            return (x for x in self.base_elements_to_scan if x not in self.excluded_resources)
-
+            if self.included_resources:
+                resources = (x for x in self.included_resources)
+            else:
+                resources = (x for x in self.base_elements_to_scan if x not in self.excluded_resources)
+            return resources
 
         def __init__(self):
             # Set defaults and must-have settings
@@ -37,6 +40,7 @@ class RDConfig:
             self.state_file_locations = []
 
             self.excluded_resources = []
+            self.included_resources = []
 
             self.base_elements_to_scan = []
 
diff --git a/riffdog/scanner.py b/riffdog/scanner.py
index bf576bb..f4c1001 100644
--- a/riffdog/scanner.py
+++ b/riffdog/scanner.py
@@ -150,6 +150,7 @@ def _search_state(bucket_name, key, s3):
     obj = s3.Object(bucket_name, key)
     content = obj.get()['Body'].read()
     rd = ResourceDirectory()
+    config = RDConfig()
     parsed = ""
     try:
         parsed = json.loads(content)
@@ -160,11 +161,14 @@ def _search_state(bucket_name, key, s3):
             elements = parsed['modules'][0]['resources'].values()
 
         for res in elements:
-            element = rd.lookup(res['type'])
-            if element:
-                element.process_state_resource(res, key)
+            if res['type'] in config.elements_to_scan:
+                element = rd.lookup(res['type'])
+                if element:
+                    element.process_state_resource(res, key)
+                else:
+                    logging.debug(" Unsupported resource %s" % res['type'])
             else:
-                logging.debug(" Unsupported resource %s" % res['type'])
+                logging.debug("Skipped %s as not in elments to scan" % res['type'])
 
     except Exception as e:
         # FIXME: tighten this up could be - file not Json issue, permission of s3 etc, as well as the terraform state

Revisit `--exclude` and create an `--only` option
Using `--exclude` is more difficult now there are lots of resources - instead we should consider using an `--only` element to specify. 

I don't like the word `--only` though so feedback and ideas here appreciated.
diff --git a/tests/test_data_structures.py b/tests/test_data_structures.py
index fd745ff..cca9100 100644
--- a/tests/test_data_structures.py
+++ b/tests/test_data_structures.py
@@ -14,6 +14,19 @@ class TestRDConfig:
 
         assert list(config.elements_to_scan) == config.base_elements_to_scan[1:]
 
+    def test_include_no_exclude(self):
+        config = RDConfig()
+        config.included_resources = ['aws_bucket']
+
+        assert list(config.elements_to_scan) == config.included_resources
+
+    def test_include_with_excluded(self):
+        config = RDConfig()
+        config.exclude_resources = ['aws_s3_bucket']
+        config.included_resources = ['aws_vpc', 'aws_subnet']
+
+        assert list(config.elements_to_scan) == config.included_resources
+
     def test_singleton(self):
         config = RDConfig()
         config.regions = ['us-east-1', 'eu-west-1']

pip install -e .[aws]
parse_log_pytest
requirements.txt
pytest mock
apt-get update apt-get install -y gcc
3.7
requirements/base.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
boto3==1.33.13
botocore==1.33.13
certifi @ file:///croot/certifi_1671487769961/work/certifi
exceptiongroup==1.2.2
importlib-metadata==6.7.0
iniconfig==2.0.0
jmespath==1.0.1
mock==5.2.0
packaging==24.0
pluggy==1.2.0
pytest==7.4.4
python-dateutil==2.9.0.post0
-e git+https://github.com/riffdog/riffdog.git@588f5c55fba6675868d8c20138647568025c1174#egg=riffdog
riffdog-aws==0.1.0
s3transfer==0.8.2
six==1.17.0
tabulate==0.9.0
tomli==2.0.1
typing_extensions==4.7.1
urllib3==1.26.20
zipp==3.15.0

name: riffdog
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=22.3.1=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - boto3==1.33.13
      - botocore==1.33.13
      - exceptiongroup==1.2.2
      - importlib-metadata==6.7.0
      - iniconfig==2.0.0
      - jmespath==1.0.1
      - mock==5.2.0
      - packaging==24.0
      - pluggy==1.2.0
      - pytest==7.4.4
      - python-dateutil==2.9.0.post0
      - riffdog-aws==0.1.0
      - s3transfer==0.8.2
      - six==1.17.0
      - tabulate==0.9.0
      - tomli==2.0.1
      - typing-extensions==4.7.1
      - urllib3==1.26.20
      - zipp==3.15.0
prefix: /opt/conda/envs/riffdog

tests/test_data_structures.py::TestRDConfig::test_include_no_exclude tests/test_data_structures.py::TestRDConfig::test_include_with_excluded
tests/test_data_structures.py::TestRDConfig::test_exclude_no_elements tests/test_data_structures.py::TestRDConfig::test_exclude_one_element tests/test_data_structures.py::TestRDConfig::test_singleton
riffdog/config.py riffdog/scanner.py riffdog/command_line.py
riffdog/config.py riffdog/scanner.py riffdog/command_line.py