DVA-C02 Syllabus — Objectives by Domain

Blueprint-aligned learning objectives for AWS Certified Developer — Associate (DVA-C02), organized by domain with quick links to targeted practice.

Use this syllabus as your source of truth for DVA-C02. Work through each domain in order and drill targeted sets after every section.

What’s covered

Domain 1: Development with AWS Services (32%)

Practice this topic →

Task 1.1 - Build resilient, decoupled application components

  • Differentiate between synchronous request/response and asynchronous event-driven communication and select the appropriate pattern for a given workload.
  • Implement idempotent operations in application code using idempotency keys or conditional requests to safely handle retries.
  • Apply retries with exponential backoff and full jitter using AWS SDK configuration and custom logic to reduce retry storms.
  • Use dead-letter queues to capture and inspect failed asynchronous operations and design appropriate reprocessing strategies.
  • Evaluate when to use choreography versus orchestration to coordinate microservices interactions.
  • Compare tightly coupled versus loosely coupled components and refactor code to reduce direct dependencies through messaging or events.
  • Design fault-tolerance in clients by setting timeouts, circuit breakers, and connection pools when calling AWS services.
  • Choose stateless processing for scale-out compute and manage session data in external stores.
  • Implement fan-out patterns with Amazon SNS topics, Amazon SQS queues, and AWS Lambda subscriptions to parallelize downstream work.
  • Detect and handle partial failures across distributed components by propagating correlation IDs and consistent error contracts.
  • Select the appropriate compute option (AWS Lambda, Amazon ECS, Amazon EC2, AWS Elastic Beanstalk) for a given execution model, startup time, and dependency profile.

Task 1.2 - Use AWS SDKs and service APIs effectively

  • Initialize AWS SDK clients with least-privilege credentials and region-appropriate endpoints.
  • Configure SDK retry behavior, timeouts, HTTP keep-alive, and connection limits to improve throughput and resiliency.
  • Paginate over AWS API results using next tokens or continuation markers to retrieve complete datasets.
  • Implement request throttling handling by inspecting error codes (for example, ThrottlingException and ProvisionedThroughputExceededException) and backing off.
  • Use AWS Security Token Service (AWS STS) to assume roles programmatically and refresh short-lived session credentials in long-running processes.
  • Securely load configuration and secrets for SDK clients from AWS Secrets Manager and AWS Systems Manager Parameter Store.
  • Generate pre-signed URLs for Amazon S3 to provide time-limited direct access for uploads and downloads.
  • Select consistent or eventual read options where available and implement read-after-write considerations in code.
  • Employ service-specific SDK optimizations such as Amazon S3 Transfer Manager and Amazon DynamoDB batch APIs for high-throughput operations.
  • Structure error handling by mapping AWS service exceptions to actionable outcomes and surfacing user-friendly messages.

Task 1.3 - Work with messaging services (Amazon SNS, Amazon SQS, Amazon EventBridge, AWS Step Functions)

  • Choose between Amazon SQS Standard and FIFO queues based on ordering and exactly-once processing needs.
  • Set appropriate visibility timeout, message retention, and long-polling settings for Amazon SQS to optimize throughput and cost.
  • Implement Amazon SQS message batching for send and receive to reduce API calls and improve efficiency.
  • Use Amazon SNS message attributes and subscription filter policies to route messages to specific subscribers.
  • Implement Amazon SNS fan-out to multiple Amazon SQS queues and AWS Lambda functions for parallel downstream processing.
  • Offload large message payloads to Amazon S3 and send Amazon SQS/Amazon SNS references while maintaining idempotency.
  • Define Amazon EventBridge rules and event buses to route events across accounts and Regions for decoupled integrations.
  • Create AWS Step Functions workflows to orchestrate multi-step tasks with retries, timeouts, and catch/finally handlers.
  • Handle poison messages with per-queue dead-letter queues and redrive policies to prevent endless retries.
  • Secure messaging with resource policies that grant least privilege to publishers and subscribers.
  • Monitor queue depth, age of oldest message, and Lambda concurrency to anticipate backlogs and scale appropriately.

Task 1.4 - Develop code for AWS Lambda runtime and performance

  • Configure memory size, timeout, and ephemeral storage for AWS Lambda to balance cost and performance.
  • Choose appropriate runtime, handler signature, and package type (zip or container image) for a function.
  • Reuse SDK clients and database connections outside the handler for connection pooling and faster subsequent invocations.
  • Manage environment variables securely and decrypt secrets at initialization time when necessary.
  • Use Lambda layers to share libraries and common code across multiple functions.
  • Configure reserved concurrency and provisioned concurrency to control throughput and mitigate cold starts.
  • Implement Lambda Destinations for asynchronous success and failure routes as part of error handling.
  • Attach dead-letter queues to asynchronous Lambda invocations to capture failed events for later analysis.
  • Access private resources in a VPC by configuring appropriate subnets, security groups, and VPC endpoints.
  • Instrument Lambda functions with AWS X-Ray and structured logs to enable tracing and observability.
  • Write unit tests and local integration tests using AWS Serverless Application Model (AWS SAM) CLI and provided test events.

Task 1.5 - Integrate AWS Lambda with event sources and services

  • Configure event source mappings for Amazon SQS, Amazon DynamoDB Streams, and Amazon Kinesis with correct batch size and parallelization settings.
  • Tune Amazon Kinesis and DynamoDB Streams iterator age and batch window to meet latency and throughput requirements.
  • Implement partial batch response for Amazon SQS to acknowledge successful records while retrying failures.
  • Build API backends with Amazon API Gateway and GraphQL APIs with AWS AppSync; map request or resolver context to function and data source inputs.
  • Validate inputs with API Gateway request validators and models before invoking your AWS Lambda function.
  • Use Lambda function URLs, API Gateway Lambda authorizers, or Amazon Cognito authorizers appropriately based on authentication needs.
  • Set up file processing pipelines by integrating Amazon S3 event notifications with AWS Lambda and filtering by object key prefix or suffix.
  • Invoke AWS Step Functions synchronously or asynchronously from Lambda and handle task tokens for callbacks.
  • Configure Amazon EventBridge to trigger Lambda on schedule (rate or cron) and on specific service events.
  • Manage concurrency for stream-based Lambdas using parallelization factor and maximum concurrency.
  • Handle idempotency for Lambda-triggered events to ensure exactly-once side effects.

Task 1.6 - Use data stores and streaming services in application development

  • Choose between relational databases (Amazon RDS or Amazon Aurora) and non-relational databases (Amazon DynamoDB) based on access patterns.
  • Model Amazon DynamoDB tables with optimal partition keys and sort keys to distribute workload evenly.
  • Compare query versus scan in DynamoDB and implement GSI or LSI indexing for efficient access.
  • Apply optimistic concurrency control with DynamoDB ConditionExpression and version attributes.
  • Implement caching strategies (write-through, read-through, lazy loading, TTL) with Amazon ElastiCache or Amazon MemoryDB for Redis.
  • Serialize and deserialize payloads (JSON, Avro, Protobuf) efficiently to persist and retrieve from data stores.
  • Use DynamoDB TTL and Amazon S3 lifecycle rules to manage data retention and archival.
  • Select S3 storage classes based on access frequency and retrieval times for cost optimization.
  • Implement transactions in DynamoDB and relational databases when atomic multi-item operations are required.
  • Build producers and consumers for Amazon Kinesis Data Streams and scale shards based on throughput.
  • Use AWS SDK clients with connection reuse and prepared statements to optimize Amazon RDS access patterns.

Domain 2: Security (26%)

Practice this topic →

Task 2.1 - IAM fundamentals for application developers

  • Distinguish between identity-based policies, resource-based policies, and permission boundaries and when to use each.
  • Write least-privilege AWS Identity and Access Management (IAM) policies with explicit actions, resources, and condition keys.
  • Configure trust policies and assume-role flows for cross-account access in applications.
  • Use AWS Security Token Service (AWS STS) AssumeRole and AssumeRoleWithWebIdentity to obtain temporary credentials securely.
  • Implement role chaining and manage session duration to balance security and usability.
  • Choose between AWS managed policies and customer-managed policies to control updates and blast radius.
  • Apply role-based access control (RBAC) using IAM roles and groups mapped to application roles.
  • Use IAM policy variables and tags to implement attribute-based access control (ABAC) patterns.
  • Attach resource policies to Amazon S3, Amazon SQS, Amazon SNS, and Amazon EventBridge to allow cross-account access safely.
  • Audit API calls and changes with AWS CloudTrail and filter by user identity to validate access paths.

Task 2.2 - Federated identity and Amazon Cognito

  • Compare Amazon Cognito user pools and identity pools and map use cases to each.
  • Configure OAuth 2.0 flows (Authorization Code, Implicit, Client Credentials) with Cognito user pools.
  • Validate and verify JSON Web Tokens (JWTs) including signature, issuer, audience, and expiration in application backends.
  • Use Cognito hosted UI, domains, and app clients to enable secure sign-in.
  • Create Cognito groups and custom attributes to support RBAC and fine-grained authorization.
  • Integrate Cognito with external identity providers via OpenID Connect (OIDC) or SAML and map claims to user pool attributes.
  • Exchange Cognito tokens for AWS credentials through identity pools to call AWS services directly.
  • Implement Cognito Lambda triggers (pre-signup, post-confirmation, pre-authentication) to customize authentication flows.
  • Protect APIs with Amazon API Gateway Cognito authorizers versus Lambda authorizers and API keys.
  • Refresh and revoke tokens securely and handle token expiration gracefully in clients.

Task 2.3 - Encryption in transit and at rest

  • Choose between client-side and server-side encryption and implement each where appropriate.
  • Use AWS Key Management Service (AWS KMS) customer managed keys for S3 (SSE-KMS), EBS, RDS, DynamoDB, and SQS when encryption at rest is required.
  • Generate, use, and rotate data keys with KMS envelope encryption for application-level protection.
  • Enable and verify TLS for SDK calls and enforce minimum TLS versions for endpoints.
  • Request and manage public certificates with AWS Certificate Manager (ACM) for CloudFront, Application Load Balancer (ALB), and API Gateway custom domains.
  • Enable automatic and manual rotation for customer managed KMS keys and evaluate rotation impact.
  • Share KMS keys across accounts using key policies and grants to permit cross-account encryption.
  • Implement mutual TLS (mTLS) on API Gateway or ALB when mutual authentication is needed.
  • Evaluate performance and cost impacts of different encryption strategies and mitigate with caching.

Task 2.4 - Secrets and sensitive data handling

  • Classify data types (PII, PHI, secrets) and choose appropriate storage and access controls.
  • Store application secrets in AWS Secrets Manager with automatic rotation for supported services.
  • Use AWS Systems Manager Parameter Store (standard vs. advanced) for configuration parameters with KMS encryption.
  • Avoid hardcoding credentials; load secrets securely via environment variables or runtime fetch.
  • Encrypt AWS Lambda environment variables with KMS and decrypt only when needed in code.
  • Implement least-privilege IAM roles for applications that read secrets and parameters.
  • Redact sensitive values from logs and traces using structured logging fields.
  • Use resource policies on Secrets Manager to permit cross-account read with audit controls.
  • Cache secrets in memory and handle rotation events without service interruption.
  • Validate that build and deployment artifacts do not leak secrets using automated scanners.
  • Apply secure handling of Amazon S3 presigned URLs and restrict actions, bucket, and expiration appropriately.

Task 2.5 - Application authorization patterns

  • Build authorization middleware that interprets JWT scopes and claims to enforce access control.
  • Map application-level roles to IAM roles or policies for calls to AWS services.
  • Use Amazon S3 bucket policies, ACLs, and Block Public Access to secure object data.
  • Protect APIs with AWS WAF rate-based and IP match rules to mitigate common attacks.
  • Implement fine-grained access to DynamoDB items using IAM condition keys such as dynamodb:LeadingKeys.
  • Leverage AWS STS session tags to pass user context to downstream resource authorization.
  • Secure WebSocket APIs with Cognito authorizers or IAM-based authentication as required.
  • Apply presigned POST policies for direct S3 uploads with minimal permissions.
  • Use service-linked roles safely when AWS services act on behalf of your application.
  • Review and test policy evaluation using IAM Policy Simulator and IAM Access Analyzer.
  • Design token propagation and revocation strategies for microservices that rely on bearer tokens.

Domain 3: Deployment (24%)

Practice this topic →

Task 3.1 - Prepare deployment artifacts and configuration

  • Structure AWS Lambda zip packages with correct handler paths and dependency folders for each runtime.
  • Build and publish Lambda container images to Amazon ECR with minimal base layers and multi-stage Dockerfiles.
  • Create and version Lambda layers for shared libraries across functions.
  • Externalize configuration using AWS AppConfig, Parameter Store, and environment variables.
  • Package static assets to Amazon S3 with cache-control headers and content hashing for cache busting.
  • Define runtime resource needs (memory, CPU, storage) and encode them in infrastructure as code templates.
  • Use AWS CodeArtifact to manage private package repositories and upstream connections.
  • Implement semantic versioning for application artifacts and image tags.
  • Prepare database migration scripts and roll-forward or rollback plans for Amazon RDS and Amazon DynamoDB changes.
  • Configure build-time versus runtime feature flags and fetch strategies.
  • Create IAM roles and permissions required by applications as part of deployment packages.
  • Harden container images by scanning for CVEs and removing unnecessary tools and shells.

Task 3.2 - Test applications in development environments

  • Run AWS Lambda functions locally with AWS SAM CLI using event JSONs and environment overrides.
  • Mock service integrations with Amazon API Gateway using mapping templates and mock integration responses.
  • Use DynamoDB Local for offline testing of table interactions and transactions.
  • Write unit, integration, and contract tests that validate API schemas and error codes.
  • Deploy to a dev stage using separate API Gateway stages and stage variables.
  • Use Amazon CloudWatch Logs and AWS X-Ray in non-production accounts to debug integration issues.
  • Employ test doubles for Amazon S3 and Amazon SNS or Amazon SQS using libraries or local emulators where appropriate.
  • Isolate environment resources using unique prefixes, tags, and stack names for parallel testing.
  • Validate IAM permissions in development by using restrictive policies and least privilege from the start.
  • Use AWS Step Functions Local or Express Workflows for fast feedback on orchestration logic.
  • Promote builds across environments without rebuilding artifacts to ensure immutability.
  • Automate teardown of ephemeral test environments to control cost.

Task 3.3 - Automate deployment testing in CI/CD

  • Design AWS CodePipeline stages for source, build, test, approval, and deploy with clear artifacts between stages.
  • Write AWS CodeBuild buildspecs that install dependencies, run tests, and produce immutable artifacts.
  • Create synthetic test events for AWS Lambda, API Gateway, and AWS SAM resources as part of automated tests.
  • Gate production deployments with manual approvals and evidence links to test results.
  • Use AWS CloudFormation and AWS SAM to create and update stacks via change sets and guided deployments.
  • Employ branch strategies (for example, feature branches and mainline) and protected branches to control releases.
  • Tag and promote container images to environment-specific tags (dev, test, prod) in Amazon ECR.
  • Run integration tests against deployed test stacks using temporary test credentials.
  • Use AWS CodeArtifact for dependency caching to accelerate CI builds.
  • Implement parallelism and caching in CodeBuild to reduce build times.
  • Orchestrate cross-account deployments with CodePipeline and role assumptions.
  • Fail fast and roll back on test failures with automatic pipeline halts and notifications.

Task 3.4 - Deploy code using AWS services and strategies

  • Deploy AWS Lambda functions with AWS SAM or AWS CloudFormation and manage versions and aliases.
  • Implement canary and linear deployments for Lambda using AWS CodeDeploy traffic shifting.
  • Configure rollback alarms for deployments based on Amazon CloudWatch metrics and CodeDeploy hooks.
  • Deploy REST and HTTP APIs with Amazon API Gateway and map custom domains to stages via ACM certificates and Amazon Route 53 alias records.
  • Use stage variables and Lambda aliases to route traffic to approved versions per environment.
  • Perform blue/green deployments for Amazon ECS services behind Application Load Balancers with AWS CodeDeploy.
  • Update Amazon CloudFront distributions to serve new S3 or API origins and invalidate cached paths as needed.
  • Use AWS Copilot or AWS Amplify to provision environments and promote versions for container and web apps.
  • Parameterize CloudFormation stacks for environment differences without duplicating templates.
  • Implement database migration steps in pipelines with ordered actions and automatic rollbacks.
  • Maintain release notes and labels (Git tags) to trace deployed versions to commits.
  • Execute controlled rollbacks using previous Lambda aliases, ECS task sets, or CloudFormation stack versions.

Domain 4: Troubleshooting and Optimization (18%)

Practice this topic →

Task 4.1 - Instrument code for observability

  • Emit structured JSON logs with consistent fields (timestamp, level, correlationId) for Amazon CloudWatch Logs.
  • Use CloudWatch Logs Insights queries to filter, aggregate, and visualize log data.
  • Implement custom metrics with CloudWatch embedded metric format (EMF) to track domain-specific KPIs.
  • Set metric filters and alarms on error rates, latency, and throttles to trigger notifications.
  • Propagate correlation IDs across microservices via HTTP headers and message attributes.
  • Trace distributed requests with AWS X-Ray SDKs and annotations for service maps.
  • Configure AWS X-Ray sampling rules to balance visibility and overhead.
  • Build CloudWatch dashboards that combine metrics, logs, and alarms for service health.
  • Set up alerts for quota thresholds and near-limit conditions using CloudWatch and service-specific throttling metrics.
  • Instrument Lambda cold start metrics using initialization duration and provisioned concurrency metrics.
  • Redact sensitive fields before logging and enforce log retention policies per environment.
  • Integrate Amazon CodeGuru Reviewer to surface code issues in pull requests that affect reliability and security.

Task 4.2 - Assist in root cause analysis

  • Triage incidents using CloudWatch alarms, dashboards, and recent deployment history.
  • Diagnose API failures by correlating HTTP status codes, error messages, and latency distributions.
  • Identify AWS SDK exceptions and map them to retriable versus terminal conditions.
  • Query logs to isolate problematic tenants, users, or partitions based on identifiers.
  • Use AWS X-Ray service maps and traces to locate bottlenecks and failing upstream dependencies.
  • Investigate Lambda throttling, timeouts, and memory errors using concurrency and duration metrics.
  • Diagnose stream processing lag by monitoring iterator age and shard-level metrics.
  • Analyze AWS Step Functions execution history to find failing states and input or output transformations.
  • Inspect AWS CodeBuild, AWS CodeDeploy, and AWS CodePipeline logs to resolve deployment failures quickly.
  • Verify IAM permission issues using IAM Access Analyzer findings and AWS CloudTrail events.
  • Validate VPC connectivity for Lambda or ECS by checking elastic network interfaces, security groups, and VPC endpoint policies.
  • Document findings and create runbooks with remediation steps for recurring issues.

Task 4.3 - Optimize applications for performance and cost

  • Profile code hot paths with Amazon CodeGuru Profiler and prioritize cost-effective improvements.
  • Tune AWS Lambda memory to minimize duration cost while meeting latency service level objectives.
  • Reuse HTTP connections and enable keep-alive to improve SDK call performance.
  • Cache frequently accessed data with Amazon ElastiCache or in-memory caches in Lambda initialization.
  • Optimize Amazon SQS and Amazon SNS throughput using batching, long polling, and message attributes efficiently.
  • Scale Amazon Kinesis shards proactively based on observed throughput, partition key distribution, and enhanced metrics.
  • Use Amazon CloudFront to cache API responses based on headers, cookies, and query strings when appropriate.
  • Apply DynamoDB adaptive capacity considerations and hot partition mitigation strategies.
  • Reduce cold starts with provisioned concurrency or warming strategies where justified.
  • Optimize container resources (CPU and memory) and task counts for Amazon ECS services under load.
  • Use cost-aware storage classes in Amazon S3 and lifecycle rules to reduce storage spend.
  • Implement subscription filter policies in Amazon SNS to minimize unnecessary deliveries to subscribers.

Tip: After finishing a domain, take a 20–25 question drill focused on that domain, then revisit weak objectives before moving on.