aws
Markdown

cdkBestPractices

Key Points Summary:

Application Example

**- Example: Basic ECS-based multi-region website with US-East-1 and US-West-2 deployments. **- Includes serverless media transcoder and Route 53 latency-based record for region-based routing. **- Application serves as a backdrop for discussing various concepts.

CDK Basics

**- Every CDK app comprises stacks, stages, and constructs synthesized into CloudFormation. **- Example structure with multi-region deployment and redundant stages.

Projen Usage

**- Introduction to projen, a construct-based API for managing repository files. **- Command to initiate a TypeScript-based CDK app. **- Importance of CI/CD pipelines and deployment process using projen.

Code Organization

**- Recommended structure for organizing CDK code: source directory, constants, constructs, stages, and stacks. **- Example of maintaining scalable and organized codebase.

Single vs. Multi-Stack

**- Pros and cons of single and multi-stack approaches. **- Importance of avoiding cross-stack dependencies and ensuring consistent versioning.

Assets Management

**- Challenges with building assets multiple times across regions. **- Solution: Build assets once and pass them into constructs to ensure consistency.

GitHub Pipeline Integration

**- Using OIDC providers and roles for GitHub pipeline authorization. **- Creating secondary apps for specific tasks and deploying manually.

Constructs

**- Constructs should represent business functionality and be small and discrete. **- Importance of refactoring early and often to avoid changing logical IDs and causing issues.

Testing

**- Unit testing using snapshot testing and fine-grained assertions. **- Mocking assets to speed up tests and ensure reliability. **- Integration testing with projen to deploy stacks to AWS accounts for real-world validation.

Aspects and Advanced Features

**- Use of aspects for applying functionality across the entire codebase. **- Examples: Monitoring Lambda functions, overriding logical IDs, applying tags, and security checks with CDK nag. **- Handling external data with separate scripts to ensure determinism and avoid issues.

End-to-End Testing

**- Using Triggers module and CDK IntrinsicValidator for end-to-end testing. **- Ensuring functionality of deployed applications with automated tests during the deployment process.

Customization and Fun

**- Example of creating a custom StackSynthesizer for additional functionality. **- Demonstration of an interactive and fun project to showcase the flexibility of the CDK.

Best Practices

**- Always provide environments for stacks. **- Use constructs for business functionality and refactor regularly. **- Avoid using imports within constructs and ensure clear separation of responsibilities. **- Apply robust testing at different levels to ensure reliability and functionality.

Conclusion:

**- Emphasis on the importance of best practices, testing, and maintaining organized and scalable codebases. **- Encouragement to leverage the CDK’s flexibility for various use cases and integrations. **- Open for Q&A session to address specific queries and further discussions.