- Fixed bug causing AutoScaling Groups related to Load Balancers to raise a bad resource ID error. Fixes #260.
PartialURN
now throws an error if you pass a non-string as a resource_id_part (Relates to the lamber layers section of #260)ServiceResource.get_urn
now converts integer resource_id_parts to strings (Relates to the lamber layers section of #260)- Ensured lambda layer versions load full metadata with
get_layer_version
call. - Added enum for resource map
ResourceIndependenceType
normalising onbaseResource
rather thanresource
as was used in some places. CloudWandererAWSInterface.get_resource
now throws an error if you try to get a dependent resource as this will causeparent_urn
not to be populated.
- Fix bug where wafv2
RegionalWebAcl
resources would not correctly load their data (Fixes #250) - Made it possible to pass a custom
CustomServiceLoader
intoServiceLoader
- Made it possible to pass an entirely custom (not just relative) path into
CustomServiceLoader
(fixes #249)
- Added
cloudName
to RelationshipSpecification - Updated
relationships
onServiceResource.relationships
to takecloud_name
from theRelationshipSpecification
- Add
get_available_subresources
method toCloudWandererServiceResource
stubs.
- Reinclude py.typed in package
- Added support for
requiresLoad
on base resources.
- Moved account id and enabled region specifications to CloudWanderer3Boto3Session from AWSInterface. Fixes #247
- Allow the setting of
account_id
andenabled_regions
inCloudWandererAWSInterface
if you already know these values and want to avoid unnecessary API calls. - Added the option of passing a
CloudWandererBoto3SessionGetterClientConfig
for configuring internal getter clients inCloudWandererBoto3Session
.
- Fix #242 by moving to using
MANIFEST.in
- Fixed bug preventing
ALL_REGIONS
action templates from being properly inflated
- Added
ResourceIdUniquenessScope
to AWS Interface to ensure that relationship specifications are sufficiently specific to uniquely identify a resource of that type.
- Added Launch Configuration discovery
- Added classic ELB discovery
- Added managed policy relationship to IAM Groups
- Added managed policy relationships to IAM users
- Fixed identity of IAM managed policies incorrectly getting created as Policyname instead of ARN
- Added explanatory error message to GremlinConnnector if an error occurs while saving an attribute that may exceed the
maxContentLength
- Fixed bug causing IAM Policy Versions not to load their policies.
- Filter back in AWS owned Managed Policies by default
- Filter out non-default Policy Versions by default
- Added ability to override URN parts via a regex pattern (used for AWS Managed IAM Policies)
- Added per-execution resource filtering
- Changed default filtering for IAM policies to include AWS managed policies
- Fixed bug causing secondary attributes to be fetched twice.
- Added relationship between roles and managed policies
- Removed secondary attribute of inline role policy attachments
- Fixed secondary attribute of managed role policy attachments
- Added tests for IAM roles
- Fixed nonfunctional
read_all
method onGremlinStorageConnector
- Added RDS Clusters
- Added RDS Instances
- Fixed bug in GremlinStorageConnector causing edges to be cleaned up erroneously
- Gremlin storage connector now cleans up edges (relationships) that a resource had previously but no longer has.
- Fixed json files not being included
- Added
read_resource
toGremlinStorageConnector
- Change target health from a secondary attribute to a dependent resource
- Added test call validation to custom resources not calling paginated methods
- Fix typo in relationship between igw and route
- Dispense with wrapper methods and instead subclass the boto3 resource factory so we can create new methods directly on the ServiceResource objects.
- Added Gremlin GraphDB storage connector
- Added
requiresLoadForFullMetadata
to service mappings. Allows resources like Regional WebACLs to declare that they get impoverished data from their list operation and needresource.load()
called to fetch all info. - Added support for services which have both regional and global resources
- Moved get_and_cleanup_actions from CloudWandererBoto3Resource to ResourceMap
- Added Resource Filtering options to flexibly filter out resources you're not interested in.
- Added ec2 nat gateways
- Added ec2 egress only internet gateways
- Added ec2 vpn gateways
- Added ec2 vpn customer gateways
- Added ec2 vpn connections
- Added wafv2 regional web acls
- Added ec2 vpc endpoints support
- Added ec2 vpc endpoint services support
- Added ec2 elastic IP support
- Added elbv2 target group support
- Added elbv2 load balancer support
- Fixed memory leak due where decorating with
lru_cache
caused old objects' caches not to be garbage collected.
- Allow subresources in
write_resource
- Escaped URNs with forward slashes
- Provided way to explicitly specify base resources with multiple identifiers as a base resource.
- URNs are now made up of unlimited resource ids aka
resource_id_parts
. - URNs now have a
resource_id_parts_parsed
which will attempt to convert non-string id parts into their appropriate type (fixing a bug preventing us from getting lambda layer versions from URN) - Added Boto3 resource/service definitions as part of service maps as the first steps to making service maps wrap Boto3 definitions fully.
- Resources and subresources no longer have to have specific numbers of identifiers, fixing a bug that caused Cloudwatch Metrics to be misidentified as a subresource.
- Service and Resource maps now have a
boto3_definition
attribute which is the start of the work to have service maps properly superordinate to Boto3 definitions. resource_summary
now includes more detailed information about subresourcesCloudWandererResource
now generatesparent_urn
property from service mapping data using its newsboto3_definition
property.
- Added AutoScalingGroup fixing #123
- Added load operation for lambda layer versions
- Added
lambda
layer
resource type. - Added
lambda
layer_version
subresource type. - Added
py.typed
for PEP561 support. - Added documentation on writing custom resource definitions.
- Fixed bug where resources could not build URNs if they had non-string ID components.
- Implemented
mypy
type checking - Corrected a huge number of type hints
- Reformalised arguments for
get_resources
on storage_connectors. - Fixed DynamoDB pagination
- Added
parent_urn
andsubresource_urn
properties to theCloudWanderResource
class. - Added new DynamoDB secondary index
parent_urn
- Fixed bug where subresources were not cleaned up when
write_resource
was called onCloudWanderer
- Stripped out DynamoDB record specific attributes which were polluting Secondary Attributes dictionaries.
- Changed
AWSInterface
get_resources
to expect specific service, resource type, region arguments instead of reusing the arguments from CloudWandererwrite_resources
. - Added
get_actions
toAWSInterface
which returns a list ofGetAndCleanUp
objects which pairGetAction
s andCleanUpAction
s. - CloudWanderer's
write_resources
now contains the logic for iterating over eachGetAction
, callingget_resources
onAWSInterface
and callingdelete_resource_of_type_in_account_region
on each StorageConnector in accordance with theCleanUpAction
. - Added
get_and_cleanup_actions
property toCloudWandererBoto3Resource
so the responsibility for definingGetAndCleanUp
objects resides with the resource. This provides maximum flexibility for asymmetric region/resource discovery (like S3 buckets). - Added
get_empty_service
toBoto3Services
to minimise the number of unnecessary (and expensive) Boto3 client creations when generating get and cleanup actions.
- Fixed bug causing subresources to inherit the secondary attributes of their parent resource erroneously.
- Fixed bug that prevented global services with regional resources being cleaned up properly.
- Fixed bug that prevented subresources from being cleaned up.
- Subresources are now written by
write_resource
.
- Added
get_resource
toCloudWanderer
to allow the writing of a single resource based on its URN - Added
get_resource
toCloudWandererAWSInterface
to allow the getting of a single resource based on its URN - Added
get_resource_by_urn
toBoto3Getter
to supportCloudWandererAWSInterface
- Normalised custom error exception names to have Error at the end as per PEP8
- Renamed
CloudWandererBoto3Interface
toCloudWandererAWSInterface
- Renamed
AwsUrn
toURN
- Added
storage_connector_generator
towrite_resources_concurrently
to handle non thread safe storage connectors (hopefully fixing #86) - Refactored
Boto3Getter
into service and resource oriented wrappers for Boto3 objects to make it more domain drive and easier to understand. - Added support for Boto3 subresources (where they match the CloudWanderer definition of a subresource)
- Changed the way
exclude_resources
works so you can differentiate between CloudFormation Stacks and OpsWorks Stacks #70 - Formalised the interface between the
CloudInterface
>CloudWanderer
>StorageConnector
by converting Boto3 resources toCloudWandererResources
- Removed
write_secondary_attributes
fromBaseStorageConnector
as it's no longer required to be public.
- Removed
- Added
name
argument toget_secondary_attribute
allowing you to get secondary attributes by name. - Ensured that all resource attributes that can exist do exist when
CloudWandererResource
returned fromCloudWandererBoto3Interface
, irrespective of whether they were returned in that particular API call.
- apigateway rest_api
- secretsmanager secret
- Collapsed all
write_secondary_attributes
methods intowrite_resources
so secondary attributes are written automatically. - Moved AWS specific methods to
CloudWandererBoto3Interface
- Fixed bug that would have prevented global services with regional resources being cleaned properly.
This was due to cleanup only happening in the global service region, and being limited to
cleaning up resources in that region. E.g. it would write buckets from all regions from
us-east-1
and then only cleanupus-east-1
s3 buckets. - Removed
client_args
as an explicit argument on cloudwanderer resources, any keywords args supplied towrite_
methods are now passed into theget_
methods of thecloud_interface
- Subresources now build their compound id using a
/
separator rather than a:
separator. This ensures that:
remains the primary separator for URN parts.
- Reuse service definition objects via
_get_resource_definitions
to save on time spent reinstantiating identical objects - Only instantiate the default
ServiceMapping
fromget_service_mapping
if it's required. - Reduced number of regions tested from all to 3.
- S3 buckets and other regional resources of global services will now only be written in their service's globalRegion
- Fixed bug where AWSUrn did not parse subresources URNs correctly
- Improved cloudwanderer tests by leveraging
MemoryStorageConnector
- Added
role_managed_policy_attachments
secondary attribute - Added
role_inline_policy_attachments
secondary attribute - Collapsed secondary attribute definitions into custom resource definitions
- Collapsed boto3 resources into custom resource definitions
- Abstracted GlobalServiceMaps to ServiceMaps as supporting metadata CloudWanderer needs to understand resources
- Resources with multple identifiers now include all identifiers as part of the AWSUrn
- Split out experimental concurrency into separate
write_resources_concurrently
method.
- Added
get_secondary_attribute
toCloudWandererResource
- Added
is_inflated
toCloudWandererResource
- Storage Standardisation improvements
- Standardised storage connector write tests
- Deleted duplicate read tests
- Added
write_resource_attribute
toBaseStorageConnector
- Added
write_resource_attribute
toMemoryStorageConnector
- Renamed
resource_attributes
tosecondary_attributes
- Fixed bug where
write_secondary_attributes
would enumerate services which did not have secondary attributes.
- Added support for multiple storage connectors
- Made Storage Connectors the primary interface for reading from storage
read_resource
on DynamoDbStorageConnector returns aCloudWandererResource
instead of an iterator.read_resource
on MemoryStorageConnector returns aCloudWandererResource
instead of an iterator.- Added
read_resources
to DynamoDbStorageConnector - Added
read_resources
to MemoryStorageConnector - Removed
read_resource_of_type
from DynamoDBStorageConnector - Removed
read_resource_of_type_in_account
from DynamoDBStorageConnector - Removed
read_all_resources_in_account
from DynamoDBStorageConnector - Removed
read_resource_of_type
from BaseStorageConnector - Removed
read_resource_of_type_in_account
from BaseStorageConnector - Removed
read_all_resources_in_account
from BaseStorageConnector - Removed
read_resource_of_type
from MemoryStorageConnector - Removed
read_resource_of_type_in_account
from MemoryStorageConnector - Removed
read_all_resources_in_account
from MemoryStorageConnector - Removed
read_resource_of_type
from CloudWanderer - Removed
read_resource
from CloudWanderer - Removed
read_all_resources_in_account
from CloudWanderer - Removed
read_resource_of_type_in_account
from CloudWanderer
- Added dynamodb filter expressions to increase flexibility of
get_resources
- Added attribute projections for urn parts to DynamoDB Global Secondary Indexes
- Bugfix Memory Storage Connector to return None from
read_resource
- Added MemoryStorageConnector (useful for testing)
- Added
load
method toCloudWandererResource
- Added
load
support toMemoryStorageConnector
- Added
load
support toDynamoDbConnector
- Fetch region information for semi-global resources like S3 buckets using
GlobalServiceMapping
objects. - Identify global services and their primary region using
GlobalServiceMapping
objects. - No longer queries services which do not exist in the region being queried
- No longer writes resources which do not exist in the region being queried
- Added type hints
- Added client_args
- Added
write_all_resource_attributes
- Added
write_resource_attributes_of_type
- Made
CustomResourceDefinitions
work more like aServiceResource
object with aresource()
method - Renamed
write_all_resources
towrite_resources_in_region
- Renamed
write_resources
towrite_resources_of_service_in_region
- Renamed
write_resources_of_type
towrite_resources_of_type_in_region
- Renamed
write_all_resource_attributes
towrite_resource_attributes_in_region
- Renamed
write_resource_attributes
towrite_resource_attributes_of_service_in_region
- Renamed
write_resource_attributes_of_type
towrite_resource_attributes_of_type_in_region
- Added
write_resources
which pulls resources from all regions. - Added
write_resource_attributes
which pulls resource attributes from all regions. - Handle
EndpointConnectionError
s which occur when a service is not supported in a region. - Added experimental multithreading support
- Updated logger to log to filename logger rather than
root
- Add tests for storage connector
- Fixed return of read_all on storage connector
- Added delete_resource on storage connector
- Added delete_resource_of_type_in_account_region on storage connector
- write_resources in CloudWanderer now deletes resources which no longer exist.
- Added param for number_of_shards for dynamodb connector rather than hardcoding it.
- Introduced more structured
CloudWandererResource
result object to ensure resource attribute keys don't clash with resource keys. - Refactored
CloudWanderer
main class and abstracted much of it intoCloudWandererInterface
- Added boto3
Sesssion
support to allow passing of non-default credentials and configuration options.