Skip to content

Commit 0d68f59

Browse files
authored
docs(parameters): main docs for the utility (#1215)
* docs: added main section, SSMProvider, transform, and config * chore: added missing new in front of constructor * docs: added SecretsProvider sections * docs: fixes * docs: added DynamoDBProvider * docs: completed first version of docs * docs: extract code snippets * docs: review comments
1 parent d8e8d38 commit 0d68f59

28 files changed

+792
-0
lines changed

Diff for: docs/snippets/parameters/adjustingCacheTTL.ts

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { SSMProvider } from '@aws-lambda-powertools/parameters/ssm';
2+
3+
const parametersProvider = new SSMProvider();
4+
5+
export const handler = async (): Promise<void> => {
6+
// Retrieve a single parameter
7+
const parameter = await parametersProvider.get('/my/parameter', { maxAge: 60 }); // 1 minute
8+
console.log(parameter);
9+
10+
// Retrieve multiple parameters from a path prefix
11+
const parameters = await parametersProvider.getMultiple('/my/path/prefix', { maxAge: 120 }); // 2 minutes
12+
for (const [ key, value ] of Object.entries(parameters || {})) {
13+
console.log(`${key}: ${value}`);
14+
}
15+
};

Diff for: docs/snippets/parameters/appConfigProvider.ts

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { AppConfigProvider } from '@aws-lambda-powertools/parameters/appconfig';
2+
import type { AppConfigDataClientConfig } from '@aws-sdk/client-appconfigdata';
3+
4+
const clientConfig: AppConfigDataClientConfig = { region: 'us-east-1' };
5+
const configsProvider = new AppConfigProvider({
6+
application: 'my-app',
7+
environment: 'my-env',
8+
clientConfig,
9+
});
10+
11+
export const handler = async (): Promise<void> => {
12+
// Retrieve a config
13+
const config = await configsProvider.get('my-config');
14+
console.log(config);
15+
};
+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { AppConfigProvider } from '@aws-lambda-powertools/parameters/appconfig';
2+
import { AppConfigDataClient } from '@aws-sdk/client-appconfigdata';
3+
4+
// construct your clients with any custom configuration
5+
const appConfigClient = new AppConfigDataClient({ region: 'us-east-1' });
6+
// pass the client to the provider
7+
const configsProvider = new AppConfigProvider({ awsSdkV3Client: appConfigClient });
8+
9+
export const handler = async (): Promise<void> => {
10+
const config = await configsProvider.get('my-config');
11+
console.log(config);
12+
};

Diff for: docs/snippets/parameters/clientConfig.ts

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { SSMProvider } from '@aws-lambda-powertools/parameters/ssm';
2+
import type { SSMClientConfig } from '@aws-sdk/client-ssm';
3+
4+
const clientConfig: SSMClientConfig = { region: 'us-east-1' };
5+
const parametersProvider = new SSMProvider({ clientConfig });
6+
7+
export const handler = async (): Promise<void> => {
8+
// Retrieve a single parameter
9+
const value = await parametersProvider.get('/my/parameter');
10+
console.log(value);
11+
};

Diff for: docs/snippets/parameters/dynamoDBProvider.ts

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { DynamoDBProvider } from '@aws-lambda-powertools/parameters/dynamodb';
2+
3+
const dynamoDBProvider = new DynamoDBProvider({ tableName: 'my-table' });
4+
5+
export const handler = async (): Promise<void> => {
6+
// Retrieve a value from DynamoDB
7+
const value = await dynamoDBProvider.get('my-parameter');
8+
console.log(value);
9+
};
+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { DynamoDBProvider } from '@aws-lambda-powertools/parameters/dynamodb';
2+
import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
3+
4+
// construct your clients with any custom configuration
5+
const dynamoDBClient = new DynamoDBClient({ region: 'us-east-1' });
6+
// pass the client to the provider
7+
const valuesProvider = new DynamoDBProvider({ awsSdkV3Client: dynamoDBClient });
8+
9+
export const handler = async (): Promise<void> => {
10+
// Retrieve a single value
11+
const value = await valuesProvider.get('my-value');
12+
console.log(value);
13+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { DynamoDBProvider } from '@aws-lambda-powertools/parameters/dynamodb';
2+
3+
const dynamoDBProvider = new DynamoDBProvider({
4+
tableName:'my-table',
5+
keyAttr:'key',
6+
sortAttr:'sort',
7+
valueAttr:'val'
8+
});
9+
10+
export const handler = async (): Promise<void> => {
11+
const value = await dynamoDBProvider.get('my-parameter');
12+
console.log(value);
13+
};

Diff for: docs/snippets/parameters/dynamoDBProviderLocal.ts

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { DynamoDBProvider } from '@aws-lambda-powertools/parameters/dynamodb';
2+
3+
const dynamoDBProvider = new DynamoDBProvider({
4+
tableName: 'my-table',
5+
clientConfig: {
6+
endpoint: 'http://localhost:8000'
7+
},
8+
});
9+
10+
export const handler = async (): Promise<void> => {
11+
// Retrieve a value from DynamoDB
12+
const value = await dynamoDBProvider.get('my-parameter');
13+
console.log(value);
14+
};

Diff for: docs/snippets/parameters/dynamoDBProviderMultiple.ts

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { DynamoDBProvider } from '@aws-lambda-powertools/parameters/dynamodb';
2+
3+
const dynamoDBProvider = new DynamoDBProvider({ tableName: 'my-table' });
4+
5+
export const handler = async (): Promise<void> => {
6+
/**
7+
* Retrieve multiple values by performing a Query on the DynamoDB table.
8+
* This returns a dict with the sort key attribute as dict key.
9+
*/
10+
const values = await dynamoDBProvider.getMultiple('my-hash-key');
11+
for (const [ key, value ] of Object.entries(values || {})) {
12+
// key: param-a
13+
// value: my-value-a
14+
console.log(`${key}: ${value}`);
15+
}
16+
};

Diff for: docs/snippets/parameters/forceFetch.ts

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { getParameter } from '@aws-lambda-powertools/parameters/ssm';
2+
3+
export const handler = async (): Promise<void> => {
4+
// Retrieve a single parameter
5+
const parameter = await getParameter('/my/parameter', { forceFetch: true });
6+
console.log(parameter);
7+
};

Diff for: docs/snippets/parameters/getAppConfig.ts

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { getAppConfig } from '@aws-lambda-powertools/parameters/appconfig';
2+
3+
export const handler = async (): Promise<void> => {
4+
// Retrieve a configuration, latest version
5+
const config = await getAppConfig('my-configuration', {
6+
environment: 'my-env',
7+
application: 'my-app'
8+
});
9+
console.log(config);
10+
};

Diff for: docs/snippets/parameters/getParameter.ts

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { getParameter } from '@aws-lambda-powertools/parameters/ssm';
2+
3+
export const handler = async (): Promise<void> => {
4+
// Retrieve a single parameter
5+
const parameter = await getParameter('/my/parameter');
6+
console.log(parameter);
7+
};

Diff for: docs/snippets/parameters/getParameters.ts

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { getParameters } from '@aws-lambda-powertools/parameters/ssm';
2+
3+
export const handler = async (): Promise<void> => {
4+
/**
5+
* Retrieve multiple parameters from a path prefix recursively.
6+
* This returns an object with the parameter name as key
7+
*/
8+
const parameters = await getParameters('/my/path/prefix');
9+
for (const [ key, value ] of Object.entries(parameters || {})) {
10+
console.log(`${key}: ${value}`);
11+
}
12+
};

Diff for: docs/snippets/parameters/getParametersByName.ts

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { getParametersByName } from '@aws-lambda-powertools/parameters/ssm';
2+
import type {
3+
SSMGetParametersByNameOptionsInterface
4+
} from '@aws-lambda-powertools/parameters/ssm';
5+
6+
const props: Record<string, SSMGetParametersByNameOptionsInterface> = {
7+
'/develop/service/commons/telemetry/config': { maxAge: 300, transform: 'json' },
8+
'/no_cache_param': { maxAge: 0 },
9+
'/develop/service/payment/api/capture/url': {}, // When empty or undefined, it uses default values
10+
};
11+
12+
export const handler = async (): Promise<void> => {
13+
// This returns an object with the parameter name as key
14+
const parameters = await getParametersByName(props, { maxAge: 60 });
15+
for (const [ key, value ] of Object.entries(parameters)) {
16+
console.log(`${key}: ${value}`);
17+
}
18+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { getParametersByName } from '@aws-lambda-powertools/parameters/ssm';
2+
import type {
3+
SSMGetParametersByNameOptionsInterface
4+
} from '@aws-lambda-powertools/parameters/ssm';
5+
6+
const props: Record<string, SSMGetParametersByNameOptionsInterface> = {
7+
'/develop/service/commons/telemetry/config': { maxAge: 300, transform: 'json' },
8+
'/this/param/does/not/exist': {}, // <- Example of non-existent parameter
9+
};
10+
11+
export const handler = async (): Promise<void> => {
12+
const {
13+
_errors: errors,
14+
...parameters
15+
} = await getParametersByName(props, { throwOnError: false });
16+
17+
// Handle gracefully, since `/this/param/does/not/exist` will only be available in `_errors`
18+
if (errors && errors.length) {
19+
console.error(`Unable to retrieve parameters: ${errors.join(',')}`);
20+
}
21+
22+
for (const [ key, value ] of Object.entries(parameters)) {
23+
console.log(`${key}: ${value}`);
24+
}
25+
};

Diff for: docs/snippets/parameters/getSecret.ts

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { getSecret } from '@aws-lambda-powertools/parameters/secrets';
2+
3+
export const handler = async (): Promise<void> => {
4+
// Retrieve a single secret
5+
const secret = await getSecret('my-secret');
6+
console.log(secret);
7+
};

Diff for: docs/snippets/parameters/sdkOptions.ts

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { SecretsProvider } from '@aws-lambda-powertools/parameters/secrets';
2+
import type { GetSecretValueCommandInput } from '@aws-sdk/client-secrets-manager';
3+
4+
const secretsProvider = new SecretsProvider();
5+
6+
export const handler = async (): Promise<void> => {
7+
const sdkOptions: Partial<GetSecretValueCommandInput> = {
8+
VersionId: 'e62ec170-6b01-48c7-94f3-d7497851a8d2'
9+
};
10+
/**
11+
* The 'VersionId' argument will be passed to the underlying
12+
* `GetSecretValueCommand` call.
13+
*/
14+
const secret = await secretsProvider.get('my-secret', { sdkOptions });
15+
console.log(secret);
16+
};

Diff for: docs/snippets/parameters/secretsProvider.ts

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { SecretsProvider } from '@aws-lambda-powertools/parameters/secrets';
2+
import type { SecretsManagerClientConfig } from '@aws-sdk/client-secretsmanager';
3+
4+
const clientConfig: SecretsManagerClientConfig = { region: 'us-east-1' };
5+
const secretsProvider = new SecretsProvider({ clientConfig });
6+
7+
export const handler = async (): Promise<void> => {
8+
// Retrieve a single secret
9+
const secret = await secretsProvider.get('my-secret');
10+
console.log(secret);
11+
};
+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { SecretsProvider } from '@aws-lambda-powertools/parameters/secrets';
2+
import { SecretsManagerClient } from '@aws-sdk/client-secrets-manager';
3+
4+
// construct your clients with any custom configuration
5+
const secretsManagerClient = new SecretsManagerClient({ region: 'us-east-1' });
6+
// pass the client to the provider
7+
const secretsProvider = new SecretsProvider({ awsSdkV3Client: secretsManagerClient });
8+
9+
export const handler = async (): Promise<void> => {
10+
// Retrieve a single secret
11+
const secret = await secretsProvider.get('my-secret');
12+
console.log(secret);
13+
};

Diff for: docs/snippets/parameters/ssmProvider.ts

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { SSMProvider } from '@aws-lambda-powertools/parameters/ssm';
2+
import type { SSMClientConfig } from '@aws-sdk/client-ssm';
3+
4+
const clientConfig: SSMClientConfig = { region: 'us-east-1' };
5+
const parametersProvider = new SSMProvider({ clientConfig });
6+
7+
export const handler = async (): Promise<void> => {
8+
// Retrieve a single parameter
9+
const parameter = await parametersProvider.get('/my/parameter');
10+
console.log(parameter);
11+
12+
// Retrieve multiple parameters from a path prefix
13+
const parameters = await parametersProvider.getMultiple('/my/path/prefix');
14+
for (const [ key, value ] of Object.entries(parameters || {})) {
15+
console.log(`${key}: ${value}`);
16+
}
17+
};

Diff for: docs/snippets/parameters/ssmProviderCustomClient.ts

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { SSMProvider } from '@aws-lambda-powertools/parameters/ssm';
2+
import { SSMClient } from '@aws-sdk/client-ssm';
3+
4+
// construct your clients with any custom configuration
5+
const ssmClient = new SSMClient({ region: 'us-east-1' });
6+
// pass the client to the provider
7+
const parametersProvider = new SSMProvider({ awsSdkV3Client: ssmClient });
8+
9+
export const handler = async (): Promise<void> => {
10+
// Retrieve a single parameter
11+
const parameter = await parametersProvider.get('/my/parameter');
12+
console.log(parameter);
13+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { SSMProvider } from '@aws-lambda-powertools/parameters/ssm';
2+
3+
const parametersProvider = new SSMProvider();
4+
5+
export const handler = async (): Promise<void> => {
6+
const decryptedValue = await parametersProvider.get('/my/encrypted/parameter', { decrypt: true });
7+
console.log(decryptedValue);
8+
9+
const noRecursiveValues = await parametersProvider.getMultiple('/my/path/prefix', { recursive: false });
10+
for (const [ key, value ] of Object.entries(noRecursiveValues || {})) {
11+
console.log(`${key}: ${value}`);
12+
}
13+
};

Diff for: docs/snippets/parameters/transform.ts

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { getParameter } from '@aws-lambda-powertools/parameters/ssm';
2+
3+
export const handler = async (): Promise<void> => {
4+
const valueFromJson = await getParameter('/my/json/parameter', { transform: 'json' });
5+
console.log(valueFromJson);
6+
};

Diff for: docs/snippets/parameters/transformAuto.ts

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { SSMProvider } from '@aws-lambda-powertools/parameters/ssm';
2+
3+
const parametersProvider = new SSMProvider();
4+
5+
export const handler = async (): Promise<void> => {
6+
const values = await parametersProvider.getMultiple('/param', { transform: 'auto' });
7+
for (const [ key, value ] of Object.entries(values || {})) {
8+
console.log(`${key}: ${value}`);
9+
}
10+
};

Diff for: docs/snippets/parameters/transformPartialFailures.ts

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { SSMProvider } from '@aws-lambda-powertools/parameters/ssm';
2+
3+
const parametersProvider = new SSMProvider();
4+
5+
export const handler = async (): Promise<void> => {
6+
/**
7+
* This will display:
8+
* /param/a: [some value]
9+
* /param/b: [some value]
10+
* /param/c: undefined
11+
*/
12+
const parameters = await parametersProvider.getMultiple('/param', { transform: 'json' });
13+
for (const [ key, value ] of Object.entries(parameters || {})) {
14+
console.log(`${key}: ${value}`);
15+
}
16+
17+
try {
18+
// This will throw a TransformParameterError
19+
const parameters2 = await parametersProvider.getMultiple('/param', {
20+
transform: 'json',
21+
throwOnTransformError: true
22+
});
23+
for (const [ key, value ] of Object.entries(parameters2 || {})) {
24+
console.log(`${key}: ${value}`);
25+
}
26+
} catch (err) {
27+
console.error(err);
28+
}
29+
};

Diff for: docs/snippets/parameters/transformProvider.ts

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { SecretsProvider } from '@aws-lambda-powertools/parameters/secrets';
2+
3+
const secretsProvider = new SecretsProvider();
4+
5+
export const handler = async (): Promise<void> => {
6+
// Transform a JSON string
7+
const json = await secretsProvider.get('my-secret-json', { transform: 'json' });
8+
console.log(json);
9+
10+
// Transform a Base64 encoded string (e.g. binary)
11+
const binary = await secretsProvider.getMultiple('my-secret-binary', { transform: 'binary' });
12+
console.log(binary);
13+
};

0 commit comments

Comments
 (0)