@pepperize/cdk-organizations
Version:
Manage AWS organizations, organizational units (OU), accounts and service control policies (SCP).
57 lines • 7.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.handler = handler;
const aws_sdk_1 = require("aws-sdk");
let organizationsClient;
const organizationsRegion = process.env.ORGANIZATIONS_ENDPOINT_REGION ?? "us-east-1";
/**
* The onEvent handler is invoked whenever a resource lifecycle event for an organization occurs
*
* @see https://docs.aws.amazon.com/cdk/api/v1/docs/custom-resources-readme.html#handling-lifecycle-events-onevent
*/
async function handler(event) {
console.log(`Request of type ${event.RequestType} received`);
if (!organizationsClient) {
organizationsClient = new aws_sdk_1.Organizations({ region: organizationsRegion });
}
console.log("Payload: %j", event);
if (event.RequestType == "Create") {
// https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Organizations.html#createOrganization-property
try {
const response = await organizationsClient
.createOrganization({
FeatureSet: event.ResourceProperties.FeatureSet,
})
.promise();
console.log("Creating organization: %j", response);
return {
PhysicalResourceId: response.Organization?.Id,
Data: {
...response.Organization,
},
};
}
catch (e) {
const error = e;
if (error.code == "AlreadyInOrganizationException") {
// https://docs.aws.amazon.com/organizations/latest/APIReference/API_CreateOrganization.html#API_CreateOrganization_Errors
console.log("Organization already created.");
}
else {
throw error;
}
}
}
// https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Organizations.html#describeOrganization-property
const response = await organizationsClient
.describeOrganization()
.promise();
// TODO: Try to delete organization (RemovalPolicy)
return {
PhysicalResourceId: response.Organization?.Id,
Data: {
...response.Organization,
},
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib24tZXZlbnQtaGFuZGxlci5sYW1iZGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3JnYW5pemF0aW9uLXByb3ZpZGVyL29uLWV2ZW50LWhhbmRsZXIubGFtYmRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBV0EsMEJBK0NDO0FBekRELHFDQUFrRDtBQUVsRCxJQUFJLG1CQUFrQyxDQUFDO0FBQ3ZDLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsSUFBSSxXQUFXLENBQUM7QUFFckY7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSxPQUFPLENBQUMsS0FBcUI7SUFDakQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsS0FBSyxDQUFDLFdBQVcsV0FBVyxDQUFDLENBQUM7SUFFN0QsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDekIsbUJBQW1CLEdBQUcsSUFBSSx1QkFBYSxDQUFDLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixFQUFFLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFbEMsSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2xDLHlHQUF5RztRQUN6RyxJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBNkMsTUFBTSxtQkFBbUI7aUJBQ2pGLGtCQUFrQixDQUFDO2dCQUNsQixVQUFVLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixDQUFDLFVBQVU7YUFDaEQsQ0FBQztpQkFDRCxPQUFPLEVBQUUsQ0FBQztZQUNiLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDbkQsT0FBTztnQkFDTCxrQkFBa0IsRUFBRSxRQUFRLENBQUMsWUFBWSxFQUFFLEVBQUU7Z0JBQzdDLElBQUksRUFBRTtvQkFDSixHQUFHLFFBQVEsQ0FBQyxZQUFZO2lCQUN6QjthQUNGLENBQUM7UUFDSixDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE1BQU0sS0FBSyxHQUFHLENBQWEsQ0FBQztZQUM1QixJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksZ0NBQWdDLEVBQUUsQ0FBQztnQkFDbkQsMEhBQTBIO2dCQUMxSCxPQUFPLENBQUMsR0FBRyxDQUFDLCtCQUErQixDQUFDLENBQUM7WUFDL0MsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sS0FBSyxDQUFDO1lBQ2QsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsMkdBQTJHO0lBQzNHLE1BQU0sUUFBUSxHQUErQyxNQUFNLG1CQUFtQjtTQUNuRixvQkFBb0IsRUFBRTtTQUN0QixPQUFPLEVBQUUsQ0FBQztJQUViLG1EQUFtRDtJQUNuRCxPQUFPO1FBQ0wsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLFlBQVksRUFBRSxFQUFFO1FBQzdDLElBQUksRUFBRTtZQUNKLEdBQUcsUUFBUSxDQUFDLFlBQVk7U0FDekI7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka0N1c3RvbVJlc291cmNlRXZlbnQgYXMgT25FdmVudFJlcXVlc3QsIENka0N1c3RvbVJlc291cmNlUmVzcG9uc2UgYXMgT25FdmVudFJlc3BvbnNlIH0gZnJvbSBcImF3cy1sYW1iZGFcIjtcbmltcG9ydCB7IEFXU0Vycm9yLCBPcmdhbml6YXRpb25zIH0gZnJvbSBcImF3cy1zZGtcIjtcblxubGV0IG9yZ2FuaXphdGlvbnNDbGllbnQ6IE9yZ2FuaXphdGlvbnM7XG5jb25zdCBvcmdhbml6YXRpb25zUmVnaW9uID0gcHJvY2Vzcy5lbnYuT1JHQU5JWkFUSU9OU19FTkRQT0lOVF9SRUdJT04gPz8gXCJ1cy1lYXN0LTFcIjtcblxuLyoqXG4gKiBUaGUgb25FdmVudCBoYW5kbGVyIGlzIGludm9rZWQgd2hlbmV2ZXIgYSByZXNvdXJjZSBsaWZlY3ljbGUgZXZlbnQgZm9yIGFuIG9yZ2FuaXphdGlvbiBvY2N1cnNcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jZGsvYXBpL3YxL2RvY3MvY3VzdG9tLXJlc291cmNlcy1yZWFkbWUuaHRtbCNoYW5kbGluZy1saWZlY3ljbGUtZXZlbnRzLW9uZXZlbnRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQ6IE9uRXZlbnRSZXF1ZXN0KTogUHJvbWlzZTxPbkV2ZW50UmVzcG9uc2U+IHtcbiAgY29uc29sZS5sb2coYFJlcXVlc3Qgb2YgdHlwZSAke2V2ZW50LlJlcXVlc3RUeXBlfSByZWNlaXZlZGApO1xuXG4gIGlmICghb3JnYW5pemF0aW9uc0NsaWVudCkge1xuICAgIG9yZ2FuaXphdGlvbnNDbGllbnQgPSBuZXcgT3JnYW5pemF0aW9ucyh7IHJlZ2lvbjogb3JnYW5pemF0aW9uc1JlZ2lvbiB9KTtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKFwiUGF5bG9hZDogJWpcIiwgZXZlbnQpO1xuXG4gIGlmIChldmVudC5SZXF1ZXN0VHlwZSA9PSBcIkNyZWF0ZVwiKSB7XG4gICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0phdmFTY3JpcHRTREsvbGF0ZXN0L0FXUy9Pcmdhbml6YXRpb25zLmh0bWwjY3JlYXRlT3JnYW5pemF0aW9uLXByb3BlcnR5XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBPcmdhbml6YXRpb25zLkNyZWF0ZU9yZ2FuaXphdGlvblJlc3BvbnNlID0gYXdhaXQgb3JnYW5pemF0aW9uc0NsaWVudFxuICAgICAgICAuY3JlYXRlT3JnYW5pemF0aW9uKHtcbiAgICAgICAgICBGZWF0dXJlU2V0OiBldmVudC5SZXNvdXJjZVByb3BlcnRpZXMuRmVhdHVyZVNldCxcbiAgICAgICAgfSlcbiAgICAgICAgLnByb21pc2UoKTtcbiAgICAgIGNvbnNvbGUubG9nKFwiQ3JlYXRpbmcgb3JnYW5pemF0aW9uOiAlalwiLCByZXNwb25zZSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBQaHlzaWNhbFJlc291cmNlSWQ6IHJlc3BvbnNlLk9yZ2FuaXphdGlvbj8uSWQsXG4gICAgICAgIERhdGE6IHtcbiAgICAgICAgICAuLi5yZXNwb25zZS5Pcmdhbml6YXRpb24sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gZSBhcyBBV1NFcnJvcjtcbiAgICAgIGlmIChlcnJvci5jb2RlID09IFwiQWxyZWFkeUluT3JnYW5pemF0aW9uRXhjZXB0aW9uXCIpIHtcbiAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29yZ2FuaXphdGlvbnMvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlT3JnYW5pemF0aW9uLmh0bWwjQVBJX0NyZWF0ZU9yZ2FuaXphdGlvbl9FcnJvcnNcbiAgICAgICAgY29uc29sZS5sb2coXCJPcmdhbml6YXRpb24gYWxyZWFkeSBjcmVhdGVkLlwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NKYXZhU2NyaXB0U0RLL2xhdGVzdC9BV1MvT3JnYW5pemF0aW9ucy5odG1sI2Rlc2NyaWJlT3JnYW5pemF0aW9uLXByb3BlcnR5XG4gIGNvbnN0IHJlc3BvbnNlOiBPcmdhbml6YXRpb25zLkRlc2NyaWJlT3JnYW5pemF0aW9uUmVzcG9uc2UgPSBhd2FpdCBvcmdhbml6YXRpb25zQ2xpZW50XG4gICAgLmRlc2NyaWJlT3JnYW5pemF0aW9uKClcbiAgICAucHJvbWlzZSgpO1xuXG4gIC8vIFRPRE86IFRyeSB0byBkZWxldGUgb3JnYW5pemF0aW9uIChSZW1vdmFsUG9saWN5KVxuICByZXR1cm4ge1xuICAgIFBoeXNpY2FsUmVzb3VyY2VJZDogcmVzcG9uc2UuT3JnYW5pemF0aW9uPy5JZCxcbiAgICBEYXRhOiB7XG4gICAgICAuLi5yZXNwb25zZS5Pcmdhbml6YXRpb24sXG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==