SaveMyCert
Log in
5 of 5 free questions left today·for 10 a day
SAP-C03 practice

SAP-C03 sample questions — 25 answered and explained

25 SAP-C03 sample questions written to the official AWS Certified Solutions Architect – Professional (SAP-C03) exam guide, grouped by exam domain and weighted like the real exam. Each shows the correct answer, why every other option is wrong, and the lesson that teaches it. None of them repeat the examples on the other SAP-C03 practice pages.

On this page
25
answers included
Full bank
881
on the practice page
Domains
5
weighted like the exam
Free, no account
5/day
a free account allows 10 a day

Domain 1: Architecture Design and Implementation Built for the Cloud

25% of the SAP-C03 exam, so 6 of the 25 questions on this page.

Question 1Architecture Design and Implementation Built for the Cloud

An IoT analytics team stores Parquet files in Amazon S3 under paths partitioned by date, hour and device type, which has produced over 400,000 partitions in an AWS Glue Data Catalog table. Athena queries now spend most of their time in planning, and an hourly crawler means new data cannot be queried for up to an hour. The team wants fast planning and new hours to be queryable as soon as files land, with no partition-registration jobs. What should a solutions architect recommend?

Choose one.

  • a
    Add partition indexes on the date, hour and device type keys and keep the hourly crawler for new partitions

    Partition indexes speed up partition lookups during planning, but new hours still wait for the crawler to register them, which breaks the freshness requirement.

  • b
    Configure partition projection on the table with ranges for date and hour and an enum for device type Correct

    With projection, Athena calculates partition locations from the configured ranges instead of reading them from the catalog, so planning is fast and a new hour is queryable as soon as its files exist, with nothing to register.

  • c
    Switch the crawler to Amazon S3 event mode so that it registers new partitions from object-created events

    Event mode makes crawls cheaper and faster, but partitions still have to be registered by a job and planning still reads the large partition list.

  • d
    Run MSCK REPAIR TABLE from an AWS Lambda function each time a new file lands in the S3 bucket

    MSCK REPAIR scans the table location and is slow on a large layout, it is still a registration job, and catalog planning stays slow.

The concept

Athena partition projection computes partitions from table properties, bypassing catalog partition lookups and registration.

Why that’s the answer

Two requirements must hold together: fast planning on a huge partition count and zero-delay availability without registration. Partition projection meets both because Athena derives partition values from the configured ranges and path template. Partition indexes fix only planning; event-mode crawls and MSCK REPAIR fix only (some of) freshness and still register partitions.

How to reason it out
  1. Split the requirement into planning speed and freshness without registration.
  2. Test each option against both; most fix one.
  3. Recognise that only projection removes catalog partitions from the query path.

Exam tip: Highly partitioned, predictable S3 layouts: partition projection gives fast planning and instant new partitions with no crawler.

SAP-C03 Event-Driven, Serverless and Multi-Tenant Architecture — the lesson that teaches this.

Question 2Architecture Design and Implementation Built for the Cloud

A company is designing an order-fulfilment workflow that reserves stock, charges the customer, waits for the warehouse to confirm dispatch, and then sends a notification. A run can last up to six days. The payment step is not idempotent, so no step may run twice for the same order, and auditors need the full execution history of every order for 90 days. Which design meets these requirements?

Choose one.

  • a
    An AWS Step Functions Standard workflow started once for each order placed Correct

    Standard workflows run for up to a year with exactly-once step execution and keep a complete, queryable execution history.

  • b
    An AWS Step Functions asynchronous Express workflow started for each order

    Express workflows run for at most five minutes and use at-least-once execution, so a step can repeat; they also do not keep history in the service.

  • c
    An AWS Step Functions synchronous Express workflow called from the order API

    Synchronous Express workflows are at-most-once and still limited to five minutes, far short of six days.

  • d
    AWS Lambda functions chained through Amazon SQS queues, logging each step to DynamoDB

    SQS and Lambda event source mappings deliver at least once, so the non-idempotent payment step can run twice, and the audit history has to be built and kept by hand.

The concept

Step Functions Standard workflows are exactly-once, long-running (up to one year) and keep execution history; Express workflows are short and at-least-once (async) or at-most-once (sync).

Why that’s the answer

Six-day duration, a non-idempotent step and an audit history all point to a Standard workflow. Every Express variant is capped at five minutes and asynchronous Express can run a step more than once; a hand-built Lambda and SQS chain is also at-least-once and leaves the company to build its own execution history.

How to reason it out
  1. Check duration: anything over five minutes needs Standard.
  2. Check execution semantics: non-idempotent steps need exactly-once.
  3. Check audit needs: Standard keeps execution history in the service.

Exam tip: Long, non-idempotent, auditable workflow: Standard. Short, high-volume, idempotent: Express.

SAP-C03 Event-Driven, Serverless and Multi-Tenant Architecture — the lesson that teaches this.

Question 3Architecture Design and Implementation Built for the Cloud

A smart-meter platform must run a short workflow for every meter reading: validate it, enrich it from a DynamoDB table and write the result to Amazon S3. Peak load is about 20,000 readings per second, each workflow finishes in under 2 seconds, and every step is idempotent. The service that submits readings does not wait for the result. The company wants the MOST cost-effective AWS Step Functions design. Which design should a solutions architect choose?

Choose one.

  • a
    Standard workflows started for each reading, with retries on each task state

    Standard workflows are billed per state transition and have lower start rates; for 20,000 short runs per second they cost far more and risk throttling.

  • b
    Synchronous Express workflows called by the submitting service for each reading

    Synchronous invocation makes the caller wait for the result, which it does not need, and gives at-most-once semantics with no benefit here.

  • c
    Asynchronous Express workflows started for each reading by the submitting service Correct

    Asynchronous Express workflows suit high-rate, short, idempotent work: they are billed by request and duration, and at-least-once execution is safe because every step is idempotent.

  • d
    A Standard workflow with a Distributed Map state that is started once a minute

    A Distributed Map processes a batch in parallel, but batching per minute adds latency and child Standard executions still carry per-transition cost.

The concept

Express workflows trade exactly-once semantics and long duration for high rates and request/duration pricing.

Why that’s the answer

The workload is short, very high volume, idempotent and fire-and-forget. That is the Express sweet spot, and because the caller does not wait, the asynchronous invocation type fits. Standard would be correct but expensive at this rate; synchronous Express adds a wait the caller does not need.

How to reason it out
  1. Check duration and volume: short and very high favours Express.
  2. Check semantics: idempotent steps make at-least-once safe.
  3. Check the caller: no need for the result means asynchronous invocation.

Exam tip: High-volume, short, idempotent, fire-and-forget: asynchronous Express workflows.

SAP-C03 Event-Driven, Serverless and Multi-Tenant Architecture — the lesson that teaches this.

Question 4Architecture Design and Implementation Built for the Cloud

A travel company is building a booking workflow in AWS Step Functions that books a flight, a hotel and a rental car through three partner APIs, in that order. If any booking fails, the bookings already made must be cancelled. Trips over $5,000 must be approved by a human agent in an internal web app, and approval can take up to two days. The design must not poll for the approval. Which actions should a solutions architect take? (Select TWO.)

Choose TWO.

  • a
    Add a Catch to each booking task that routes to cancellation tasks for the earlier successful bookings Correct

    This is the saga pattern: each failure path runs compensating actions for the steps that succeeded, in reverse order.

  • b
    Add a Retry with a high MaxAttempts to each booking task so that each booking eventually succeeds

    Retries help with transient errors but a hard failure (no seats) still fails, and nothing cancels the bookings already made.

  • c
    Add an approval task using the .waitForTaskToken pattern, and have the web app call SendTaskSuccess Correct

    The workflow pauses until the app returns the task token with SendTaskSuccess or SendTaskFailure, with no polling and for as long as the Standard workflow allows.

  • d
    Add a Wait state that loops at five-minute intervals to check an approvals table for the agent decision

    This is polling, which the design must avoid, and it adds state transitions for up to two days.

  • e
    Run the bookings as an Express workflow with a Parallel state so that the three bookings run at once

    Express workflows end after five minutes, so they cannot wait two days for approval, and parallel booking does not compensate failures.

The concept

Long-running workflows use task tokens for external or human steps and Catch-driven compensation (sagas) for multi-service consistency.

Why that’s the answer

Two needs: undo partial work and wait for a human without polling. Catch blocks that call cancellation tasks implement the saga, and a .waitForTaskToken task pauses the Standard workflow until the web app returns the token. Retries do not compensate, a polling loop is ruled out, and Express workflows cannot run long enough.

How to reason it out
  1. Treat partial failure across services as a saga: compensate, do not roll back.
  2. Treat a human or external decision as a callback with a task token.
  3. Check duration: a two-day wait needs a Standard workflow.

Exam tip: Human approval = task token callback; cross-service rollback = saga compensation in Catch.

SAP-C03 Event-Driven, Serverless and Multi-Tenant Architecture — the lesson that teaches this.

Question 5Architecture Design and Implementation Built for the Cloud

A fintech team writes its loan-processing logic in Python on AWS Lambda and tests it with its existing unit-test framework. A new process must call a credit bureau, wait up to three days for an external payment confirmation, and then continue with the next steps. The team wants to keep the workflow in its own Python code rather than a separate state machine definition, and must not pay for compute while waiting. What should a solutions architect recommend?

Choose one.

  • a
    Model the process as an AWS Step Functions Standard workflow that invokes the existing functions for each call

    This would work technically, but it moves the workflow into an Amazon States Language definition, which the team wants to avoid.

  • b
    Run one Lambda function with a 15-minute timeout that polls in a loop and waits for the payment

    A Lambda invocation ends after 15 minutes at most, so it cannot wait three days, and it is billed for the whole time it polls.

  • c
    Have the function re-enqueue itself through an SQS delay queue and keep its progress in DynamoDB

    This rebuilds durable execution by hand: SQS delays are capped at 15 minutes and the team must write its own state and retry logic.

  • d
    Write the process as a Lambda durable function, using steps for each call and a callback wait Correct

    Durable functions keep the workflow in normal Python code, checkpoint each step, and suspend during waits without compute charges for up to a year.

The concept

Lambda durable functions provide checkpointed, long-running execution (up to a year) written in ordinary code, with no compute charge during waits.

Why that’s the answer

The deciding constraint is "keep the workflow in our own code". Step Functions could run the process but in a separate definition. A durable function wraps the handler, checkpoints each step, and suspends on waits without compute charges. A single invocation cannot last three days, and a hand-built SQS loop recreates what the service provides.

How to reason it out
  1. Confirm a durable mechanism is needed: the process waits for days.
  2. Apply the stated constraint: the workflow must stay in Python code.
  3. Choose the option that is both durable and code-first.

Exam tip: Durable workflow, code-first, in Lambda: durable functions. Visual or cross-service orchestration: Step Functions.

SAP-C03 Event-Driven, Serverless and Multi-Tenant Architecture — the lesson that teaches this.

Question 6Architecture Design and Implementation Built for the Cloud

A Lambda durable function generates an order reference with a random UUID at the top of its handler, then charges the customer in a step, waits one day for a shipping callback, and finally emails the customer in another step. Customers report that the reference in the email differs from the reference on their card statement. The steps themselves completed only once. What should a solutions architect change?

Choose one.

  • a
    Raise the function timeout to the maximum so that the execution stays active through the one-day wait between steps

    The wait suspends the execution regardless of the timeout, and an invocation cannot last a day; replay after the wait still re-runs the top of the handler.

  • b
    Move the UUID generation into its own durable step so that the checkpointed value is reused on replay Correct

    After the wait, the function replays from the start and skips completed steps, but code outside steps runs again; a new UUID is generated. Generating it inside a step checkpoints the value so replay returns the same reference.

  • c
    Publish a function version and invoke the durable function through an alias so the UUID code stays the same

    Pinning a version is a best practice so replays run the same code, but the same code still generates a new UUID on each replay.

  • d
    Configure provisioned concurrency so that the execution resumes in the same warm execution environment after each step

    Resumption may land in any environment, and replay re-runs the handler from the top even in a warm one, so the value still changes.

The concept

Durable functions resume by replaying the handler from the beginning; completed steps return checkpointed results, but code outside steps runs again, so it must be deterministic.

Why that’s the answer

The symptom (steps ran once, yet a value changed) is the replay model at work. Anything non-deterministic, such as a random ID or the current time, must be produced inside a step so its result is checkpointed and replayed. Timeouts, versions and warm environments do not change the fact that the handler body re-runs.

How to reason it out
  1. Recall that resumption means replay from the top of the handler.
  2. Identify non-deterministic code outside a step.
  3. Wrap it in a step so the checkpoint supplies the same value on replay.

Exam tip: In a durable function, anything random or time-based belongs inside a step; code outside steps re-runs on every replay.

SAP-C03 Event-Driven, Serverless and Multi-Tenant Architecture — the lesson that teaches this.

Domain 2: Security, Compliance, and Governance

25% of the SAP-C03 exam, so 6 of the 25 questions on this page.

Question 7Security, Compliance, and Governance

A company runs an internal reporting web application on EC2 instances behind an internet-facing Application Load Balancer with an HTTPS listener. Employees must sign in through the company's identity provider, which supports only SAML 2.0. The application cannot be changed to handle authentication, and unauthenticated requests must never reach the instances. Which actions should a solutions architect take? (Select TWO.)

Choose TWO.

  • a
    Add an authenticate-oidc action before the forward action and point its endpoints at the corporate IdP's SAML URLs

    The authenticate-oidc action speaks OpenID Connect only. A SAML 2.0 endpoint cannot act as its issuer, token or user info endpoint.

  • b
    Create an Amazon Cognito identity pool with the corporate IdP as a SAML provider and attach it to the HTTPS listener rule

    Identity pools return AWS credentials. An ALB listener cannot use an identity pool to authenticate browser users.

  • c
    Place Amazon CloudFront in front of the ALB and require signed cookies that are issued after users sign in through the corporate IdP

    Signed cookies need an application or edge function to authenticate users and issue them, which the stem rules out, and the ALB would stay reachable directly.

  • d
    Create an Amazon Cognito user pool, add the corporate IdP as a SAML identity provider, and create an app client for the ALB Correct

    The ALB can authenticate users only through OIDC or a Cognito user pool. A user pool can federate with a SAML 2.0 IdP, so it bridges the SAML-only IdP to the ALB.

  • e
    Add an authenticate-cognito action, which points to the user pool, before the forward action in the HTTPS listener rule Correct

    The listener rule authenticates every request at the load balancer before forwarding, so the application needs no code and unauthenticated users never reach the instances.

The concept

ALB built-in authentication supports OIDC or a Cognito user pool; a user pool federates SAML 2.0 IdPs, so it bridges SAML-only IdPs to the ALB.

Why that’s the answer

Two facts combine here. First, an ALB listener rule can authenticate users itself with authenticate-oidc or authenticate-cognito, so no application change is needed and unauthenticated requests stop at the load balancer. Second, the corporate IdP speaks only SAML 2.0, which authenticate-oidc cannot use. A Cognito user pool federates with SAML IdPs, so the ALB authenticates against the user pool, and the user pool sends users to the corporate IdP. Identity pools issue AWS credentials, not browser sessions, and signed cookies need custom code.

How to reason it out
  1. Find where authentication can happen without code: the ALB listener rule.
  2. Check which protocols the ALB supports: OIDC or a Cognito user pool.
  3. Bridge the SAML-only IdP through a Cognito user pool SAML provider.
  4. Use authenticate-cognito before forward so unauthenticated requests never reach targets.

Exam tip: ALB authentication speaks OIDC; for a SAML-only IdP, put a Cognito user pool in between.

SAP-C03 Identity Security Architecture: Identity Center Federation, Cognito, EKS Pod Identity, Least Privilege, ABAC and Data Perimeters — the lesson that teaches this.

Question 8Security, Compliance, and Governance

A photo-sharing app signs users in with an Amazon Cognito user pool. To cut costs, the company wants the app to upload images directly to one S3 bucket instead of through its API servers. Each user may write only under their own prefix in the bucket, and the company does not want to run a backend service that signs upload requests. What should a solutions architect do?

Choose one.

  • a
    Send the user pool access token in the S3 PUT request and add a bucket policy that allows principals from the user pool

    S3 does not accept Cognito user pool tokens; requests must be signed with AWS credentials, and a user pool is not a principal a bucket policy can name.

  • b
    Create an S3 access point for each user limited to that user's prefix, and have the app send its Cognito user pool ID token to it

    Access points still require requests signed with AWS credentials, so S3 rejects a user pool token, and creating an access point for every user does not scale with sign-ups.

  • c
    Have a Lambda function invoked through API Gateway return a presigned PUT URL scoped to the user's own prefix before each upload

    Presigned URLs restrict each upload correctly, but they require a backend service that signs requests, which the company does not want to run.

  • d
    Exchange the user pool token through a Cognito identity pool and scope the role to the prefix of the user's identity ID Correct

    An identity pool returns temporary AWS credentials for the signed-in user. A policy variable such as ${cognito-identity.amazonaws.com:sub} in the role's policy limits each user to the prefix named after their identity ID.

The concept

Cognito identity pools exchange user tokens for scoped temporary AWS credentials, and policy variables give each user their own resources.

Why that’s the answer

To call S3 directly, the app needs AWS credentials. An identity pool exchanges the user pool token for temporary credentials of an IAM role, and the role's policy can use the identity ID policy variable so each user can write only under their own prefix. User pool tokens cannot sign S3 requests, whether sent to the bucket or to an access point, per-user access points do not scale, and presigned URLs need the signing service the company wants to avoid.

How to reason it out
  1. Note that S3 needs AWS-signed requests, not application tokens.
  2. Use an identity pool to turn the user pool token into temporary AWS credentials.
  3. Scope the role with the identity ID policy variable for per-user prefixes.
  4. Reject options that send app tokens to S3, need per-user resources or need a signing backend.

Exam tip: User pool authenticates; identity pool hands out scoped AWS credentials. Use the identity ID variable for per-user access.

SAP-C03 Identity Security Architecture: Identity Center Federation, Cognito, EKS Pod Identity, Least Privilege, ABAC and Data Perimeters — the lesson that teaches this.

Question 9Security, Compliance, and Governance

A logistics company exposes an Amazon API Gateway REST API to 30 partner companies. Each partner's backend system calls the API with no human user involved. Partners may read shipment status, and only some partners may also create shipments. The company wants a standard OAuth 2.0 flow, credentials it can revoke per partner, and authorization enforced at API Gateway without custom code. Which actions should a solutions architect take? (Select TWO.)

Choose TWO.

  • a
    Create a resource server in an Amazon Cognito user pool with read and create scopes and one app client per partner using the client credentials grant Correct

    The client credentials grant is the OAuth 2.0 flow for machine-to-machine calls. One app client per partner can be disabled individually, and each client is allowed only the scopes that partner needs.

  • b
    Create an API key and usage plan for each partner as its client credential and require the key on the methods that create shipments

    API keys identify callers for throttling and quotas. AWS does not recommend them for authorization, and they are not an OAuth 2.0 flow.

  • c
    Create an Amazon Cognito identity pool with unauthenticated access and give each partner the identity pool ID

    Unauthenticated identities are open to any caller with the pool ID and cannot be tied to, or revoked for, a specific partner.

  • d
    Add a Cognito user pool authorizer to the API and set the required OAuth scope on each method Correct

    With OAuth scopes set on a method, the Cognito authorizer requires an access token carrying that scope, so API Gateway enforces read versus create without custom code.

  • e
    Create a resource server in an Amazon Cognito user pool with read and create OAuth scopes and one app client per partner using the authorization code grant

    The authorization code grant redirects a human user to sign in. Backend systems with no user cannot complete it.

The concept

Machine-to-machine OAuth 2.0 uses the client credentials grant; Cognito resource servers define scopes that API Gateway enforces per method.

Why that’s the answer

Partners' systems authenticate as themselves, not on behalf of a user, so the OAuth 2.0 client credentials grant fits. In Cognito, a resource server defines custom scopes, and each partner gets its own confidential app client that is allowed only its scopes and can be disabled on its own. A Cognito user pool authorizer with OAuth scopes on each method validates the access token and its scopes at API Gateway. API keys are not authorization, unauthenticated identity pools are open, and the authorization code grant needs a user.

How to reason it out
  1. Classify the caller: a backend system with no user, which means client credentials.
  2. Define permissions as resource-server scopes and give each partner its own app client.
  3. Enforce scopes at API Gateway with a Cognito authorizer and method OAuth scopes.
  4. Reject API keys (throttling, not auth) and user-interactive grants.

Exam tip: No user in the loop: client credentials grant plus scopes, checked per method by the Cognito authorizer.

SAP-C03 Identity Security Architecture: Identity Center Federation, Cognito, EKS Pod Identity, Least Privilege, ABAC and Data Perimeters — the lesson that teaches this.

Question 10Security, Compliance, and Governance

A company runs the same microservices in 12 Amazon EKS clusters on EC2 Linux managed node groups. Each service needs different AWS permissions. Today all pods use the node instance role. The cluster team cannot create IAM OIDC identity providers, because only the IAM team may do that, and the IAM team wants one role per service that works in every cluster without editing its trust policy when clusters are added. What should a solutions architect recommend?

Choose one.

  • a
    Configure IAM roles for service accounts, with one IAM OIDC identity provider per cluster and each provider added to each role's trust policy

    IRSA gives per-service roles, but each cluster needs its own OIDC provider, and each role's trust policy must list every cluster's provider, which is the work the IAM team wants to avoid.

  • b
    Install the EKS Pod Identity Agent and add a Pod Identity association per service account with a role trusting pods.eks.amazonaws.com Correct

    Pod Identity needs no OIDC provider. Every role trusts the single pods.eks.amazonaws.com principal, so new clusters only need associations, and the trust policy never changes.

  • c
    Create a separate managed node group per service, each with an instance role limited to that service's permissions

    Per-service node groups isolate permissions only if scheduling is strictly controlled, waste capacity and still expose the node role to every pod on the node.

  • d
    Store access keys for one IAM user per service in Kubernetes secrets and mount them into the pods of that service at startup

    Long-term access keys in secrets must be rotated and can leak; the requirement can be met with temporary credentials.

The concept

EKS Pod Identity maps a service account to an IAM role without OIDC providers, using one service principal that works in every cluster.

Why that’s the answer

Pod Identity associations are configured in EKS, and every role trusts pods.eks.amazonaws.com, so the same role works in any cluster without editing its trust policy. That separates the IAM team's work (roles and policies) from the cluster team's work (associations) and needs no OIDC provider. IRSA works but requires an OIDC provider per cluster and trust-policy edits, node roles give every pod on a node the same permissions, and stored keys are long-term credentials.

How to reason it out
  1. Note the two constraints: no OIDC providers, no trust-policy edits per cluster.
  2. Recall that IRSA relies on one OIDC provider per cluster.
  3. Choose Pod Identity, whose roles trust one service principal.
  4. Reject node-role and static-key designs for least privilege.

Exam tip: One role, many clusters, no OIDC provider: EKS Pod Identity.

SAP-C03 Identity Security Architecture: Identity Center Federation, Cognito, EKS Pod Identity, Least Privilege, ABAC and Data Perimeters — the lesson that teaches this.

Question 11Security, Compliance, and Governance

A SaaS cost-analysis vendor reads billing data from 400 customer AWS accounts. Each customer creates an IAM role that the vendor's processing role, in the vendor's own account, assumes. Customers enter their role ARN in the vendor's web console. The vendor wants to stop one customer from entering another customer's role ARN and receiving that customer's data. What should the vendor require in each customer's role?

Choose one.

  • a
    A trust policy that names the vendor's processing role as principal and requires an sts:ExternalId the customer chooses and enters

    Letting the customer choose the value defeats the control: a malicious customer can enter the victim's role ARN together with the victim's external ID if they ever learn or guess it.

  • b
    A trust policy that names the vendor's processing role as principal and requires aws:SourceIp to match the vendor's egress addresses

    Every customer's request comes from the same vendor role and IP addresses, so an IP condition cannot tell which customer the vendor is acting for.

  • c
    A trust policy that names the vendor's processing role as principal and requires an sts:ExternalId the vendor assigns to each customer Correct

    The vendor generates a unique external ID for each customer and always sends that customer's ID when assuming roles for them. A role ARN entered by another customer is assumed with the wrong external ID and fails.

  • d
    A trust policy that names the vendor's processing role as principal and requires aws:PrincipalOrgID to equal the customer's organization

    The vendor's role belongs to the vendor's organization, not the customer's, so this condition would block the vendor entirely and does not identify which customer is being served.

The concept

External IDs stop the confused deputy problem only when the third party assigns a unique value per customer and the customer's trust policy requires it.

Why that’s the answer

The vendor is a deputy acting for many customers with one identity. To stop customer A from steering it to customer B's role, the vendor generates a unique external ID per customer, shows it in that customer's console, and always passes it when acting for that customer. B's role requires B's ID, so a request on behalf of A fails. If customers choose the ID themselves, an attacker can reuse the victim's value. IP conditions and organization IDs cannot distinguish which customer the shared vendor role is serving. Trusting the specific vendor role instead of the account root is the tighter principal.

How to reason it out
  1. Recognise the confused deputy: one vendor identity, many customer roles.
  2. Recall the control: sts:ExternalId in the customer's trust policy.
  3. Check who generates it: the vendor, uniquely per customer, not the customer.
  4. Prefer the vendor's specific role as principal over its account root.

Exam tip: External ID: unique per customer, generated by the third party, required in the customer's trust policy.

SAP-C03 Identity Security Architecture: Identity Center Federation, Cognito, EKS Pod Identity, Least Privilege, ABAC and Data Perimeters — the lesson that teaches this.

Question 12Security, Compliance, and Governance

Application teams in a workload account need to create IAM roles for their own Lambda functions without waiting for the central security team. Security requires that no role a developer creates can ever have more permissions than a managed policy named DevBoundary allows, and that developers cannot escalate their own access by any route. Which controls should a solutions architect add to the developers' policy? (Select TWO.)

Choose TWO.

  • a
    Attach DevBoundary as the permissions boundary of the developers' own role so their own permissions are limited to it

    Bounding the developers' role limits what they can do, not what roles they create can do. A developer could still create an unbounded role with administrator access and use it.

  • b
    Allow iam:CreateRole, iam:PutRolePolicy and iam:AttachRolePolicy only when iam:PermissionsBoundary equals the DevBoundary ARN Correct

    This condition forces every role developers create or change to carry DevBoundary as its permissions boundary, so effective permissions never exceed it.

  • c
    Attach an SCP to the workload account that denies iam:CreateRole unless the caller is the central security team's role

    This blocks escalation by blocking role creation entirely, which fails the requirement that teams create their own roles.

  • d
    Require developers to pass DevBoundary as a session policy each time they assume their own role to create or update IAM roles

    A session policy limits only the developer's own session. Roles created during that session are not bound by it.

  • e
    Deny iam:DeleteRolePermissionsBoundary and deny iam:CreatePolicyVersion and iam:SetDefaultPolicyVersion on the DevBoundary policy Correct

    Without these denies, a developer could strip the boundary from a role or edit DevBoundary itself and widen every bounded role at once.

The concept

Safe delegation of IAM role creation needs a permissions-boundary condition on creation plus protection of the boundary itself.

Why that’s the answer

The iam:PermissionsBoundary condition makes it impossible to create or change a role's permissions unless DevBoundary is attached as its boundary, capping every created role. That alone leaves two escalation paths: removing the boundary from a role, or editing the DevBoundary policy to widen it. Explicit denies close both. Bounding the developers' own role, or scoping their session, does not constrain the roles they create, and an SCP that denies creation fails the self-service goal.

How to reason it out
  1. Separate what developers can do from what the roles they create can do.
  2. Cap created roles with an iam:PermissionsBoundary condition on create and attach actions.
  3. Close the bypasses: removing the boundary and editing the boundary policy.
  4. Reject controls that act only on the developer's own session or block creation entirely.

Exam tip: Delegated role creation = require the boundary on create, then protect the boundary from removal and edits.

SAP-C03 Identity Security Architecture: Identity Center Federation, Cognito, EKS Pod Identity, Least Privilege, ABAC and Data Perimeters — the lesson that teaches this.

Domain 3: Cost-Optimized Architecture Design

15% of the SAP-C03 exam, so 4 of the 25 questions on this page.

Question 13Cost-Optimized Architecture Design

A media company runs its stateless web tier in an EC2 Auto Scaling group with a mixed instances policy across eight instance types. Four instances must always run on capacity that AWS cannot reclaim, because they serve contracted traffic. Everything the group adds above those four can be interrupted, but the team wants replacements to start before a reclaimed instance stops, so that capacity does not dip. Which settings meet these requirements at the LOWEST cost? (Select TWO.)

Choose TWO.

  • a
    Set On-Demand base capacity to 4 and On-Demand percentage above base capacity to 0 Correct

    The first four instances launch On-Demand, and every instance above the base launches as Spot.

  • b
    Turn on Capacity Rebalancing for the group with the price-capacity-optimized strategy Correct

    Capacity Rebalancing launches a replacement Spot Instance when a rebalance recommendation signals elevated interruption risk, before the old instance is reclaimed.

  • c
    Set On-Demand base capacity to 0 and On-Demand percentage above base capacity to 100

    This launches every instance On-Demand, which removes Spot savings above the protected four.

  • d
    Set the Spot maximum price to the On-Demand price for each type in the policy

    A maximum price controls what you pay; it does not stop capacity reclaims or launch replacements early.

  • e
    Add a scheduled action that replaces the Spot Instances on an hourly schedule

    Scheduled replacement does not track interruption risk and adds launch overhead without protecting capacity.

The concept

Mixed instances policies split capacity between an On-Demand base, a percentage above it, and Spot; Capacity Rebalancing replaces at-risk Spot Instances proactively.

Why that’s the answer

OnDemandBaseCapacity=4 guarantees four non-reclaimable instances, and OnDemandPercentageAboveBaseCapacity=0 makes all extra capacity Spot for the lowest cost. Capacity Rebalancing responds to EC2 rebalance recommendations, which usually arrive before the two-minute interruption notice, by launching a replacement and then terminating the at-risk instance, so capacity does not dip. Percentage 100 removes savings, a maximum price does nothing for capacity, and scheduled churn is unrelated to interruption risk.

How to reason it out
  1. Protect the four contracted instances with On-Demand base capacity.
  2. Make everything above the base Spot with a 0% On-Demand share.
  3. Use Capacity Rebalancing to launch replacements before reclaims.

Exam tip: On-Demand base for what must not be interrupted, 0% On-Demand above it, and Capacity Rebalancing to replace at-risk Spot early.

SAP-C03 Pricing Models: Savings Plans, Reserved and Spot Capacity, Graviton, Step Functions, Rightsizing and AI Cost Optimization — the lesson that teaches this.

Question 14Cost-Optimized Architecture Design

A company runs 300 AWS Lambda functions written in Python and Node.js. None of them package native binaries or architecture-specific dependencies, and load tests on a sample show the same latency on either processor architecture. The company wants to lower the compute cost of these functions without changing their code or their invocation patterns. What should a solutions architect recommend?

Choose one.

  • a
    Turn on provisioned concurrency for each function sized to its average concurrency

    Provisioned concurrency adds a charge for keeping environments warm; it targets latency, not lower cost for these functions.

  • b
    Raise each function's memory setting so that invocations complete faster

    More memory can shorten runs, but each millisecond costs more and the code's latency is already acceptable.

  • c
    Change each function's architecture setting from x86_64 to arm64 and redeploy Correct

    Lambda functions on arm64 (Graviton) are priced lower per GB-second, and pure Python and Node.js code runs unchanged.

  • d
    Set reserved concurrency on each function to cap how many copies run in parallel

    Reserved concurrency limits scaling and can cause throttling; it does not lower the price per invocation.

The concept

Lambda on arm64 (Graviton) is billed at a lower duration price than x86_64 and usually gives better price performance.

Why that’s the answer

Switching the function's architecture to arm64 runs it on Graviton processors at a lower price per GB-second. With no native binaries or architecture-specific dependencies, the code needs no change. Provisioned concurrency and memory increases change performance characteristics and usually cost more, and reserved concurrency is a scaling limit, not a pricing lever.

How to reason it out
  1. Check for native or architecture-specific dependencies (none here).
  2. Recall that arm64 Lambda has a lower duration price.
  3. Switch the architecture setting and redeploy.

Exam tip: Interpreted Lambda code without native binaries can move to arm64 for a lower price with no code change.

SAP-C03 Pricing Models: Savings Plans, Reserved and Spot Capacity, Graviton, Step Functions, Rightsizing and AI Cost Optimization — the lesson that teaches this.

Question 15Cost-Optimized Architecture Design

A company ingests sensor readings through an AWS Step Functions Standard Workflow that runs about 40 million times a day. Each execution has six states, finishes in under 10 seconds, and writes idempotent PUT requests to Amazon DynamoDB. The Step Functions bill has become one of the largest line items. The company wants to lower the cost without changing the processing logic. What should a solutions architect do?

Choose one.

  • a
    Update the existing state machine's type from Standard to Express and keep its definition

    A state machine's workflow type is fixed at creation and cannot be updated.

  • b
    Keep the Standard Workflow and wrap the six states in one Lambda function to save transitions

    This lowers transitions but moves the logic into code, which the company wants to avoid, and keeps Standard pricing.

  • c
    Create a new Standard state machine that uses a Distributed Map state to batch readings

    Distributed Map adds child executions and changes the processing logic; it does not change Standard per-transition pricing.

  • d
    Create a new Express state machine from the same definition and send events to it Correct

    Express workflows are priced by executions, duration and memory instead of per state transition, which suits short, high-volume, idempotent runs.

The concept

Standard Workflows bill per state transition; Express Workflows bill per execution, duration and memory and suit short, high-volume, idempotent work.

Why that’s the answer

Forty million six-state executions a day generate hundreds of millions of state transitions, the Standard pricing unit. Each run is short and idempotent, which matches Express Workflows (up to five minutes, at-least-once for asynchronous runs). The workflow type cannot be changed on an existing state machine, so the definition is deployed as a new Express state machine and the event source is pointed at it.

How to reason it out
  1. Identify the pricing unit driving cost: state transitions in a Standard Workflow.
  2. Check fit for Express: under five minutes and idempotent.
  3. Remember the type is immutable, so create a new Express state machine.

Exam tip: Short, high-volume, idempotent workflows belong on Express; switching means creating a new state machine because the type is immutable.

SAP-C03 Pricing Models: Savings Plans, Reserved and Spot Capacity, Graviton, Step Functions, Rightsizing and AI Cost Optimization — the lesson that teaches this.

Question 16Cost-Optimized Architecture Design

An order-processing workflow in AWS Step Functions waits for a manager's approval, which can take up to three days, through a callback task token. After approval, it enriches every line of the order, up to 20,000 lines, each in a short idempotent step of about one second. The whole workflow runs as one Standard Workflow with a Map state, and enrichment state transitions dominate the bill. Which design is MOST cost-effective?

Choose one.

  • a
    Run the whole workflow as an Express Workflow and keep the Map state for the line enrichment

    Express Workflows end after five minutes and do not support the callback pattern, so the three-day approval cannot run in them.

  • b
    Run the approval in an Express parent and start a Standard child workflow for each order line

    The Express parent cannot wait three days for a callback, and Standard children still bill every transition.

  • c
    Keep a Standard parent for the approval and use a Distributed Map with Express child workflows Correct

    The Standard parent keeps the long callback wait, and Express children price the high-volume enrichment by duration instead of per transition.

  • d
    Keep one Standard Workflow and raise the Map state's concurrency so the enrichment finishes sooner

    Concurrency changes duration, not the number of state transitions that Standard Workflows are billed on.

The concept

A Standard Workflow can host long waits and callbacks, while a Distributed Map can run its child workflows as Express executions to cut per-transition cost on high-volume steps.

Why that’s the answer

The approval needs a Standard Workflow: it can wait for days and supports the .waitForTaskToken callback pattern, which Express does not. The enrichment is high-volume, short and idempotent, which is where per-transition pricing hurts. A Distributed Map state in the Standard parent can run its item processing as Express child workflows, billed by executions and duration. Making everything Express breaks the approval, and concurrency does not reduce transitions.

How to reason it out
  1. Find the long-running part (approval callback) and confirm it needs Standard.
  2. Find the high-volume part (line enrichment) and confirm it suits Express.
  3. Combine them: Standard parent, Distributed Map, Express children.

Exam tip: Mix types: Standard for long waits and callbacks, Express children under a Distributed Map for high-volume short steps.

SAP-C03 Pricing Models: Savings Plans, Reserved and Spot Capacity, Graviton, Step Functions, Rightsizing and AI Cost Optimization — the lesson that teaches this.

Domain 4: Resilience, Migration, and Business Continuity

15% of the SAP-C03 exam, so 4 of the 25 questions on this page.

Question 17Resilience, Migration, and Business Continuity

A company installed the AWS Replication Agent on 40 on-premises Linux servers. All 40 servers appear in the AWS Transform MGN console and replication servers have launched in the staging area subnet, but the initial sync never starts and every source server reports that it cannot connect to its replication server. The corporate firewall permits only outbound HTTPS from the data centre. What should the solutions architect change?

Choose one.

  • a
    Allow inbound TCP port 443 from the staging area subnet to the source servers

    Replication servers never open connections to the source servers; the agent initiates the data connection outbound.

  • b
    Allow outbound TCP port 1500 from the staging area subnet to the source servers

    The direction is reversed: the source servers connect to the replication servers on TCP 1500, not the other way round.

  • c
    Allow outbound TCP port 1500 from the source servers to the staging area subnet Correct

    Replicated data flows from the agent on each source server to the replication servers over TCP 1500; HTTPS-only egress blocks it while the agent's TCP 443 registration still works.

  • d
    Add an Amazon S3 gateway endpoint to the route table of the staging area subnet

    The staging subnet does need S3 access, but the replication servers have already launched; the error is the source-to-replication-server connection.

The concept

MGN uses two paths from the source: TCP 443 to the MGN endpoint for control, and TCP 1500 to the replication servers for data.

Why that’s the answer

The servers registering in the console proves TCP 443 to the MGN endpoint works. The data path is a separate outbound connection from the agent to the replication servers in the staging area subnet on TCP 1500, which an HTTPS-only firewall blocks. Opening inbound or reversed rules does not help because the agent initiates the connection, and S3 access concerns the staging subnet, which already works.

How to reason it out
  1. Use the symptom: registered in the console means the TCP 443 control path works.
  2. Recall the data path: agent to replication server on TCP 1500, initiated by the source.
  3. Open that port outbound from the source servers to the staging area subnet.

Exam tip: Console shows the server but sync never starts: open outbound TCP 1500 from the source servers to the staging subnet.

SAP-C03 Migration Strategies: Discovery, Wave Planning, AWS Transform MGN, DMS, DataSync and Modernization — the lesson that teaches this.

Question 18Resilience, Migration, and Business Continuity

A healthcare company will rehost 200 servers with AWS Transform MGN. Its security policy states that replicated disk data must travel only over the company's existing AWS Direct Connect private connection and that replication servers must not be reachable from the internet. The staging area subnet is a private subnet in a VPC that is reachable through the Direct Connect gateway. Which TWO replication settings should the solutions architect configure? (Select TWO.)

Choose TWO.

  • a
    Set the data routing option to use private IP for data replication to the staging subnet Correct

    Use private IP makes the agents send replicated data to the replication servers' private addresses, so it travels over the existing Direct Connect connection.

  • b
    Set bandwidth throttling for each source server so that replication stays on the private link

    Throttling caps the transfer rate on TCP 1500; it has no effect on which network path the data takes.

  • c
    Set the staging area subnet to the default subnet so replication servers use the VPC's routes

    A default subnet is public and unlikely to be reachable over the private connection, so it works against the policy.

  • d
    Set the replication server EBS volumes to be encrypted with a customer managed KMS key

    Encrypting staging volumes protects data at rest but changes neither the network path nor the replication servers' exposure.

  • e
    Set the replication server option to not create a public IP address for replication servers Correct

    By default MGN assigns replication servers a public IP; choosing not to create one keeps them unreachable from the internet.

The concept

MGN replication defaults to the public internet with public IPs on replication servers; private routing is two explicit settings.

Why that’s the answer

Two defaults have to be changed together. Data routing defaults to sending replicated data over the internet to the replication servers' public IPs; Use private IP sends it to their private addresses over Direct Connect (the option does not create the private connection, which already exists here). Separately, replication servers get a public IP by default; Do not create public IP removes it. Throttling, a default subnet and volume encryption don't control the path or exposure.

How to reason it out
  1. Recall the defaults: public IP on replication servers and data routed over the internet.
  2. Change the data path to private IP so it uses Direct Connect.
  3. Remove the public IP so the replication servers are not internet-reachable.

Exam tip: Private MGN replication = Use private IP for data routing + Do not create public IP.

SAP-C03 Migration Strategies: Discovery, Wave Planning, AWS Transform MGN, DMS, DataSync and Modernization — the lesson that teaches this.

Question 19Resilience, Migration, and Business Continuity

A company launched cutover instances for a 12-server application wave with AWS Transform MGN. During acceptance testing after cutover, the team finds a configuration problem in the application tier. It wants to fix the launch settings and launch fresh cutover instances later from the source servers, which are still running and replicating. What should the team do with the LEAST rework?

Choose one.

  • a
    Finalize the cutover so the servers move to Cutover complete, then launch new instances

    Finalizing stops replication and discards the replicated data, so there would be nothing to launch new cutover instances from.

  • b
    Revert the cutover so the servers return to Ready for cutover, keeping replication running Correct

    Reverting returns the source servers to Ready for cutover while replication continues, so a new cutover launch reflects the latest source state.

  • c
    Mark the source servers as archived so that MGN launches them again in the next wave

    Archiving only hides servers whose cutover is complete from the main list; it does not schedule a new launch.

  • d
    Disconnect the servers from MGN, then reinstall the agent to restart replication from scratch

    This would work, but forces a full initial resync of every disk, far more rework than reverting the cutover.

The concept

Until a cutover is finalized it can be reverted; finalizing ends replication for good.

Why that’s the answer

MGN lets you revert a launched cutover to Ready for cutover, optionally deleting the cutover instances, while replication keeps the staging copy current. Finalize is the point of no return: it stops replication, discards replicated data and terminates replication resources. Archiving is housekeeping after finalization, and reinstalling agents throws away the synced data.

How to reason it out
  1. Check whether the cutover has been finalized: here it has not.
  2. Choose revert to return to Ready for cutover with replication intact.
  3. Reserve finalize for after acceptance testing succeeds.

Exam tip: Problems after cutover but before finalize: revert to Ready for cutover; finalize only when the migration is accepted.

SAP-C03 Migration Strategies: Discovery, Wave Planning, AWS Transform MGN, DMS, DataSync and Modernization — the lesson that teaches this.

Question 20Resilience, Migration, and Business Continuity

A company is rehosting 300 Windows and Linux servers with AWS Transform MGN in waves. Every cutover instance must launch into the correct application subnet with the company's standard instance profile, and must have the Amazon CloudWatch agent installed and a hardening script run before the team validates it. The migration team wants these steps applied automatically at each launch rather than by engineers after every cutover. Which TWO configurations should the solutions architect use? (Select TWO.)

Choose TWO.

  • a
    Add the subnet, instance profile and hardening script to the replication settings template

    Replication settings control the staging area and replication servers, not the launched test or cutover instances.

  • b
    Build an AMI with the CloudWatch agent installed by EC2 Image Builder and launch cutovers from it

    MGN launches cutover instances from the replicated source volumes, not from a chosen AMI, so a golden AMI would discard the migrated server.

  • c
    Set the subnet and instance profile in the MGN launch settings and EC2 launch templates Correct

    MGN launches test and cutover instances from each server's EC2 launch template, so the subnet and instance profile set there apply to every launch.

  • d
    Activate MGN post-launch actions to install the CloudWatch agent and run an SSM document Correct

    Post-launch actions install the SSM Agent and run predefined or custom Systems Manager documents on test and cutover instances after launch.

  • e
    Tag each cutover instance at launch and let AWS Control Tower install the hardening script

    Control Tower applies account-level governance controls; it does not run scripts or install agents on individual instances.

The concept

MGN automates the target build with two layers: EC2 launch templates for how the instance launches, post-launch actions for what runs on it afterward.

Why that’s the answer

Two requirements need two mechanisms. Placement and identity (subnet, instance profile) belong in the launch settings and EC2 launch template that MGN uses for every test and cutover launch. Software and configuration changes on the launched instance belong in post-launch actions, which use Systems Manager documents (there is a predefined CloudWatch agent action, and custom documents run scripts). Replication settings only govern the staging area, a golden AMI would replace the migrated disks, and Control Tower doesn't execute instance scripts.

How to reason it out
  1. Separate launch-time settings (subnet, profile) from post-launch configuration (agent, script).
  2. Map launch-time settings to the EC2 launch template MGN uses.
  3. Map post-launch configuration to MGN post-launch actions (SSM documents).

Exam tip: MGN: launch template for where and how it launches; post-launch actions for what runs on it afterward.

SAP-C03 Migration Strategies: Discovery, Wave Planning, AWS Transform MGN, DMS, DataSync and Modernization — the lesson that teaches this.

Domain 5: Operational Excellence and Automation

20% of the SAP-C03 exam, so 5 of the 25 questions on this page.

Question 21Operational Excellence and Automation

A CloudFormation stack in a production account contains an Amazon Aurora cluster and several AWS Lambda functions. The deployment pipeline updates the stack several times each day. Requirements: any stack update that would replace or delete the Aurora cluster must be rejected, updates to the Lambda functions must continue to succeed, and nobody may delete the stack by mistake. Which TWO actions meet these requirements? (Select TWO.)

Choose TWO.

  • a
    Set DeletionPolicy: Retain on the Aurora cluster so that CloudFormation keeps it if an update would delete it from the stack

    Retain keeps the resource when it leaves the stack, but it does not reject the update that removes or replaces it.

  • b
    Set UpdateReplacePolicy: Retain on the Aurora cluster so that an update that would replace it keeps the old cluster

    This lets the replacement go ahead and only keeps the old cluster afterwards; the requirement is to reject the update.

  • c
    Apply a stack policy that denies Update:Replace and Update:Delete on the cluster's logical ID and allows Update:* on all other resources Correct

    A stack policy is evaluated during every stack update, blocking replacement or deletion of the protected resource while other resources still update.

  • d
    Enable termination protection on the stack Correct

    Termination protection makes delete-stack calls fail until it is turned off, preventing accidental deletion of the stack.

  • e
    Require a manual approval step in the pipeline before each change set for the stack is executed

    Manual approval of every change set slows the many daily Lambda updates and relies on a person spotting a replacement.

The concept

Stack policies guard individual resources during stack updates; termination protection guards the stack itself from deletion.

Why that’s the answer

Each requirement maps to one control. A stack policy is checked on every update, so denying Update:Replace and Update:Delete on the cluster makes those updates fail while an Allow on other resources keeps Lambda updates flowing. Termination protection blocks DeleteStack. DeletionPolicy and UpdateReplacePolicy decide what happens to the physical resource after it leaves the stack or is replaced; they do not stop the change. A manual approval for every change set works poorly with several daily deployments.

How to reason it out
  1. Separate the requirements: block replacement/deletion of one resource, allow others, prevent stack deletion.
  2. Use a stack policy for resource-level update protection.
  3. Use termination protection for stack-level delete protection.
  4. Reject resource attributes that only preserve resources after the change happens.

Exam tip: Block a risky update: stack policy. Block stack deletion: termination protection. Keep data after a change: DeletionPolicy / UpdateReplacePolicy.

SAP-C03 Infrastructure as Code: CloudFormation, CDK, Policy as Code and StackSets — the lesson that teaches this.

Question 22Operational Excellence and Automation

An Amazon RDS for PostgreSQL DB instance is defined in a CloudFormation template. The team accepts that some property changes will replace the instance, and those updates must still be allowed to proceed. Whenever the old instance is replaced, removed from the template, or deleted with the stack, a recoverable copy of its final data must remain available. The company must not keep paying for old DB instances afterward. Which TWO template settings meet these requirements? (Select TWO.)

Choose TWO.

  • a
    DeletionPolicy: Retain on the DB instance

    Retain keeps the whole old instance running and billing, which the company wants to avoid.

  • b
    UpdateReplacePolicy: Retain on the DB instance

    Retain keeps the replaced instance running outside the stack instead of keeping only a snapshot.

  • c
    DeletionPolicy: Snapshot on the DB instance Correct

    When the resource is removed from the template or the stack is deleted, CloudFormation takes a snapshot and then deletes the instance.

  • d
    BackupRetentionPeriod: 35 on the DB instance

    Automated backups belong to the instance; when CloudFormation replaces or deletes it they are removed by default (DeleteAutomatedBackups), so no final copy is guaranteed.

  • e
    UpdateReplacePolicy: Snapshot on the DB instance Correct

    When an update replaces the instance, CloudFormation snapshots the old physical instance before deleting it.

The concept

DeletionPolicy covers removal and stack deletion; UpdateReplacePolicy covers the old physical resource during a replacement.

Why that’s the answer

Two different events are named, and each has its own attribute. DeletionPolicy applies when the resource is removed from the template or the stack is deleted; UpdateReplacePolicy applies to the old resource when an update replaces it. Snapshot on both takes a final DB snapshot and then deletes the instance, so a recoverable copy remains and nothing keeps billing. Retain on either would leave running instances. A long automated-backup retention period does not help, because automated backups are tied to the instance and are removed with it by default when it is deleted.

How to reason it out
  1. List the events: replacement, removal from the template, stack deletion.
  2. Map replacement to UpdateReplacePolicy and removal/deletion to DeletionPolicy.
  3. Choose Snapshot rather than Retain because old instances must not keep running.
  4. Reject automated backups: they are deleted with the instance by default.

Exam tip: Snapshot on replace = UpdateReplacePolicy; snapshot on delete/removal = DeletionPolicy. You usually need both.

SAP-C03 Infrastructure as Code: CloudFormation, CDK, Policy as Code and StackSets — the lesson that teaches this.

Question 23Operational Excellence and Automation

During an incident, engineers changed security group rules and an Amazon S3 bucket policy in the console. The resources belong to a CloudFormation stack whose template did not change. Drift detection now shows several resources as MODIFIED. The team wants the next deployment to show exactly which live values will be overwritten and then restore every drifted property to its template value, including resources that the new template version does not modify. What should the team do?

Choose one.

  • a
    Run drift detection again, then create a standard change set from the same template and execute it to reapply the values

    A standard change set compares the new template with the previous template, so resources the template does not change are not updated and their drift stays.

  • b
    Remove the drifted resources from the stack with DeletionPolicy: Retain, then import them back with a resource import change set

    Resource import adopts the resources with their current properties; it does not restore the template values.

  • c
    Create a change set with --deployment-mode REVERT_DRIFT, review the actual-versus-desired comparison, and execute it Correct

    A drift-aware change set compares live state with the template and brings drifted resources back to their template definitions, even if the template did not change them.

  • d
    Enable the cloudformation-stack-drift-detection-check AWS Config rule so that it reverts drifted stacks to their templates

    This managed rule reports whether stacks have drifted; it does not change resource configuration.

The concept

Standard change sets compare template to template; drift-aware change sets compare the live state with the desired template and revert drift.

Why that’s the answer

Two facts decide it. A traditional stack update only acts on properties that changed between the previous and the new template, so out-of-band edits to unchanged resources survive the deployment. A drift-aware change set (DeploymentMode REVERT_DRIFT) performs a three-way comparison of actual state, previous deployment and desired template, shows what will be overwritten, and updates drifted resources back to the template, even when the template did not change them. Resource import keeps current values and the Config rule only reports.

How to reason it out
  1. Note that the template did not change, so a normal update has nothing to apply.
  2. Recall that standard change sets do not account for drift.
  3. Use a drift-aware change set (REVERT_DRIFT) to preview and revert live drift.
  4. Reject import (adopts current state) and Config drift checks (report only).

Exam tip: To overwrite drift with template values, create a drift-aware change set (REVERT_DRIFT); a normal update ignores drift on unchanged resources.

SAP-C03 Infrastructure as Code: CloudFormation, CDK, Policy as Code and StackSets — the lesson that teaches this.

Question 24Operational Excellence and Automation

A stack defines an EC2 Auto Scaling group with DesiredCapacity 4 and an AWS::AutoScaling::ScalingPolicy that uses target tracking. Under load, the group now runs 24 instances, and drift detection reports DesiredCapacity as drifted. An engineer must reconcile drift on other resources in the stack by using a drift-aware change set and is worried that the group will drop to 4 instances. The template does not change the group. What happens to the group's desired capacity?

Choose one.

  • a
    It is reset to 4, because a drift-aware change set reverts each drifted property in the stack to its template value

    Drift-aware change sets make an exception for AWS-managed properties, such as desired capacity managed by scaling policies.

  • b
    It is reset to 4 after the scaling policy is suspended, because CloudFormation reverts drifted properties once scaling activity stops

    CloudFormation does not wait for scaling to stop; it recognises the property as AWS-managed and leaves it alone.

  • c
    It stays at its actual value, because drift-aware change sets keep AWS-managed properties that the template did not change Correct

    Desired capacity driven by a scaling policy is treated as an AWS-managed property, so the drift-aware change set leaves its live value untouched.

  • d
    The change set fails, because drift-aware change sets do not support stacks that contain an Auto Scaling group

    Auto Scaling groups are supported; the change set lists the property among those whose drift it ignores.

The concept

Drift-aware change sets keep the live value of AWS-managed properties (such as scaling-managed desired capacity) unless the template changes them.

Why that’s the answer

A drift-aware change set normally restores drifted properties to the template, but it recognises properties that AWS services are expected to change, such as desired capacity managed by an AWS::AutoScaling::ScalingPolicy or Application Auto Scaling. When the template does not modify those properties, the actual value is preserved and the change set reports them as ignored drift. So the group keeps 24 instances.

How to reason it out
  1. Identify the property: desired capacity set by a scaling policy.
  2. Recall that drift-aware change sets treat such properties as AWS-managed.
  3. Check that the template does not change the property.
  4. Conclude the live value is preserved.

Exam tip: Drift-aware change sets revert real drift but leave AWS-managed properties (like scaled desired capacity) alone.

SAP-C03 Infrastructure as Code: CloudFormation, CDK, Policy as Code and StackSets — the lesson that teaches this.

Question 25Operational Excellence and Automation

A company requires that every Amazon RDS DB instance created through CloudFormation has DeletionProtection set to true and a backup retention period of at least 7 days. A non-compliant template must fail before any resource is provisioned. The security team wants to write the rules as declarative policy and does not want to maintain Lambda function code. Which solution meets these requirements?

Choose one.

  • a
    Activate a CloudFormation Guard Hook that checks RDS resources against Guard rules in Amazon S3, in FAIL mode Correct

    Guard Hooks run declarative Guard rules before CloudFormation provisions each resource and, in FAIL mode, stop the non-compliant operation.

  • b
    Deploy AWS Config managed rules for RDS deletion protection and backup retention, with automatic remediation runbooks

    Config rules evaluate resources after they exist and remediation corrects them later, so non-compliant instances are still created.

  • c
    Turn on the AWS Config rules for Amazon RDS deletion protection and backup retention in proactive evaluation mode

    Proactive evaluation returns a compliance result when asked, but it does not prevent CloudFormation from deploying the resource.

  • d
    Activate a CloudFormation Lambda Hook whose function checks the RDS properties and returns FAIL for violations

    This would block deployment, but it requires the Lambda code the security team does not want to maintain.

The concept

CloudFormation Hooks validate resources before provisioning; Guard Hooks do it with declarative Guard rules instead of code.

Why that’s the answer

The stem asks for prevention before provisioning, declarative rules and no Lambda code. A Guard Hook evaluates CloudFormation Guard rules stored in S3 against resources before they are created or updated, and FAIL mode stops the operation. A Lambda Hook would also prevent the deployment but needs function code. AWS Config rules are detective (after creation), and proactive Config evaluation does not block deployments.

How to reason it out
  1. Identify the timing: before any resource is provisioned.
  2. Identify the authoring constraint: declarative rules, no Lambda code.
  3. Choose a Guard Hook with failure mode FAIL.
  4. Reject detective Config rules and code-based Lambda Hooks.

Exam tip: Block non-compliant CloudFormation resources before creation with declarative rules: Guard Hook in FAIL mode.

SAP-C03 Infrastructure as Code: CloudFormation, CDK, Policy as Code and StackSets — the lesson that teaches this.

Keep going with SAP-C03

SAP-C03 practice by domain

SAP-C03 sample questions: your questions

No. Real exam questions are confidential. These are original questions written to the skills in the official SAP-C03 exam guide, so they test the same knowledge in the same style without being copies of the exam.

Source

The domains and weights on this page come from the official SAP-C03 exam guide.