https://github.com/udondan/aws-cloudformation-custom-resource
Helper for managing custom AWS CloudFormation resources in a Lambda function.
https://github.com/udondan/aws-cloudformation-custom-resource
Last synced: 6 months ago
JSON representation
Helper for managing custom AWS CloudFormation resources in a Lambda function.
- Host: GitHub
- URL: https://github.com/udondan/aws-cloudformation-custom-resource
- Owner: udondan
- License: apache-2.0
- Created: 2020-05-06T14:13:20.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2024-05-02T02:02:46.000Z (over 1 year ago)
- Last Synced: 2024-05-02T05:17:22.825Z (over 1 year ago)
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/aws-cloudformation-custom-resource
- Size: 322 KB
- Stars: 4
- Watchers: 2
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# aws-cloudformation-custom-resource
[][npm]
[][npm]
[][license]Helper for managing custom AWS CloudFormation resources in a Lambda function.
## Usage
You can find a complete example in the [test](test) directory.
The use of generics is optional. If no `ResourceProperties` is passed to the `Event` and `CustomResource`, the default type is `Records`.
Basic usage:
```typescript
import {
Callback,
Context,
CustomResource,
Event,
Logger,
} from 'aws-cloudformation-custom-resource';export interface ResourceProperties {
name: string;
}export const handler = function (
event: Event,
context: Context,
callback: Callback,
) {
new CustomResource(
event,
context,
callback,
createResource,
updateResource,
deleteResource,
);
};function createResource(
resource: CustomResource,
log: Logger,
): Promise {
return new Promise(function (resolve, reject) {
log.log('Hello from create');// Every custom resource requires a physical ID.
// Either you can pass a `name` parameter to the lambda function
// (accessed via `resource.properties.name`)
// or you can manually set the ID:
resource.setPhysicalResourceId('some-physical-resource-id');// you can return values from the Lambda function:
resource.addResponseValue('Foo', 'bar');doSomethingWith(resource.properties.name.value).then(resolve).catch(reject);
});
}function updateResource(
resource: CustomResource,
log: Logger,
): Promise {
log.log('Hello from update');
return new Promise(function (resolve, reject) {
resource.addResponseValue('Foo', 'bar');if (resource.properties.name.changed) {
doSomethingWith(resource.properties.name.value)
.then(resolve)
.catch(reject);
} else {
resolve();
}
});
}function deleteResource(
resource: CustomResource,
log: Logger,
): Promise {
log.log('Hello from delete');
return new Promise(function (resolve, reject) {
// do stuff
resolve();
});
}
```By default only errors are logged. You can change the log level or use another logging library:
```typescript
import {
Callback,
Context,
CustomResource,
Event,
LogLevel,
StandardLogger,
} from 'aws-cloudformation-custom-resource';const logger = new StandardLogger(LogLevel.debug);
const resource = new CustomResource(
event,
context,
callback,
createResource,
updateResource,
deleteResource,
);resource.setLogger(logger);
```[npm]: https://www.npmjs.com/package/aws-cloudformation-custom-resource
[license]: https://github.com/udondan/aws-cloudformation-custom-resource/blob/main/LICENSE