DVA-C03 cheat sheet — every exam topic on one page
120 key facts across 4 exam domains — every topic on the DVA-C03 blueprint, with the exam pattern behind each. A condensed cheat sheet, distilled from the full DVA-C03 revision notes. Skim it the week of your exam.
Updated
Development with AWS Services
30% of the examDVA-C03 Application Development: Decoupling, APIs, SDKs, Events, Streams and AI
- SQS buffers work for competing consumers; SNS fans one message out to every subscriber; one SQS queue per consumer behind an SNS topic gives independent, buffered fan-out.
- Keep only what the caller needs right now synchronous; API Gateway's integration timeout is 29 seconds by default, so long work goes to a queue, an event or an async Lambda invocation (X-Amz-Invocation-Type: 'Event' in a non-proxy integration).
- Backoff needs jitter to break synchronized retries; adaptive retry mode adds client-side rate limiting on top of standard retries.
- AWS messaging is at-least-once: make consumers idempotent with a stable key (business ID or EventBridge event id) recorded by a conditional write.
- REST APIs validate bodies with JSON Schema models and transform with VTL mapping templates in non-proxy integrations; HTTP APIs support neither.
- Use paginators for list calls, waiters for resource readiness, and catch only the specific error code you can handle.
- EventBridge: filter in the event pattern (numeric ranges included), DLQ for failed deliveries, archive and replay (optionally to specific rules) for reprocessing.
- S3 notifications go to SNS standard, SQS standard, Lambda or EventBridge; keys arrive URL-encoded; use EventBridge to reach FIFO queues and prefix/suffix filters to avoid loops.
- Kinesis ordering is per shard via the partition key; high-cardinality keys avoid hot shards; enhanced fan-out gives each app its own read throughput; Firehose buffers and delivers without consumer code.
- Kiro specs plan before code, steering holds conventions, hooks automate checks; Bedrock Converse is model-agnostic, ConverseStream needs bedrock:InvokeModelWithResponseStream, and batch inference suits offline jobs.
How the exam tests this
Task 1.1 questions are developer scenarios: an application misbehaves (timeouts, lost or duplicated work, throttling, parse errors, AccessDeniedException) or a team states a requirement with a constraint such as no code changes, no Lambda or least operational overhead, and you choose the configuration or code change that meets it. Expect near-twin options from the same service family: SQS vs SNS vs EventBridge, one shared queue vs a queue per consumer, standard vs adaptive retry mode, a longer visibility timeout vs an idempotency key, proxy vs non-proxy integrations, REST vs HTTP APIs, a DLQ vs archive and replay, an input transformer vs an event pattern, more shards vs a better partition key or enhanced fan-out, Converse vs InvokeModel, and Kiro steering vs hooks vs specs with their inclusion modes and triggers. Over a quarter of items are multiple response and often require combining two facts, such as a partition key plus a parallelization factor, an IAM role plus a mapping template, or a filter scope plus a nested policy. Some stems include short Python SDK code or JSON event payloads, so read what the code actually does with the data format it receives.
DVA-C03 Lambda Development: Configuration, VPC Access, Error Handling and Event Sources
- Code outside the handler runs once per execution environment; reuse SDK clients and connections there, but keep per-request state inside the handler.
- Memory also sets CPU; ephemeral storage sizes /tmp; the 15-minute timeout is a hard ceiling, so longer jobs move to Step Functions or containers.
- Environment variables are limited to 4 KB in total and are frozen into each published version; promote changes by publishing a version and moving the alias.
- Reserved concurrency caps and guarantees (0 stops the function); provisioned concurrency pre-initialises environments on a version or alias.
- Layers extract to /opt in runtime-specific folders (python/, nodejs/node_modules/); container-image functions take no layers.
- A VPC-attached function needs AWSLambdaVPCAccessExecutionRole, security-group references, NAT for the internet and VPC endpoints for AWS services; it never gets a public IP.
- RDS Proxy pools connections for highly concurrent functions and lets them authenticate with IAM tokens instead of passwords.
- Destinations and DLQs apply only to asynchronous invocations and are written with the execution role; destinations send a richer record to more targets.
- SQS, Kinesis and DynamoDB Streams failures are handled on the event source mapping: partial batch responses, the queue's redrive policy, bisect, retry limits and on-failure destinations.
- With proxy integration the function returns statusCode, headers and a string body, and API Gateway needs a resource-based policy statement to invoke it.
How the exam tests this
Questions on this task are scenarios about a developer whose function misbehaves or needs a new capability, and you choose the configuration or code change that fixes it, often with a constraint such as least privilege, no code change, no internet egress or keeping throughput. Expect to tell apart near-twin settings: memory versus timeout versus ephemeral storage, reserved versus provisioned concurrency, destinations versus dead-letter queues, function asynchronous settings versus event source mapping settings, execution role versus resource-based policy, and gateway versus interface endpoints versus NAT. Error messages are common clues (Task timed out, No space left on device, ModuleNotFoundError, 502 malformed proxy response, Invalid permissions on Lambda function, CreateNetworkInterface denied), as are CloudWatch metrics such as IteratorAge and DeadLetterErrors. Some items are multiple response, and short SDK, policy or configuration snippets may appear.
DVA-C03 Data Stores: DynamoDB Design, Caching and Data Lifecycles
- DynamoDB fits key-based lookups at any scale; RDS and Aurora fit ad hoc joins and multi-table transactions; S3 holds large objects; ElastiCache serves hot data in memory. Items over 400 KB go to S3 with the key stored in DynamoDB.
- In a versioned bucket, expiring current versions only adds delete markers; NoncurrentVersionExpiration, ExpiredObjectDeleteMarker and AbortIncompleteMultipartUpload free the storage.
- DynamoDB TTL needs a Number in epoch seconds, deletes in the background within days without using write capacity, and marks its stream records with principalId dynamodb.amazonaws.com.
- Object Lock compliance mode cannot be overridden by anyone; governance mode can be bypassed with s3:BypassGovernanceRetention; a legal hold has no end date until removed.
- Valkey or Redis OSS adds sorted sets, pub/sub, replication, failover and snapshots; Memcached is a simple multithreaded cache. Cluster mode enabled shards writes and memory.
- Lazy loading caches only what is read but can serve stale data; write-through stays fresh but churns; a TTL bounds staleness with either.
- DAX is API-compatible, caches only eventually consistent reads, updates its item cache on writes, and refreshes its query cache only when the TTL ends.
- Each partition handles at most 3,000 read and 1,000 write units per second; use high-cardinality, composite or sharded keys, on the table and on GSIs.
- Filters run after the read, Limit counts items before filtering, and only a missing LastEvaluatedKey ends pagination; GSIs are eventually consistent only.
- Condition expressions make check-and-write atomic; TransactWriteItems makes several conditional writes all-or-nothing, and BatchWriteItem does neither.
How the exam tests this
Task 1.3 questions describe an application and its access pattern, then ask which store, cache, lifecycle setting or DynamoDB configuration meets a stated constraint such as least code, no scheduled jobs, lowest cost, tolerated staleness or reading as little data as possible. Distractors are usually real features that solve a neighbouring problem: more capacity for a hot key, a filter for a Query that needs a key condition, a read replica where a cache is needed, governance mode where only compliance mode fits. Expect symptom-first items (throttling with spare capacity, expired items still returned, no DAX cache hits, a filtered page that comes back short), capacity-unit arithmetic, and multiple-response items that need two settings working together. Read the constraint words closely; they decide between options that would all work in general.
Security
26% of the examDVA-C03 Authentication and Authorization: IAM, Cognito, STS and Signed URLs
- User pools authenticate people and issue JWTs; identity pools exchange tokens (or guest access) for temporary AWS credentials. AWS services accept only SigV4-signed requests, never JWTs.
- ${cognito-identity.amazonaws.com:sub} is the identity pool identity ID, not the user pool sub claim; use it with dynamodb:LeadingKeys or S3 prefixes for per-user access.
- Federate CI/CD with an IAM OIDC provider and AssumeRoleWithWebIdentity, and pin the token's sub claim in the trust policy; an aud condition alone admits every workflow on the platform.
- Cognito authorizer for user pool tokens on REST APIs, JWT authorizer for OIDC tokens on HTTP APIs, Lambda authorizer for custom logic, IAM authorization for AWS principals; API keys are not authentication.
- Lambda authorizer policies are cached per key across methods: return a policy for everything the caller may access, and remember a missing REQUEST identity source yields 401 without an invocation.
- SDKs use the first credentials in the provider chain, so environment variables or files override instance and task roles; ECS application calls use the task role, not the task execution role.
- AssumeRole needs the role's trust policy and the caller's permission; chained role sessions are capped at one hour and longer requests fail.
- Across accounts both the identity policy and the resource policy (bucket, key, queue, API) must allow the call; services invoking your resources need resource-based policies scoped with aws:SourceArn.
- S3 presigned URLs act with the signer's permissions and die with the signer's temporary credentials; CloudFront signed URLs or cookies with a trusted key group plus origin access control protect content served through CloudFront.
- Use BoolIfExists on aws:MultiFactorAuthPresent in MFA deny statements, and get MFA-backed temporary credentials with GetSessionToken or AssumeRole plus SerialNumber and TokenCode.
How the exam tests this
Task 2.1 questions are developer scenarios: an app needs users signed in, a pipeline must stop using access keys, a call returns AccessDenied, 401 or 403, or a link to private content expires too early. Most items set a constraint (no long-term credentials, no backend compute, no authorization code, least privilege, no new roles, the bucket stays private) and offer several mechanisms that would almost work, so you must know exactly what each one does: which Cognito component issues tokens and which issues AWS credentials, which token an authorizer expects, which role a service uses, which side of a cross-account call needs a policy, and how long a signed URL really lives. Expect IAM policy JSON, trust-policy conditions and CLI configuration snippets, and multiple-response items that ask for every change a fix needs.
DVA-C03 Encryption and Sensitive Data: KMS, S3 Encryption, Certificates and Secrets
- Customer managed KMS keys are the only keys whose policy you edit, share across accounts and can disable in an emergency; AWS managed keys such as aws/s3 cannot be shared.
- SSE-KMS reads need kms:Decrypt and writes need kms:GenerateDataKey; cross-account use needs the key policy and the caller's IAM policy, on the key ARN.
- S3 Bucket Keys cut SSE-KMS request volume and cost without changing the key; new general purpose buckets block SSE-C until default encryption stops blocking it.
- KMS Encrypt handles at most 4 KB: use GenerateDataKey, encrypt locally and store only the CiphertextBlob, never the plaintext data key.
- Decrypt must repeat the exact encryption context; kms:EncryptionContext:<key> conditions isolate tenants on one key.
- Automatic rotation keeps the key ID and old material; imported material rotates by importing into the same key and calling RotateKeyOnDemand.
- RDS encryption is set at creation (snapshot, encrypted copy, restore); DynamoDB switches keys in place; EBS encryption by default covers every new volume.
- CloudFront certificates must be in ACM us-east-1; only DNS-validated ACM certificates renew on their own; internal names and mutual TLS need AWS Private CA.
- Macie finds PII in S3 and reports to EventBridge; CloudWatch Logs data protection masks new events and logs:Unmask reveals them to chosen principals.
- Rotating credentials belong in Secrets Manager; use RDS-managed passwords, alternating users for connection pools, and a VPC endpoint plus database access for rotation functions.
How the exam tests this
Questions on this task are developer scenarios in which data must be encrypted, a certificate issued or renewed, sensitive data found or hidden, or a secret stored and rotated, usually under a constraint such as fewest changes, no code changes, no rotation code, the key ARN must not change, the table must stay online or no added AWS charges. Expect to diagnose AccessDenied and InvalidCiphertextException errors from missing KMS permissions or encryption context, to tell apart near-twin options (SSE-KMS with aws/s3 vs a customer managed key, GenerateDataKey vs GenerateDataKeyWithoutPlaintext, kms:EncryptionContext vs kms:EncryptionContextKeys, s3:ExistingObjectTag vs s3:RequestObjectTag, ACM public vs exportable vs private certificates, single user vs alternating users rotation), and to pick the managed feature over custom code. Several items are multiple response, where each correct option is one half of a working fix, such as the key policy and the IAM policy for cross-account KMS use.
DVA-C03 AI Service Security: Bedrock Access, Guardrails, Agents and Logs
- Bedrock model access is enabled on first invocation; models sold through AWS Marketplace need Marketplace permissions for that first call only, and Anthropic models also need the first-time use case form (again in opt-in Regions).
- To keep a model blocked, deny bedrock:InvokeModel* on its ARN; denying aws-marketplace:Subscribe or deleting the model agreement does not hold.
- Converse needs bedrock:InvokeModel and ConverseStream needs bedrock:InvokeModelWithResponseStream; a guardrail adds bedrock:ApplyGuardrail on the guardrail ARN; a cross-Region inference profile needs the model allowed in every destination Region.
- Model inference over PrivateLink uses an interface endpoint for bedrock-runtime; without private DNS the SDK needs the vpce endpoint URL, and behind an endpoint scope with aws:SourceVpce because aws:SourceIp is absent.
- Bedrock never uses your prompts or responses to train base models or shares them with providers; fine-tuning trains a private copy.
- Guardrails: content filters for harmful categories, denied topics for subjects, word filters for exact strings, sensitive information filters (Block, Mask or None, per direction) for PII and regex patterns, the prompt attack filter for injection.
- With InvokeModel, user input must be in guardrail input tags or prompt attacks are not filtered; tool results are never assessed, so screen them with ApplyGuardrail.
- Converse reports an intervention with stopReason guardrail_intervened; ApplyGuardrail returns action NONE with empty outputs when nothing matched, and its source (INPUT or OUTPUT) picks which settings apply.
- Human approval before an agent action is user confirmation (CONFIRM or DENY in the same session); running the action in your own app is return of control; tool authorization outside agent code is AgentCore Gateway inbound auth plus Cedar policies.
- AgentCore Runtime isolates each runtimeSessionId in a microVM but does not map users to sessions; invocation logs and guardrail traces keep original PII, so mask logs with a data protection policy and grant logs:Unmask narrowly.
How the exam tests this
Questions on this task are developer scenarios in which an application calls Amazon Bedrock or runs an agent and something must be secured: a model call is denied or must be restricted, traffic must stay private, prompts or responses must be filtered or redacted, an agent action needs approval or authorization, sessions must not leak between users, or logs must not expose personal data. The deciding detail is usually a service behaviour (which IAM action an API uses, that aws:SourceIp is absent behind an endpoint, that tool results are not screened, that masking does not reach invocation logs, that AgentCore does not map users to sessions) or a stated constraint such as least privilege, no internet path, no code change or enforcement outside the agent's code. Multiple-response items often need two controls that together meet a requirement.
Testing and Deployment
22% of the examDVA-C03 Deployment Artifacts: Dependencies, ECR Images, AppConfig and API Gateway Stages
- Build once, deploy many: keep environment values out of the artifact and supply them per environment, so the tested package is the released one.
- Commit a lock file and install with a lock-honouring command such as npm ci; build native dependencies for the target runtime with sam build --use-container.
- Multi-stage builds shrink images, copying the dependency manifest before the source keeps the dependency layer cached, and docker buildx can publish one multi-architecture tag.
- ECR logins use get-login-password piped to docker login (12-hour token); ecr:GetAuthorizationToken needs Resource "*" while push and pull actions stay scoped to the repository.
- Tag images with the commit ID for traceability, pin approved images by digest, and use IMMUTABLE or IMMUTABLE_WITH_EXCLUSION to stop tags being reused.
- In lifecycle policies, lower priority numbers apply first, an image matched by a higher-priority rule is protected from lower ones, tagStatus any goes last, and expiry happens within about 24 hours.
- Replication copies images to other Regions or accounts after each push; pull through cache copies from an upstream registry on first pull.
- CodeConnections connections created by CLI or CloudFormation stay PENDING until completed in the console; CodeArtifact tokens need sts:GetServiceBearerToken in the identity policy.
- AppConfig validators reject bad data at StartDeployment, alarms plus a gradual strategy with bake time roll back harmful values, and the AppConfig Agent caches data at localhost:2772.
- API Gateway REST API changes need a deployment to reach a stage; stage variables pointing at Lambda aliases need a resource-based permission per alias, or calls return 500.
How the exam tests this
Questions on this task are developer scenarios in which an application artifact has to be built, stored, distributed or configured for deployment, and either something is failing or the design must meet a stated requirement. Scenarios cover dependency packaging, Dockerfiles and image architecture, Amazon ECR access, tagging and repository housekeeping, moving images between Regions, accounts and external registries, source and package repositories in builds, per-environment configuration and secrets, and API Gateway stages, endpoint types and custom domains. The deciding factor is usually a precise service behaviour or a constraint written into the stem, such as least privilege or keeping one artifact for every environment, and several options are real features that would work in a slightly different situation. Multiple-response items often need two settings or permissions that together meet the requirement.
DVA-C03 Application Testing: SAM, CDK, Mocks, Test Events and Environments
- CDK unit tests: Template.fromStack plus assertions, in memory, no deployment; hasResourceProperties means at least one match, allResourcesProperties means every resource.
- validate-template checks syntax, cfn-lint checks resource schemas, CloudFormation Guard checks your own policy rules; AWS Config and drift detection only see deployed resources.
- sam local invoke runs one event, start-api serves HTTP routes, start-lambda emulates the Invoke API for SDK-driven tests; local runs use your profile credentials, not the execution role.
- Shareable Lambda test events live in the lambda-testevent-schemas EventBridge schema registry and need EventBridge Schemas permissions; sam remote invoke runs them against the deployed function.
- Proxy integration bodies and SQS record bodies are strings; HTTP APIs default to payload format 2.0 (requestContext.http.method, rawPath).
- A REST API mock integration needs a request template that emits the status, a matching integration response and a method response for each status; HTTP APIs have no mock integration.
- TestState runs one state with a mocked result or error and needs no role with a mock; callback, .sync, Map and Parallel states require a mock.
- Versions freeze configuration and aliases carry none; each alias used through a stage variable needs its own invoke permission.
- Pin environments to unique immutable image tags or to digests, never to latest.
- Kiro file hooks fire only on the agent's edits; headless CI needs KIRO_API_KEY, --no-interactive and the narrowest --trust-tools list.
How the exam tests this
Questions on this task are developer scenarios in which a test must be written, a test is passing locally but failing in the cloud, or an environment is running the wrong code or configuration. Many are decided by a stated constraint such as without deploying, in seconds on every commit, without invoking the function, with no backend code, without rewriting the existing tests, unattended and read-only, or the same version in every environment. Others turn on a precise service behaviour: what each template-validation tool checks, which SAM CLI command emulates what, where shareable test events are stored, the exact shape of API Gateway, SQS and EventBridge payloads, how a mock integration chooses its response, when TestState needs a mock, how alias permissions are scoped, how tags and digests pin images, Amplify preview restrictions, and which Kiro trigger or CLI flag applies. Multiple-response items usually need two settings that together meet the requirement.
DVA-C03 CI/CD: CodePipeline, CodeDeploy, ECS/EKS Deployments, Strategies and Rollback
- .zip direct upload is limited to 50 MB zipped; through S3 the limit is 250 MB unzipped including layers; beyond that use a container image (up to 10 GB). These quotas cannot be raised.
- A rebuilt image under the same tag reaches neither Lambda nor running ECS tasks on its own: update the Lambda function code, or force a new ECS deployment (or register a new revision).
- Package type is fixed at creation, and functions keep the layer version they reference until you update them, even after that version is deleted.
- Fargate needs awsvpc, task-level CPU/memory, a task execution role to pull images and a network path to ECR (NAT or ecr.api, ecr.dkr and S3 endpoints).
- ECS circuit breaker = tasks that cannot start; deployment alarms = healthy tasks with bad metrics. ECS BLUE_GREEN uses lifecycle hooks and a bake time without CodeDeploy.
- EKS zero-downtime rollout: maxUnavailable 0, maxSurge above 0 and a readinessProbe; kubectl rollout undo goes back a revision.
- CodeDeploy ApplicationStop runs the previous revision's script; ECS validation through the test listener runs in AfterAllowTestTraffic; a rollback is a new deployment with a new ID.
- SAM gradual deploys: AutoPublishAlias + DeploymentPreference Type (Canary/Linear/AllAtOnce) + Alarms + PreTraffic/PostTraffic hooks.
- CodePipeline V2: tag-filtered push triggers for releases, QUEUED for every commit in order, PARALLEL for per-branch runs (no rollback), rollback-stage to restore an earlier execution.
- CloudFormation: change sets preview replacements; rollback triggers watch alarms for up to 180 minutes; preserve successfully provisioned resources to fix and retry.
How the exam tests this
Questions on this task are developer scenarios in which code has to reach an environment, or a bad release has to be stopped: a Lambda package is too large or a new image or layer is not picked up, an ECS, Fargate or EKS rollout stalls, drops capacity or never fails, a CodeDeploy hook runs at the wrong time or a broken script blocks deployments, a pipeline starts for the wrong events or skips commits, a cross-account action cannot read its artifact, or a release must roll back automatically or be restored by hand. The deciding detail is usually a service behaviour (tag-to-digest resolution, which script ApplicationStop runs, what the circuit breaker watches, how a rollback appears, which execution mode supports rollback) or a stated constraint such as no spare capacity, a minimum number of serving tasks, no new task definition revision, no separate deployment service or no plain-text credential. Multiple-response items often need two settings that work together, such as an execution role plus VPC endpoints or a rollback trigger plus a monitoring time.
Troubleshooting and Optimization
22% of the examDVA-C03 Root Cause Analysis: Lambda and API Errors, Logs Insights, X-Ray, Deployment Logs and AI Troubleshooting
- Work in order: metrics locate the symptom, traces locate the hop, logs explain the request, CloudTrail and deployment logs reveal the change.
- 'Task timed out after N seconds' is a timeout; a killed runtime well before the timeout on large inputs is out of memory; a throttled invocation writes no logs at all.
- In an AccessDenied message, the principal tells you whose policy to fix; cross-account KMS needs both the key policy and the caller's IAM policy.
- API Gateway 502 with a successful Lambda means a malformed proxy response; 504 at about 29 seconds is the integration timeout; Latency far above IntegrationLatency points at the authorizer.
- Use p99 for latency tails; flat ConcurrentExecutions plus rising Throttles and no Errors means a concurrency ceiling.
- X-Ray Error = 4xx, Fault = 5xx, Throttle = 429; of your custom fields only annotations are searchable, and OpenTelemetry attributes need aws.xray.annotations to become annotations.
- Logs Insights runs left to right: parse before filter, filter before stats; Lambda REPORT fields include @maxMemoryUsed and @initDuration.
- CloudTrail event history covers 90 days of management events without setup, never data events; S3 Lifecycle expirations are not API calls.
- Read the first real failure: earliest non-cancelled CREATE_FAILED, the failing CodeBuild phase, ScriptFailed in scripts.log, or the ECS stopped reason.
- CloudWatch investigations, Logs Insights Generate query (cloudwatch:GenerateQuery) and Kiro #terminal/#problems/#git diff speed up analysis, but their output must be reviewed.
How the exam tests this
Expect scenario questions that give you an artefact and ask for the cause or the next step: a Lambda log line or REPORT line, an AccessDenied message naming a role, API Gateway status codes with Latency and IntegrationLatency values, a set of Lambda and SQS metrics, an X-Ray trace timeline or Error/Fault/Throttle split, a Logs Insights query to choose or complete, a CodeBuild log or buildspec, a CodeDeploy lifecycle failure, CloudFormation stack events, or an ECS stopped-task reason. Wrong options are usually real AWS features that act on a different signal from the one the evidence shows. Several questions use multiple-response format, and a few ask which AWS AI tool or Kiro context provider fits an investigation, or which permission it needs.
DVA-C03 Logging, Monitoring and Observability: CloudWatch, EMF, Alarms, X-Ray and Health Checks
- Lambda's JSON log format plus an application log level gives structured, level-filtered logs with no code change (level filtering applies only with JSON format), but a level set in code takes precedence; the system log level filters only Lambda's platform records.
- Lambda's requestId is per invocation; link a request across components with a shared correlation ID or business key logged as a top-level JSON field.
- Lambda log groups never expire by default: set retention. Send logs to S3 for cheap long-term storage, CloudWatch Logs for real-time use, Firehose for streaming on.
- Data protection policies mask sensitive values on view and logs:Unmask reveals them; KMS encryption controls access to the whole log group, and filters never redact.
- Embedded metric format emits custom metrics from logs with no API calls; every unique dimension combination is a separate metric, CloudWatch does not aggregate across dimensions, and IDs belong in fields, not dimensions.
- Sub-minute alerting needs StorageResolution 1 and a 10, 20 or 30-second alarm period; metric filters only count new events and need a default value of 0 for sparse matches.
- Use notBreaching for metrics published only on failure, composite alarms to page on combined conditions, and a customer managed key for SNS topics that alarms or EventBridge publish to.
- Quota alerts: Service Quotas console alarms or usage / SERVICE_QUOTA() metric math. Deployment alerts: EventBridge state-change rules for CodeDeploy, CodePipeline and ECS (SERVICE_DEPLOYMENT_FAILED needs the circuit breaker).
- X-Ray tracing works on API Gateway REST stages and Lambda active tracing (TracingConfig Mode: Active plus PutTraceSegments and PutTelemetryRecords on the execution role); HTTP APIs have no X-Ray support. Annotations are indexed, metadata is not.
- Instrument new code with OpenTelemetry or ADOT and the CloudWatch agent or a collector (X-Ray SDKs and daemon are in maintenance mode); keep liveness checks shallow, use readiness for temporary unavailability and startup probes for slow starts.
How the exam tests this
Questions on this task are developer scenarios in which an application must be made observable or a signal is missing or noisy: logs are unstructured, unfiltered, too costly, kept too long or expose personal data; a custom metric adds latency, has no data under the dimensions an alarm uses, is too coarse or creates too many metrics; an alarm never leaves INSUFFICIENT_DATA, pages too often or cannot publish to its topic; a team needs alerts for quota utilization or deployment outcomes; a trace lacks the API Gateway segment, cannot be searched by tenant, misses rare requests or is rejected for permissions; or healthy tasks and pods are restarted while hung ones are not. The deciding detail is usually a service behaviour (which log level wins, what a dimension set identifies, what metric filters process, which Region a metric lives in, which role a sidecar uses, what each probe does on failure) or a stated constraint such as no code change, no redeploy, least operational effort, no load balancer or keeping existing alarms. Multiple-response items often need two settings that work together, such as a tracing mode plus role permissions or a circuit breaker plus an event rule.
DVA-C03 Optimization: Lambda Concurrency, Memory, Messaging, Caching and Bottlenecks
- Lambda throttles (429) when the account quota or the per-function scaling rate of 1,000 environments every 10 seconds is exceeded; schedule provisioned concurrency for known bursts.
- Reserved concurrency guarantees and caps a function's concurrency at no charge; provisioned concurrency pre-initializes environments on a version or alias and is billed while configured.
- Scale provisioned concurrency with Application Auto Scaling target tracking on utilization plus scheduled actions; SnapStart restores from a snapshot instead of keeping environments running, cannot be combined with provisioned concurrency, and priming belongs in beforeCheckpoint.
- Lambda CPU scales with memory (one vCPU at 1,769 MB, up to 6 at 10,240 MB); measure the cost–speed balance with Lambda Power Tuning and rebuild native dependencies for arm64.
- Compute Optimizer rightsizes EC2, Lambda and ECS on Fargate from history; EC2 memory needs the CloudWatch agent, and the look-back can be extended to 32 or 93 days.
- Use long polling, 10-entry batch APIs, larger event source mapping batches with a batching window, SNS-to-SQS buffering with maximum concurrency, and event source mapping filters to cut requests and invocations.
- Keep the CloudFront cache key minimal and forward extras with an origin request policy; only a minimum TTL above 0 overrides an origin's no-cache; use hashed file names instead of invalidations.
- Rising Evictions with memory near 100% means scale ElastiCache up or out with shards; DAX does not cache strongly consistent or transactional reads.
- Graph p99 rather than averages, watch ApproximateAgeOfOldestMessage for queue lag, and use Contributor Insights to find DynamoDB hot keys.
- Give Kiro live data through the AWS CloudWatch MCP server, and accept AI suggestions only when they preserve behaviour, such as retrying BatchGetItem UnprocessedKeys.
How the exam tests this
Expect scenario questions in which a developer must make an application faster, cheaper or more scalable under a stated constraint: no paying for idle environments, synchronous responses, a maximum wait, no new service, or no access to a resource another team owns. You need to tell near-identical settings apart (reserved versus provisioned concurrency, SnapStart versus provisioned concurrency, minimum versus default TTL, cache policy versus origin request policy, long polling versus MaxNumberOfMessages, subscription filter policy versus event source mapping filter) and to read CloudWatch metrics such as spillover invocations, Evictions, ApproximateAgeOfOldestMessage and percentiles to name the bottleneck. Several items are multiple response, and AI-tool items ask how to give Kiro live metrics and whether its suggested change keeps the application correct.
Where these DVA-C03 facts came from
DVA-C03 cheat sheet: your questions
Source
Exam structure, domain weights and scoring on this page come from the official DVA-C03 exam guide.
- AWS Certified Developer – Associate (DVA-C03) exam guide — Amazon Web Services