Skip to content

Instantly share code, notes, and snippets.

@ryanycoleman
Created November 19, 2020 16:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ryanycoleman/42b24e76def14ac2bbf8d5597279645e to your computer and use it in GitHub Desktop.
Save ryanycoleman/42b24e76def14ac2bbf8d5597279645e to your computer and use it in GitHub Desktop.
A snippet of a Lambda function that uses cfn-custom-resource to respond appropriately to CloudFormation when invoking a Lambda on deployment
# For more info, read:
## https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources.html
## https://www.npmjs.com/package/cfn-custom-resource?activeTab=readme
AWS = require('aws-sdk');
const ECS = new AWS.ECS({ region: "us-west-2" });
const SM = new AWS.SecretsManager({ region: "us-west-2" })
const cfnCR = require('cfn-custom-resource');
const { sendSuccess, sendFailure, CREATE, UPDATE, DELETE } = cfnCR;
exports.handler = async (event, context) => {
console.log(JSON.stringify(event, undefined, 2));
if( event.RequestType === DELETE ) {
return sendSuccess('runIndexer', {}, event)
}
let url;
try {
if( process.env.ENV == 'production' ) {
url = 'https://docs.stackery.io'
} else {
url = `https://${process.env.CDN_DomainName}`
}
const config = {
}
var secretParams = {
SecretId: process.env.SECRETS_NAMESPACE + 'ALGOLIA_API_KEY'
};
console.log('retrieving secretvalue')
const secretresponse = await SM.getSecretValue(secretParams).promise()
const taskParams = {
taskDefinition: process.env.DOCKER_TASK_ARN,
launchType: 'FARGATE',
networkConfiguration: {
awsvpcConfiguration: {
subnets: process.env.DOCKER_TASK_SUBNETS.split(','),
assignPublicIp: 'ENABLED',
}
},
overrides: {
containerOverrides: [
{
name: "0",
environment: [
{
name: 'API_KEY',
value: secretresponse.SecretString
},
{
name: 'CONFIG',
value: JSON.stringify(config)
}
],
}
]
}
};
console.log('starting ECS.runtask')
const taskresponse = await ECS.runTask(taskParams).promise()
console.log('responding successful for ECS.runtask to CFN')
const cfnCRSuccess = await sendSuccess('runIndexer', {}, event)
console.log(JSON.stringify(taskresponse))
} catch(err) {
console.log(JSON.stringify(err, undefined, 2))
const cfnCRFailure = await sendFailure('ECS task failed to invoke successfully', event);
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment