The Weather Platform uses custom AWS CDK constructs to provide advanced functionality beyond standard Amplify resources.
Purpose: Advanced S3 bucket configuration with lifecycle policies and CORS.
Key Features:
File: amplify/custom/WeatherDatasetStorage/resource.ts
// Creates S3 bucket with advanced configuration
this.bucket = new s3.Bucket(this, "WeatherDatasetBucket", {
bucketName: uniqueBucketName,
removalPolicy: cdk.RemovalPolicy.DESTROY,
autoDeleteObjects: true,
versioned: enableVersioning,
encryption: s3.BucketEncryption.S3_MANAGED,
lifecycleRules: [
{
id: "DeleteIncompleteMultipartUploads",
abortIncompleteMultipartUploadAfter: cdk.Duration.days(7),
},
{
id: "TempDataCleanup",
prefix: "temp/",
expiration: cdk.Duration.days(30),
},
],
});
Purpose: ETL processing pipeline for transforming raw IoT data into structured datasets.
Key Features:
itea-weather-data-lake-storage
) and target bucketFile: amplify/custom/WeatherDataGlue/resource.ts
Components:
weather-platform-db-{uniqueId}
weather-transform.py
for custom transformation logicPurpose: Global content delivery network for processed datasets.
Key Features:
File: amplify/custom/CloudFront/resource.ts
Technical Implementation:
Purpose: Scheduled data processing automation.
Key Features:
File: amplify/custom/EventBridge/resource.ts
Schedule Configuration:
schedule: events.Schedule.cron({
minute: "0",
hour: "17", // 17:00 UTC = 00:00 UTC+7
weekDay: "SUN", // Sunday
});
These constructs integrate with Amplify through the main backend configuration:
// In amplify/backend.ts
// Create custom CDK storage construct for weather dataset
const weatherStorage = new WeatherDatasetStorage(
backend.stack,
"WeatherDatasetStorage",
{
bucketName: `weather-dataset-${accountId}-${branchName}`,
}
);
// Create Weather Data Glue construct for ETL processing
const weatherDataGlue = new CustomWeatherDataGlue(
backend.stack,
"WeatherDataGlue",
{
accountId,
region,
sourceBucketName: "itea-weather-data-lake-storage",
targetBucketName: weatherStorage.bucket.bucketName,
}
);
// Create CloudFront CDN construct for global delivery
const cloudFrontCDN = new CustomCloudFront(backend.stack, "WeatherDatasetCDN", {
storageBucketName: weatherStorage.bucket.bucketName,
storageBucketDomainName: weatherStorage.bucket.bucketDomainName,
storageBucket: weatherStorage.bucket,
});
// Create EventBridge construct for scheduled processing
const eventBridge = new CustomEventBridge(
backend.stack,
"WeatherDataProcessing",
{
accountId,
region,
crawlerName: weatherDataGlue.crawler.name!,
jobName: weatherDataGlue.job.name!,
}
);
Custom CDK constructs provide enterprise-level functionality while maintaining Amplify’s ease of use.