DVA-C03 · 30% of the exam
Development with AWS Services practice questions
10 free Development with AWS Services questions for the AWS Certified Developer – Associate (DVA-C03) exam, each with the correct answer and an explanation for every option.
What this domain covers
Writing code that uses AWS services: Lambda, API Gateway, DynamoDB, messaging and the SDKs, plus two DVA-C03 additions: calling managed AI services such as Amazon Bedrock from an application, and using AI-assisted tools to write and review code.
- Exam weight
- 30%
- On a real exam
- ≈ 20 questions
- In our bank
- 214 questions
Topics that come up most
- Lambda configuration, concurrency, destinations and event source mappings
- API Gateway integrations, transformations and validation
- DynamoDB keys, indexes, consistency, queries vs scans
- SQS, SNS, EventBridge, Kinesis and event-driven patterns
- SDK retries with backoff, idempotency and serialization
- Calling Amazon Bedrock from code and AI-assisted development
How to study it
Build one small serverless app end to end and add a single Bedrock call to it. Questions assume you've hit throttling, timeouts and partition-key choices yourself.
Sample Development with AWS Services questions
Try each one before opening the answer. Original questions written to the official exam objectives.
Question 1
A product page is served by Amazon API Gateway and a Lambda function with a 6-second timeout. The function reads recommendations from a DynamoDB table in another Region through the AWS SDK with default client settings. During a network problem between Regions, the SDK calls hang, the function times out, and the whole page fails. The page must load within 3 seconds, and showing it without personalized recommendations is acceptable. Which actions should the developer take? (Choose two.)
Select 2 answers.
- AIncrease the function timeout to 30 seconds so that the SDK has time to finish its default retries
- BSet the SDK client's connect and request timeouts and maximum attempts so that the total call time stays under about 2 seconds
- CSet the SDK retry mode to adaptive with a maximum of 10 attempts so that the client backs off from the slow endpoint
- DCatch the SDK timeout error and return the page with a default or cached list of recommendations
- EConfigure provisioned concurrency on the function so that each request starts with an initialized SDK client
Show answer and explanation
Answer: B) Set the SDK client's connect and request timeouts and maximum attempts so that the total call time stays under about 2 seconds; D) Catch the SDK timeout error and return the page with a default or cached list of recommendations
Fault tolerance in code means bounded timeouts and retries that fit the caller's latency budget, plus a fallback when an optional dependency fails.
- AIncorrect. The page would take longer than 3 seconds, and the API Gateway integration timeout would still end the request first.
- BCorrect. Bounding timeouts and retries makes the SDK call fail fast, leaving time to build the page.
- CIncorrect. Adaptive mode limits the client's request rate, but 10 attempts make a hanging dependency take even longer.
- DCorrect. This is graceful degradation. The page still renders when the optional dependency is unavailable.
- EIncorrect. Provisioned concurrency removes cold starts. It doesn't stop calls to an unreachable endpoint from hanging.
Question 2
What is the effect of setting a Lambda function's ReservedConcurrentExecutions to 0?
- AThe function is effectively disabled from processing new invocations, since it's reserved zero capacity to run
- BThe function runs with unlimited concurrency
- CThe function is permanently deleted
- DIt has no effect on the function's ability to run
Show answer and explanation
Answer: A) The function is effectively disabled from processing new invocations, since it's reserved zero capacity to run
- ASetting reserved concurrency to 0 gives the function no capacity to execute at all, so new invocations will be throttled — a technique sometimes deliberately used as an emergency "kill switch" to stop a misbehaving function from running without deleting it.
- BZero reserved concurrency does the opposite — it eliminates the function's execution capacity rather than granting it unlimited capacity.
- CSetting concurrency to 0 doesn't delete the function or its configuration; it just prevents it from being invoked until changed.
- DThis setting has a very real, immediate effect — it blocks the function from executing at all while set to 0.
Question 3
After deploying an update to a static asset in S3, users behind CloudFront continue seeing the old cached version until the TTL expires. What can the team do to force CloudFront to fetch the updated version immediately?
- ACreate a CloudFront invalidation for the affected path(s)
- BDelete and recreate the entire CloudFront distribution
- CWait for the S3 object's version ID to change automatically with no other action
- DIncrease the origin's read replica count
Show answer and explanation
Answer: A) Create a CloudFront invalidation for the affected path(s)
- AAn invalidation request tells CloudFront to treat cached copies of the specified paths as expired immediately, forcing the next request to fetch a fresh copy from the origin, rather than waiting for the normal TTL to elapse.
- BRecreating the whole distribution is a drastic, disruptive way to solve what invalidation handles directly and non-disruptively for specific paths.
- CA version ID changing in S3 doesn't automatically invalidate CloudFront's existing cached copy — an explicit invalidation (or a cache-busting filename/version in the URL) is needed.
- DRead replicas are a relational database concept, unrelated to CloudFront's caching of S3 content.
Question 4
A DynamoDB single-table design stores several entity types, such as employees, warehouses, and HR records. The table has one GSI whose key attributes use generic names (for example, Data). Each entity type fills these attributes with values that mean something different for that entity. This technique is called GSI overloading. What is the main benefit of this approach?
- AOne GSI can serve several different query patterns across entity types, so the table needs fewer GSIs than one per access pattern
- BIt raises the table's quota of global secondary indexes above the default of 20 so that more access patterns can be indexed
- CIt makes DynamoDB project every base-table attribute into the GSI automatically, so you do not have to choose a projection type
- DIt allows strongly consistent reads on the GSI, because entity types that share one key attribute are written to the index synchronously
Show answer and explanation
Answer: A) One GSI can serve several different query patterns across entity types, so the table needs fewer GSIs than one per access pattern
GSI overloading reuses generically named GSI key attributes across entity types. This lets one index support many access patterns and reduces the number of GSIs a single-table design needs.
- ACorrect. The same attribute can hold different kinds of information in different items. Because of this, one GSI keyed on generic attributes can answer several different queries, such as looking up an employee by name, finding employees by warehouse, or listing recent hires. This lets you index far more data fields than the GSI count alone would suggest.
- BIncorrect. Overloading does not change the GSI quota, which defaults to 20 per table. Its value is that you can index across more than 20 data fields while staying within that quota.
- CIncorrect. You still choose the projection (KEYS_ONLY, INCLUDE, or ALL) when you define the GSI. Overloading the key attributes does not change which attributes are projected.
- DIncorrect. GSIs support only eventually consistent reads, and overloading does not change this. Overloading only affects how key attributes are reused across entity types.
Question 5
A developer has written a Node.js Lambda function that generates a large report and exposes it through a Lambda function URL. Clients should start receiving parts of the report as soon as they are produced, instead of waiting for the full payload. Which function URL setting meets this requirement?
- ASet the invoke mode to RESPONSE_STREAM so that Lambda invokes the function with the InvokeWithResponseStream API
- BSet the invoke mode to BUFFERED so that Lambda invokes the function with the Invoke API
- CSet the invoke mode to EVENT so that Lambda invokes the function asynchronously and forwards partial output
- DSet the auth type to NONE so that Lambda skips IAM authorization and sends output as it is generated
Show answer and explanation
Answer: A) Set the invoke mode to RESPONSE_STREAM so that Lambda invokes the function with the InvokeWithResponseStream API
Function URLs have two invoke modes. BUFFERED is the default and uses Invoke, returning the full payload up to 6 MB. RESPONSE_STREAM uses InvokeWithResponseStream to stream partial results, up to 200 MB.
- ACorrect. The RESPONSE_STREAM invoke mode makes Lambda use InvokeWithResponseStream, so payload results stream to the client as they become available. Streamed responses can be up to 200 MB.
- BIncorrect. BUFFERED is the default mode. Lambda uses the Invoke API and makes results available only after the payload is complete, with a 6 MB maximum. Nothing is delivered progressively.
- CIncorrect. EVENT is an InvocationType value for the Invoke API (asynchronous invocation), not a function URL invoke mode. Asynchronous invocations return no function output to the caller.
- DIncorrect. The auth type (AWS_IAM or NONE) controls only how requests to the URL are authorized. It has no effect on whether the response is buffered or streamed.
Question 6
A producer sends batches of 500 records to an Amazon Kinesis data stream with PutRecords, using merchantId as the partition key. One merchant generates about 40% of the traffic. Every call returns HTTP 200, but downstream totals are missing data. A response shows FailedRecordCount of 37, and the failed entries have ErrorCode ProvisionedThroughputExceededException, almost all for one shard. The consumers aggregate totals and don't need records in order. Which actions should the developer take? (Choose two.)
Select 2 answers.
- AResend the entire 500-record batch with exponential backoff whenever FailedRecordCount is greater than 0
- BResend only the entries that have an ErrorCode, with exponential backoff and jitter
- CSwitch from PutRecords to individual PutRecord calls so that each record is accepted or rejected separately
- DRegister the downstream application as an enhanced fan-out consumer to raise the stream's throughput
- EAdd a random suffix, for example 0 to 9, to the hot merchant's partition key so that its records spread across shards
Show answer and explanation
Answer: B) Resend only the entries that have an ErrorCode, with exponential backoff and jitter; E) Add a random suffix, for example 0 to 9, to the hot merchant's partition key so that its records spread across shards
PutRecords can partly fail with HTTP 200; retry only failed entries with backoff. Fix a hot shard by spreading the hot key when ordering isn't needed.
- AIncorrect. Resending successful records creates duplicates and adds load to the throttled shard.
- BCorrect. PutRecords isn't all-or-nothing. Each result entry reports success or an error, and only failed entries need to be retried.
- CIncorrect. Single-record calls hit the same shard limits and add many more requests.
- DIncorrect. Enhanced fan-out raises read throughput for consumers. The throttling here is on writes to one shard.
- ECorrect. One partition key always maps to one shard. Because ordering isn't required, a suffix spreads the hot merchant's writes across shards.
Question 7
IoT devices send readings to an Amazon Kinesis data stream with 20 shards. The producer uses the device's country code as the partition key, and 80% of devices are in one country. Producers get ProvisionedThroughputExceededException while most shards are almost idle. Readings from each device must stay in order. What should the developer do?
- AUse a random UUID as the partition key for every record
- BDouble the number of shards in the stream
- CUse the device ID as the partition key
- DSwitch the producer from PutRecords to PutRecord so each record is sent separately
Show answer and explanation
Answer: C) Use the device ID as the partition key
Pick a high-cardinality Kinesis partition key that keeps the required ordering (for example device ID), so load spreads across shards.
- AIncorrect. Random keys spread load but send one device's readings to different shards, so their order is lost.
- BIncorrect. All records with the same partition key still go to one shard, so the hot country's traffic still hits a single shard's limit.
- CCorrect. A high-cardinality key spreads devices across all shards, while all readings from one device still go to the same shard and stay in order.
- DIncorrect. Sending records one at a time adds overhead and doesn't change which shard they go to.
Question 8
An e-commerce application creates tens of thousands of orders each day. For each order, a Lambda function must run once, 45 minutes after the order is placed (to within about a minute), to cancel the order if it is still unpaid. Which approach meets this requirement with the least custom code?
- ACreate an Amazon EventBridge Scheduler one-time schedule for each order, using an at() expression that targets the function
- BSend a message for each order to an Amazon SQS queue with a message timer of 45 minutes, and have the function consume it
- CWrite each order to a DynamoDB table with a TTL 45 minutes ahead, and process the TTL deletions from DynamoDB Streams
- DInvoke the function asynchronously with the Lambda Invoke API and set a delay parameter of 45 minutes on the request
Show answer and explanation
Answer: A) Create an Amazon EventBridge Scheduler one-time schedule for each order, using an at() expression that targets the function
EventBridge Scheduler one-time schedules (at() expressions) run a target once at a set time, to within a minute, and can handle a very large number of schedules. SQS can delay messages by at most 15 minutes, and DynamoDB TTL deletions can lag by days.
- ACorrect. EventBridge Scheduler supports one-time schedules defined with an at() expression, invokes targets with 60-second precision, and can handle millions of schedules. It is built for per-item scheduling like this.
- BIncorrect. SQS message timers and delay queues can delay a message by at most 15 minutes, so a 45-minute delay isn't possible. The SQS documentation points to EventBridge Scheduler for longer delays.
- CIncorrect. DynamoDB deletes expired items on a best-effort basis, typically within a few days of expiry. That is far too imprecise for a 45-minute deadline.
- DIncorrect. The Lambda Invoke API has no parameter for delaying an invocation. An asynchronous invocation is queued and processed as soon as possible.
Question 9
A Lambda function processes an Amazon Kinesis data stream through an event source mapping with a batch size of 100. ReportBatchItemFailures is enabled and BisectBatchOnFunctionError is turned off. In one batch, the handler processes all 100 records and returns the sequence numbers of record 40 and record 75 in batchItemFailures. What does Lambda do next?
- AIt retries starting from record 40, so records 41 through 100 are processed again along with the two failed records
- BIt retries only records 40 and 75 in a new batch and advances the checkpoint past all other records in the original batch
- CIt retries starting from record 75, because the highest reported sequence number becomes the new checkpoint
- DIt sends records 40 and 75 to the on-failure destination right away and continues with the next batch from the stream
Show answer and explanation
Answer: A) It retries starting from record 40, so records 41 through 100 are processed again along with the two failed records
For Kinesis and DynamoDB Streams partial batch responses, Lambda checkpoints at the lowest reported sequence number and retries everything after it.
- ACorrect. When several sequence numbers are returned, Lambda uses the lowest as the checkpoint and retries every record from there. The handler must therefore be idempotent.
- BIncorrect. Stream processing is ordered by shard. Lambda can't skip records between failures; it checkpoints and resumes from a position.
- CIncorrect. Lambda uses the lowest sequence number. Starting at record 75 would lose the failure at record 40.
- DIncorrect. Records go to an on-failure destination only after retries are exhausted or the record age limit is reached, not on the first failure.
Question 10
A developer's application uses PartiQL for all Amazon DynamoDB access. The application needs to write up to 20 new items across three tables, using INSERT statements, in as few network round trips as possible. The writes don't depend on each other: if one INSERT fails, the other INSERTs should still be applied, and the application will retry only the failed ones. Which API operation should the developer use?
- ABatchExecuteStatement, sending all of the INSERT statements together in a single request
- BExecuteTransaction, sending all of the INSERT statements together as one transactional request
- CExecuteStatement, sending each INSERT statement in its own separate request from a loop
- DBatchWriteItem, converting each INSERT statement into a PutRequest in one request
Show answer and explanation
Answer: A) BatchExecuteStatement, sending all of the INSERT statements together in a single request
BatchExecuteStatement is PartiQL's non-transactional batch operation. It runs up to 25 read-only or write-only statements in one call, and each statement succeeds or fails on its own. ExecuteTransaction is the atomic, all-or-nothing alternative.
- ACorrect. BatchExecuteStatement runs up to 25 PartiQL statements in one call. A single batch must be all reads or all writes. It isn't transactional: each statement returns its own result, and an HTTP 200 response doesn't mean every statement succeeded. The application can check the per-statement Error field and retry only the failures.
- BIncorrect. ExecuteTransaction is all-or-nothing. If any statement fails, the whole transaction is canceled with TransactionCanceledException, so none of the writes are applied. That conflicts with the requirement that the other INSERTs still succeed.
- CIncorrect. ExecuteStatement runs one PartiQL statement per call. It would work, but it needs up to 20 round trips instead of one, which fails the requirement to minimize network calls.
- DIncorrect. BatchWriteItem is a classic DynamoDB API, not a PartiQL operation. Using it would mean leaving the PartiQL interface the application uses for all DynamoDB access, when a PartiQL batch operation already exists.
Development with AWS Services: FAQs
How much of the DVA-C03 exam is Development with AWS Services?
Development with AWS Services is 30% of the DVA-C03 exam by the official exam guide's weighting, which on a 65-question form works out to roughly 20 questions. The real exam's exact split varies by form.
What does the Development with AWS Services domain cover?
Writing code that uses AWS services: Lambda, API Gateway, DynamoDB, messaging and the SDKs, plus two DVA-C03 additions: calling managed AI services such as Amazon Bedrock from an application, and using AI-assisted tools to write and review code.
How should I study Development with AWS Services for DVA-C03?
Build one small serverless app end to end and add a single Bedrock call to it. Questions assume you've hit throttling, timeouts and partition-key choices yourself.
Where can I practise more Development with AWS Services questions?
This page has 10 free Development with AWS Services questions with answers. CertRidge's DVA-C03 question bank has 214 questions in this domain. Every practice exam result breaks your score down by domain, and Review Mode re-drills the questions you missed.
Get Development with AWS Services exam-ready
The full DVA-C03 bank has 214 Development with AWS Services questions. Timed practice exams match the real exam's length and domain weights, every result shows your score per domain, and Review Mode re-drills the questions you missed.
Not affiliated with AWS; questions are original and never copied from the real exam.