Skip to main content

AWS · SOA-C02

SOA-C02 practice questions with answers

15 free practice questions for the AWS Certified SysOps Administrator – Associate (SOA-C02) exam, spread across the exam's domains. Try each one, then open the answer to see why every option is right or wrong.

  1. Question 1 · Monitoring, Logging, and Remediation

    A company runs workloads in dozens of AWS accounts in AWS Organizations, all in the same Region. The operations team wants to run one CloudWatch Logs Insights query against application log groups from many accounts, and to graph CloudWatch metrics from those accounts side by side. Accounts created later in the organization should be included automatically. The team does not want to build pipelines that copy the data. Which solution meets these requirements?

    • ACreate an AWS Config aggregator in a central account that collects data from every account in the organization
    • BConfigure CloudWatch cross-account observability with a monitoring account sink and link the organization's accounts as source accounts
    • CCreate an organization trail in AWS CloudTrail that delivers events from all accounts to a central Amazon S3 bucket
    • DShare a CloudWatch dashboard from each account with the operations team members by using dashboard sharing
    Show answer and explanation

    Answer: B) Configure CloudWatch cross-account observability with a monitoring account sink and link the organization's accounts as source accounts

    CloudWatch cross-account observability links source accounts to a monitoring account so the team can query logs and graph metrics across accounts without copying data. Linking through AWS Organizations adds new accounts automatically.

    • AIncorrect. An AWS Config aggregator collects resource configuration and compliance data from many accounts. It does not give access to CloudWatch Logs log groups or CloudWatch metrics, so you can't use it to run Logs Insights queries or graph metrics.
    • BCorrect. Cross-account observability lets a monitoring account search and analyze metrics, log groups and traces from linked source accounts. The data is not copied. When source accounts are linked through AWS Organizations, accounts created later in the organization are added automatically.
    • CIncorrect. An organization trail centralizes records of API activity. It does not include application log groups or CloudWatch metrics, so it cannot support Logs Insights queries or metric graphs across accounts.
    • DIncorrect. Dashboard sharing gives people read access to an existing dashboard. It does not let you run one Logs Insights query across many accounts' log groups, and new accounts would need their own dashboards shared by hand.
  2. Question 2 · Monitoring, Logging, and Remediation

    A web application writes structured JSON access logs, including a clientIp field, to a CloudWatch Logs log group. During load spikes, the operations team wants a continuously updated time series showing the top 10 client IP addresses by request count, so they can quickly find the clients sending the most traffic. Which solution meets this requirement?

    • ACreate a CloudWatch Contributor Insights rule on the log group that uses clientIp as the contributor key
    • BCreate a metric filter on the log group that counts every request into a single RequestCount metric
    • CEnable CloudWatch anomaly detection on the load balancer's RequestCount metric
    • DDeploy a CloudWatch Synthetics canary that calls the application endpoints every minute
    Show answer and explanation

    Answer: A) Create a CloudWatch Contributor Insights rule on the log group that uses clientIp as the contributor key

    Contributor Insights analyzes log data in real time and shows time series of the top-N contributors, keyed on a log field such as the client IP. This makes it the right tool for finding which clients send the most traffic.

    • ACorrect. Contributor Insights rules analyze incoming log data in real time. They build time series of the top-N contributors, keyed on log fields you choose, such as an IP address field.
    • BIncorrect. A metric filter with no dimensions creates one aggregate count. It shows total request volume but can't show which client IPs are sending the requests.
    • CIncorrect. Anomaly detection learns the expected range of a metric and flags unusual values. It works on the aggregate metric, so it can't rank individual clients.
    • DIncorrect. A canary generates its own synthetic traffic to test availability and latency. It doesn't analyze real client traffic or find the top requesting IPs.
  3. Question 3 · Monitoring, Logging, and Remediation

    A SysOps administrator wants a CloudWatch alarm when an Auto Scaling group cannot keep enough running instances to meet its desired capacity, for example because of repeated launch failures or a capacity shortfall. Instances that are still pending or terminating should not count as meeting capacity. What should the administrator do?

    • AEnable group metrics collection, then alarm when GroupInServiceInstances stays below GroupDesiredCapacity
    • BEnable group metrics collection, then alarm when GroupTotalInstances stays below GroupDesiredCapacity
    • CAlarm on GroupInServiceInstances and GroupDesiredCapacity directly, because Auto Scaling publishes them by default
    • DEnable group metrics collection, then alarm when GroupMaxSize stays below GroupMinSize for the group
    Show answer and explanation

    Answer: A) Enable group metrics collection, then alarm when GroupInServiceInstances stays below GroupDesiredCapacity

    After enabling Auto Scaling group metrics collection, compare GroupInServiceInstances, which leaves out pending and terminating instances, with GroupDesiredCapacity to detect a group that can't reach its desired size.

    • ACorrect. GroupDesiredCapacity is the number of instances the group tries to maintain. GroupInServiceInstances counts running instances and leaves out pending and terminating ones. Both metrics are reported only after group metrics collection is enabled.
    • BIncorrect. GroupTotalInstances includes instances that are pending and terminating as well as in service. It can therefore match desired capacity while instances are not actually in service.
    • CIncorrect. Auto Scaling group metrics are free at one-minute granularity, but they are reported only if metrics collection is enabled for the group. Without that, there is no data for the alarm to evaluate.
    • DIncorrect. GroupMinSize and GroupMaxSize are configured size limits, not counts of running instances. Comparing them shows nothing about whether the group has reached its desired capacity.
  4. Question 4 · Reliability and Business Continuity

    A SysOps administrator is creating an internal Application Load Balancer in a VPC that uses Availability Zone subnets. The application's targets currently run in only one Availability Zone. The console requires the administrator to select subnets in at least two Availability Zones. Why?

    • AAn ALB must have subnets in at least two Availability Zones so that load balancer nodes run in multiple zones
    • BOnly internet-facing ALBs require two Availability Zones, so the administrator selected the wrong scheme
    • CCross-zone load balancing is turned on for the ALB, and turning it off at the load balancer would allow one zone
    • DThe two-zone selection is only advisory, and the administrator can continue with a single Availability Zone subnet
    Show answer and explanation

    Answer: A) An ALB must have subnets in at least two Availability Zones so that load balancer nodes run in multiple zones

    An Application Load Balancer that uses Availability Zone subnets must have subnets in at least two different AZs. Elastic Load Balancing places a node in each enabled zone, so the load balancer is not tied to one AZ.

    • ACorrect. The ALB documentation says you must select at least two Availability Zone subnets, each in a different AZ. Elastic Load Balancing creates a load balancer node in each enabled zone, so the load balancer doesn't depend on a single AZ.
    • BIncorrect. The two-AZ minimum for Availability Zone subnets applies to every ALB, both internal and internet-facing.
    • CIncorrect. On an ALB, cross-zone load balancing is always on at the load balancer level and can't be changed there. It also has nothing to do with the minimum number of subnets.
    • DIncorrect. The requirement is enforced, not advisory. An ALB using Availability Zone subnets can't be created with only one.
  5. Question 5 · Reliability and Business Continuity

    An EC2 Auto Scaling group spans three Availability Zones and is moving to a new EC2 instance type. During each scale-in event, the operations team wants the group to remove the oldest instances first so the old-type instances are phased out gradually. What should a SysOps administrator configure?

    • ASet the Auto Scaling group's termination policy to OldestInstance
    • BAdd a lifecycle hook for the instance-terminating transition
    • CIncrease the health check grace period for the Auto Scaling group
    • DKeep the default termination policy, which removes the oldest instance
    Show answer and explanation

    Answer: A) Set the Auto Scaling group's termination policy to OldestInstance

    Termination policies decide which instances are removed during scale-in. OldestInstance removes the oldest instances first, after Availability Zone balancing. The default policy targets outdated configurations, not instance age.

    • ACorrect. The OldestInstance termination policy removes the oldest instance in the group first, which is recommended when moving a group to a new instance type. Auto Scaling still balances across Availability Zones before it applies the policy.
    • BIncorrect. A termination lifecycle hook pauses an instance that has already been chosen for termination so custom actions can run. It does not decide which instance is chosen.
    • CIncorrect. The grace period delays health checks on newly launched instances. It has no effect on which healthy instance is removed during scale-in.
    • DIncorrect. After balancing AZs, the default policy removes instances with outdated configurations first (a launch configuration, a different launch template, or the oldest launch template version), then those closest to the next billing hour. It does not select by instance age.
  6. Question 6 · Deployment, Provisioning, and Automation

    A CodeBuild project's buildspec defines DB_PASSWORD under env/variables. A security review finds that the password can be seen in plain text in the CodeBuild console and through the AWS CLI. The same password is already stored as a secret in AWS Secrets Manager. Which change fixes the finding?

    • ARemove DB_PASSWORD from env/variables and define it under env/secrets-manager, referencing the existing secret
    • BMove DB_PASSWORD from the buildspec to a plaintext environment variable in the build project's settings
    • CKeep DB_PASSWORD in env/variables and enable AWS KMS encryption for the project's build output artifacts
    • DKeep DB_PASSWORD in env/variables and list it under env/exported-variables so that CodeBuild masks its value
    Show answer and explanation

    Answer: A) Remove DB_PASSWORD from env/variables and define it under env/secrets-manager, referencing the existing secret

    For sensitive values, use the buildspec's env/secrets-manager (or env/parameter-store) mapping. Values defined under env/variables can be displayed in plain text in the console and CLI.

    • ACorrect. The env/secrets-manager mapping retrieves the value from Secrets Manager at build time and exposes it as an environment variable. CodeBuild also hides values from Secrets Manager in the build logs. AWS recommends the secrets-manager or parameter-store mapping for sensitive values.
    • BIncorrect. A plaintext variable defined in the project settings is still stored and shown as plain text in the console and API. Moving it only changes which definition takes precedence.
    • CIncorrect. Artifact encryption protects the build output in Amazon S3. It doesn't hide a plaintext environment variable defined in the buildspec.
    • DIncorrect. exported-variables passes variable values to later CodePipeline stages. It doesn't mask anything, and exporting a password would expose it more widely.
  7. Question 7 · Deployment, Provisioning, and Automation

    A company has written a custom AWS Systems Manager Command document. A partner company's AWS account runs workloads in the same AWS Region and needs to run this document on its own managed instances. No other AWS account may see the document. The partner should not have to maintain its own copy. What should a SysOps administrator do?

    • AEdit the document's permissions to Private and add the partner's AWS account ID, either in the console or with the ModifyDocumentPermission API
    • BEdit the document's permissions to Public so that the partner account can find it and run it by its ARN
    • CAttach an IAM policy to the company's own administrators that allows ssm:GetDocument and ssm:SendCommand for the partner's account ID
    • DShare the document from a different Region where the company has fewer documents, and have the partner reference it across Regions
    Show answer and explanation

    Answer: A) Edit the document's permissions to Private and add the partner's AWS account ID, either in the console or with the ModifyDocumentPermission API

    A document owner can share an SSM document privately with specific AWS account IDs in the same Region, either through document permissions (ModifyDocumentPermission) or through AWS RAM. Public sharing would expose the document to everyone.

    • ACorrect. The document owner can share an SSM document privately by changing its permissions to grant access to specific AWS account IDs. The partner can then run it by using its full ARN. AWS RAM resource shares are another supported way to share privately with individual accounts.
    • BIncorrect. Public sharing makes the document visible to everyone, which breaks the requirement that no other account may see it. AWS recommends turning on block public sharing unless you need it.
    • CIncorrect. An identity-based policy in the company's account only grants permissions to principals in that account. It doesn't share the document with another account. The document owner has to change the document's permissions or use AWS RAM.
    • DIncorrect. SSM documents can be shared only with accounts in the same Region. Cross-Region sharing isn't supported.
  8. Question 8 · Deployment, Provisioning, and Automation

    A company uses AWS Step Functions to process millions of IoT sensor events per day. Each execution finishes in under 10 seconds, and every step in the workflow is idempotent. A SysOps administrator must create the state machine so this workload runs at the lowest cost. What should the administrator do?

    • ACreate the state machine with the Express workflow type
    • BCreate the state machine with the Standard workflow type so that each event is processed exactly once
    • CCreate a Standard workflow and request that its execution history retention be reduced to 30 days
    • DCreate a Standard workflow now and change its type to Express later if the event volume grows
    Show answer and explanation

    Answer: A) Create the state machine with the Express workflow type

    Express Workflows suit short (up to five minutes), high-volume, idempotent event processing and are billed by executions, duration, and memory. Standard Workflows are billed per state transition, and the type can't be changed after creation.

    • ACorrect. Express Workflows are designed for high-volume event processing such as IoT data ingestion and can run for up to five minutes. They are billed by number of executions, duration, and memory used, not per state transition. Their at-least-once execution model is fine because the steps are idempotent.
    • BIncorrect. Standard Workflows do run exactly once, but they are billed for every state transition, which is expensive at millions of executions per day. Exactly-once execution matters for non-idempotent actions, and this workflow's steps are idempotent.
    • CIncorrect. AWS offers the shorter 30-day retention to meet compliance, organizational, or regulatory requirements. It doesn't change how Standard Workflows are billed, which is per state transition.
    • DIncorrect. A state machine's workflow type can't be changed after it is created. Moving to Express would mean creating a new state machine.
  9. Question 9 · Security and Compliance

    A compliance team must stop checking by hand whether every IAM user in an AWS account has MFA enabled. They want an automated, recurring evaluation that marks each IAM user without MFA as noncompliant and keeps a compliance history, with no manual steps after setup. What should a SysOps administrator implement?

    • AAn AWS Config managed rule that evaluates IAM users for MFA
    • BThe IAM credential report, downloaded and reviewed for the mfa_active column
    • CAn IAM Access Analyzer analyzer with the account as its zone of trust
    • DAn AWS CloudTrail trail that logs IAM management events to Amazon S3
    Show answer and explanation

    Answer: A) An AWS Config managed rule that evaluates IAM users for MFA

    AWS Config managed rules such as iam-user-mfa-enabled automatically evaluate IAM users on a schedule and mark users without MFA as NON_COMPLIANT. The credential report shows MFA status but has to be generated and reviewed by hand.

    • ACorrect. The iam-user-mfa-enabled managed rule is a periodic AWS Config rule that evaluates AWS::IAM::User resources. It reports NON_COMPLIANT when MFA is not enabled for an IAM user. Config runs the evaluations automatically and records compliance results over time.
    • BIncorrect. The credential report does include an mfa_active column for each user. However, someone has to generate and download the CSV (at most once every four hours) and review it. It does not automatically flag users as noncompliant, so this is still a manual check.
    • CIncorrect. An Access Analyzer external access analyzer finds resources that are shared with principals outside the zone of trust. It does not evaluate whether IAM users have MFA devices enabled.
    • DIncorrect. A trail records API activity, such as MFA device creation or deactivation. It does not evaluate the current MFA status of every user or report compliance results.
  10. Question 10 · Security and Compliance

    An IAM role used by a batch application was given broad permissions during development. The application has now run in production for several months with AWS CloudTrail logging turned on. A SysOps administrator must replace the role's permissions with a policy that allows only the actions the application actually uses. Which approach requires the LEAST manual effort?

    • AUse IAM Access Analyzer to generate a policy from the role's CloudTrail access activity, then test and attach it
    • BAttach a service control policy to the account that lists only the actions the application needs, and remove the role's policy
    • CReplace the role's policy with the AWS managed job-function policy that most closely matches the application's tasks
    • DSet a permissions boundary on the role that matches its current policy, so the application cannot gain more access later
    Show answer and explanation

    Answer: A) Use IAM Access Analyzer to generate a policy from the role's CloudTrail access activity, then test and attach it

    IAM Access Analyzer can generate a least-privilege policy from a role's CloudTrail activity. SCPs and permissions boundaries only limit permissions and grant none, and AWS managed policies may grant more than a workload needs.

    • ACorrect. IAM Access Analyzer can look at the services and actions a role used, as recorded in CloudTrail, and generate a fine-grained policy from them. AWS recommends this to grant only the permissions needed for a task.
    • BIncorrect. SCPs set maximum-permission guardrails but do not grant permissions themselves. If the role's identity-based policy is removed, the role has no permissions at all.
    • CIncorrect. AWS managed policies are written for all customers and might not be least privilege for a specific workload. AWS recommends moving from them to customer managed policies scoped to the use case.
    • DIncorrect. A permissions boundary only caps the maximum permissions and grants nothing. A boundary that matches the current broad policy leaves the excess permissions in place.
  11. Question 11 · Networking and Content Delivery

    An application runs behind a Network Load Balancer. The backend EC2 instances currently decrypt all client HTTPS traffic, which uses a lot of CPU. A SysOps administrator wants the load balancer to handle encryption and decryption so the instances only process application logic. Which configuration meets this requirement?

    • AA TLS listener on port 443 with a server certificate from AWS Certificate Manager deployed on the listener
    • BA TCP listener on port 443 with the server certificates kept installed on each backend instance
    • CA TCP listener on port 443 with proxy protocol version 2 enabled on the target group attributes
    • DA TCP_UDP listener on port 443 that forwards to a target group that also uses the TCP_UDP protocol
    Show answer and explanation

    Answer: A) A TLS listener on port 443 with a server certificate from AWS Certificate Manager deployed on the listener

    To move TLS processing from the targets to a Network Load Balancer, configure a TLS listener and deploy a server certificate on it. A TCP listener on port 443 passes encrypted traffic through to the targets unchanged.

    • ACorrect. A TLS listener offloads encryption and decryption to the Network Load Balancer, and you must deploy at least one server certificate on it. The load balancer uses the certificate to terminate the client connection and decrypt requests before sending them to the targets.
    • BIncorrect. With a TCP listener, the Network Load Balancer passes encrypted traffic through to the targets without decrypting it. The instances would still do all the TLS work.
    • CIncorrect. Proxy protocol v2 adds client connection details, such as the source IP address, to the traffic sent to targets. It doesn't decrypt anything, so the instances would still handle TLS.
    • DIncorrect. A TCP_UDP listener lets the load balancer accept both TCP and UDP on the same port. It doesn't use a server certificate or decrypt traffic, so TLS would still be handled by the instances.
  12. Question 12 · Networking and Content Delivery

    An Auto Scaling group sits behind an Application Load Balancer. During scale-in events, some clients get HTTP 5xx errors because long-running requests are cut off when instances are removed. The target group's settings were customized at launch. Which target group change best addresses this?

    • ARaise the deregistration_delay.timeout_seconds attribute so draining targets can finish in-flight requests
    • BEnable slow start mode with a longer duration so targets receive traffic gradually
    • CTurn on duration-based sticky sessions so clients stay bound to the same target
    • DRaise the health check unhealthy threshold count so targets stay in service longer
    Show answer and explanation

    Answer: A) Raise the deregistration_delay.timeout_seconds attribute so draining targets can finish in-flight requests

    The deregistration delay controls how long an ALB keeps a deregistering target in the draining state so in-flight requests can complete. Raising it stops requests from being cut off during scale-in.

    • ACorrect. A deregistering target enters the draining state. The load balancer stops sending it new requests and waits for the deregistration delay before completing deregistration, which lets in-flight requests finish before the Auto Scaling group terminates the instance.
    • BIncorrect. Slow start only ramps up traffic to newly registered healthy targets so they can warm up. It has no effect on requests in flight on targets that are being deregistered.
    • CIncorrect. Stickiness controls which target receives a client's later requests. When a target is draining, new requests are routed to a healthy target anyway, and stickiness does not give in-flight requests more time to finish.
    • DIncorrect. The unhealthy threshold only changes how many failed health checks it takes to mark a target unhealthy. Scale-in deregistration is not triggered by health checks, so this does not protect in-flight requests.
  13. Question 13 · Networking and Content Delivery

    A stateful application runs behind an AWS Global Accelerator standard accelerator, with endpoints in two AWS Regions. Users report lost session state. Logs show that one client's connections, each from a different source port, are landing on different endpoints. Different clients should still be spread across endpoints. What should the SysOps administrator change?

    • ASet the listener's client affinity to Source IP so endpoint selection hashes on source IP and destination IP
    • BKeep client affinity at None and rely on its consistent-flow hashing to keep each client on one endpoint
    • CLower the traffic dial on one endpoint group so most traffic from each client goes to a single Region
    • DEnable client IP address preservation on the endpoints so each client is recognized and routed back to its endpoint
    Show answer and explanation

    Answer: A) Set the listener's client affinity to Source IP so endpoint selection hashes on source IP and destination IP

    Global Accelerator's default client affinity (None) hashes on the 5-tuple, which includes the source port, so one client can reach different endpoints. Setting client affinity to Source IP hashes on source IP and destination IP, which keeps each client on one endpoint.

    • ACorrect. With client affinity set to Source IP, Global Accelerator hashes on the 2-tuple of source IP and destination IP. All connections from one client IP go to the same endpoint, and different clients can still be spread across endpoints.
    • BIncorrect. With None, Global Accelerator hashes on the 5-tuple, which includes the source port. A client that connects from different ports can therefore be sent to different endpoints. That is exactly the behavior causing the problem.
    • CIncorrect. The traffic dial sets what share of traffic goes to an endpoint group across all clients. It does not tie any one client to an endpoint, so connections from the same client can still be split.
    • DIncorrect. Client IP address preservation lets the endpoint see the client's original IP address. It does not change how Global Accelerator chooses an endpoint, so it does not create affinity.
  14. Question 14 · Cost and Performance Optimization

    A team runs several tagged development and test EC2 instances that are only needed during business hours, but the instances currently run 24/7. The team wants these instances to stop automatically every evening and start again every weekday morning, across several Regions, using tags to select the instances. Which AWS solution best meets this requirement?

    • ADeploy Instance Scheduler on AWS and assign the instances a business-hours schedule through a tag
    • BTurn on AWS Compute Optimizer and apply its rightsizing recommendations to the instances
    • CConfigure an AWS Budgets action that targets the instances when a cost threshold is reached
    • DPurchase a Compute Savings Plan sized to the instances' current hourly usage
    Show answer and explanation

    Answer: A) Deploy Instance Scheduler on AWS and assign the instances a business-hours schedule through a tag

    Instance Scheduler on AWS stops and starts tagged EC2 and RDS instances on a defined schedule across Regions and accounts, which cuts the cost of non-production instances outside business hours. Compute Optimizer, Budgets actions and Savings Plans don't provide time-based start/stop scheduling.

    • ACorrect. Instance Scheduler on AWS uses resource tags and Lambda to stop and start EC2 and RDS instances on a schedule you define, across multiple Regions and accounts. AWS gives stopping instances outside business hours as its example use case.
    • BIncorrect. Compute Optimizer recommends better-sized instance types based on utilization. It doesn't stop or start instances on a time schedule.
    • CIncorrect. Budget actions run when a budget passes a cost or usage threshold, not at set times of day, so they can't give a recurring business-hours schedule.
    • DIncorrect. A Savings Plan lowers the rate in exchange for a usage commitment. It doesn't stop idle instances, and committing to round-the-clock usage locks in spending the team wants to remove.
  15. Question 15 · Cost and Performance Optimization

    A team stores large log archives in an S3 bucket using S3 Standard. Objects are read often during their first 30 days and rarely after that, and this pattern is the same for every object. The team wants storage costs for the older objects to go down automatically, without running scripts or moving data by hand. What should a SysOps administrator configure?

    • AAn S3 Lifecycle configuration with a transition rule that moves objects to S3 Standard-IA 30 days after creation
    • BAn S3 Storage Lens dashboard with advanced metrics and its cost optimization recommendations turned on
    • CRequester Pays on the bucket so that the accounts reading the older objects are charged instead
    • DAn S3 Replication rule that copies new objects to a second bucket using the S3 Standard-IA storage class
    Show answer and explanation

    Answer: A) An S3 Lifecycle configuration with a transition rule that moves objects to S3 Standard-IA 30 days after creation

    S3 Lifecycle transition rules automatically move objects to a cheaper storage class, such as Standard-IA, once they reach a set age. Storage Lens only reports, Requester Pays doesn't change who pays for storage, and Replication adds copies.

    • ACorrect. S3 Lifecycle transition actions move objects to another storage class on a schedule based on object age. Standard to Standard-IA is a supported transition, and Standard-IA is meant for data that is accessed infrequently. S3 does the work automatically, so the older objects cost less to store.
    • BIncorrect. Storage Lens is an analytics feature. It shows metrics and recommendations, such as buckets that have no lifecycle rules, but it doesn't move objects between storage classes, so storage costs stay the same.
    • CIncorrect. With Requester Pays, the requester pays for requests and data downloads, but the bucket owner always pays to store the data. Storage cost for the older objects doesn't change.
    • DIncorrect. Replication makes extra copies and leaves the originals in S3 Standard, so total storage cost goes up instead of down. It also doesn't wait for objects to reach a certain age.

Ready for a full SOA-C02 practice exam?

These are a sample from the CertRidge question bank. Full practice exams match the real exam's length, time limit and domain weights, with every answer explained.

Original questions written from the official exam guide. Not affiliated with AWS; never copied from the real exam.