in source/secondary-bucket-creator/source/index.ts [9:92]
async function createBucketInSecondaryRegion(bucketName: string, bucketRegion: string, loggingBucketName?: string, loggingPrefix?: string): Promise<CompletionStatus> {
try {
const s3 = new AWS.S3({ region: bucketRegion });
const createBucketParams = {
Bucket: bucketName
};
if (bucketRegion !== 'us-east-1') {
createBucketParams['CreateBucketConfiguration'] = {
LocationConstraint: bucketRegion
};
}
console.log(`Creating bucket: ${JSON.stringify(createBucketParams)}`);
await s3.createBucket(createBucketParams).promise();
console.log(`Bucket created: ${JSON.stringify(createBucketParams)}`);
const putBucketEncryptionParams = {
Bucket: bucketName,
ServerSideEncryptionConfiguration: {
Rules: [
{
ApplyServerSideEncryptionByDefault: {
SSEAlgorithm: 'aws:kms'
}
}
]
}
};
console.log(`Putting bucket encryption: ${JSON.stringify(putBucketEncryptionParams)}`);
await s3.putBucketEncryption(putBucketEncryptionParams).promise()
console.log(`Bucket encryption placed: ${JSON.stringify(putBucketEncryptionParams)}`);
if (!loggingBucketName) {
const putBucketAclParams = {
Bucket: bucketName,
ACL: 'log-delivery-write'
};
console.log(`Putting bucket ACL: ${JSON.stringify(putBucketAclParams)}`);
await s3.putBucketAcl(putBucketAclParams).promise();
console.log(`Bucket ACL placed: ${JSON.stringify(putBucketAclParams)}`);
}
const putPublicAccessBlockParams = {
Bucket: bucketName,
PublicAccessBlockConfiguration: {
BlockPublicAcls: true,
BlockPublicPolicy: true,
IgnorePublicAcls: true,
RestrictPublicBuckets: true
}
};
console.log(`Putting public access block: ${JSON.stringify(putPublicAccessBlockParams)}`);
await s3.putPublicAccessBlock(putPublicAccessBlockParams).promise();
console.log(`Public access block placed: ${JSON.stringify(putPublicAccessBlockParams)}`);
if (loggingBucketName && loggingPrefix) {
const putBucketLoggingParams = {
Bucket: bucketName,
BucketLoggingStatus: {
LoggingEnabled: {
TargetBucket: loggingBucketName,
TargetPrefix: loggingPrefix
}
}
};
console.log(`Putting bucket logging: ${JSON.stringify(putBucketLoggingParams)}`);
await s3.putBucketLogging(putBucketLoggingParams).promise()
console.log(`Bucket logging placed: ${JSON.stringify(putBucketLoggingParams)}`);
}
return {
Status: StatusTypes.Success,
Data: { BucketName: bucketName }
}
} catch (error) {
console.log(error)
return {
Status: StatusTypes.Failed,
Data: error.message
}
}
}