An open API service indexing awesome lists of open source software.

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.

Awesome Lists containing this project

README

          

# aws-cloudformation-custom-resource

[![npm version](https://img.shields.io/npm/v/aws-cloudformation-custom-resource)][npm]
[![npm](https://img.shields.io/npm/dt/aws-cloudformation-custom-resource)][npm]
[![License](https://img.shields.io/github/license/udondan/aws-cloudformation-custom-resource)][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