lambda-elasticsearch-kibana
v1.125.0
Published
CDK Constructs for AWS Lambda to AWS Elasticsearch with Kibana integration
Downloads
2
Maintainers
Readme
Lambda >> ElasticSearch >> Kibana
This AWS Solutions Construct implements the AWS Lambda function and Amazon ElasticSearch Service with the least privileged permissions.
Architecture
Here is a minimal deployable pattern definition in Typescript:
import { LambdaToElasticSearchAndKibana } from 'lambda-elasticsearch-kibana';
import { Aws } from "@aws-cdk/core";
const lambdaProps: lambda.FunctionProps = {
code: lambda.Code.fromAsset(`${__dirname}/lambda`),
runtime: lambda.Runtime.NODEJS_14_X,
handler: 'index.handler'
};
new LambdaToElasticSearchAndKibana(this, 'test-lambda-elasticsearch-kibana', {
lambdaFunctionProps: lambdaProps,
domainName: 'test-domain',
// TODO: Ensure the Cognito domain name is globally unique
cognitoDomainName: 'globallyuniquedomain' + Aws.ACCOUNT_ID;
});
Initializer
new LambdaToElasticSearchAndKibana(scope: Construct, id: string, props: LambdaToElasticSearchAndKibanaProps);
Parameters
- scope
Construct
- id
string
- props
LambdaToElasticSearchAndKibanaProps
Pattern Construct Props
| Name | Type | Description |
|:-------------|:----------------|-----------------|
|existingLambdaObj?|lambda.Function
|Existing instance of Lambda Function object, providing both this and lambdaFunctionProps
will cause an error.|
|lambdaFunctionProps?|lambda.FunctionProps
|User provided props to override the default props for the Lambda function.|
|esDomainProps?|elasticsearch.CfnDomainProps
|Optional user provided props to override the default props for the ElasticSearch Service|
|domainName|string
|Domain name for the Cognito and the ElasticSearch Service|
|cognitoDomainName?|string
|Optional Cognito Domain Name, if provided it will be used for Cognito Domain, and domainName will be used for the ElasticSearch Domain|
|createCloudWatchAlarms|boolean
|Whether to create recommended CloudWatch alarms|
|domainEndpointEnvironmentVariableName?|string
|Optional Name for the ElasticSearch domain endpoint environment variable set for the Lambda function.|
Pattern Properties
| Name | Type | Description |
|:-------------|:----------------|-----------------|
|lambdaFunction|lambda.Function
|Returns an instance of lambda.Function created by the construct|
|userPool|cognito.UserPool
|Returns an instance of cognito.UserPool created by the construct|
|userPoolClient|cognito.UserPoolClient
|Returns an instance of cognito.UserPoolClient created by the construct|
|identityPool|cognito.CfnIdentityPool
|Returns an instance of cognito.CfnIdentityPool created by the construct|
|elasticsearchDomain|elasticsearch.CfnDomain
|Returns an instance of elasticsearch.CfnDomain created by the construct|
|elasticsearchDomain|iam.Role
|Returns an instance of iam.Role created by the construct for elasticsearch.CfnDomain|
|cloudwatchAlarms?|cloudwatch.Alarm[]
|Returns a list of cloudwatch.Alarm created by the construct|
Lambda Function
This pattern requires a lambda function that can post data into the ElasticSearch. A sample function is provided here.
Default settings
Out of the box implementation of the Construct without any override will set the following defaults:
AWS Lambda Function
- Configure limited privilege access IAM role for Lambda function
- Enable reusing connections with Keep-Alive for NodeJs Lambda function
- Enable X-Ray Tracing
- Set Environment Variables
- (default) DOMAIN_ENDPOINT
- AWS_NODEJS_CONNECTION_REUSE_ENABLED (for Node 12.x and higher functions)
Amazon Cognito
- Set password policy for User Pools
- Enforce the advanced security mode for User Pools
Amazon ElasticSearch Service
- Deploy best practices CloudWatch Alarms for the ElasticSearch Domain
- Secure the Kibana dashboard access with Cognito User Pools
- Enable server-side encryption for ElasticSearch Domain using AWS managed KMS Key
- Enable node-to-node encryption for ElasticSearch Domain
- Configure the cluster for the Amazon ES domain