Skip to content

Support batch secrets retrieval in Parameters module  #1530

Open
@jeromevdl

Description

@jeromevdl

Is your feature request related to a problem? Please describe.
N/A

Describe the solution you'd like
Add support for https://aws.amazon.com/about-aws/whats-new/2023/11/aws-secrets-manager-batch-retrieval-secrets/ in Parameters module.

Activity

scottgerring

scottgerring commented on Nov 30, 2023

@scottgerring
Contributor

This can be done in the v2 branch once #1403 is merged. It will be a good first issue at that point.

added this to the v2 milestone on Dec 21, 2023
jreijn

jreijn commented on Jan 31, 2024

@jreijn
Contributor

@scottgerring @jeromevdl I would like to pick this up if possible. It seems #1403 has been merged, so good to go?

jreijn

jreijn commented on Jan 31, 2024

@jreijn
Contributor

I took a look at the code base and started with some minor improvements. I noticed that the getValue and the existing getMultipleValues exists, however the later on is now based on path now. I'm thinking of renaming the getMultipleValues to getMultipleValuesByPath and introduce a new method on the BaseProvider called getMultipleValuesByKey(List keys). That way we can support both use cases.
For the new method, I'll see if I can implement a solution in all the providers.

scottgerring

scottgerring commented on Feb 7, 2024

@scottgerring
Contributor

Hey @jreijn happy for you to pick this up - I will assign it to you.
I'll take some time tomorrow morning to look at the current ...multipleValues interface and write back!

scottgerring

scottgerring commented on Feb 8, 2024

@scottgerring
Contributor

v2 getMultipleValues impls

1. AppConfigProvider - unsupported

protected Map<String, String> getMultipleValues(String path) {
// Retrieving multiple values is not supported with the AppConfig provider.
throw new RuntimeException(
"Retrieving multiple parameter values is not supported with the AWS App Config Provider");
}

2. DynamoDbProvider

Retrieves all values that share the same partition key.

protected Map<String, String> getMultipleValues(String path) {
QueryResponse resp = client.query(QueryRequest.builder()
.tableName(tableName)
.keyConditionExpression("id = :v_id")
.expressionAttributeValues(Collections.singletonMap(":v_id", AttributeValue.fromS(path)))
.build());

3. SSMProvider

Retrieves either everything at the given level of the /parameter/hierarchy, or everything at the given level plus /parameter/hierarchy/nested/levels when using withRecursive.

private Map<String, String> getMultipleBis(String path, String nextToken) {
GetParametersByPathRequest request = GetParametersByPathRequest.builder()
.path(path)
.withDecryption(decrypt)
.recursive(recursive)
.nextToken(nextToken)
.build();

Both the existing implementations - DDB and SSM provider - already vary a little - SSM is path-based, DDB is more like, common key. I'm a bit hesitant to change the existing method name because 1/ its not path-based in both cases and 2/ it's a breaking change against v1 which wouldn't add much. What do you think?

Maybe rather than changing the existing interface, we could add getMultipleValuesByKey(keys) on the BaseProvider, provide a default impl that simply maps getValue over the keys, and then override in SSMProvider ?

Thoughts @jreijn / @jeromevdl ?

jreijn

jreijn commented on Feb 8, 2024

@jreijn
Contributor

@scottgerring sounds reasonable. I also noticed that lambda powertools in other languages do something similar. I'll make some small commits while I go along, so I can get some feedback along the way.

moved this from Triage to Backlog in Powertools for AWS Lambda (Java)on Mar 11, 2025
removed this from the v2 milestone on Apr 11, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

Status

Backlog

Milestone

No milestone

Relationships

None yet

    Development

    No branches or pull requests

      Participants

      @jeromevdl@scottgerring@jreijn@phipag

      Issue actions

        Support batch secrets retrieval in Parameters module · Issue #1530 · aws-powertools/powertools-lambda-java