Lesson 067 · AWS Learning Path

AWS 067: User data and cloud-init

· Published · 7 min read

A base EC2 image receives user data, passes it through cloud-init, installs the application, and signals readiness

The problem

A team uses User data and cloud-init as a label or Console setting without proving the identity, scope, behavior, failure boundary, cost, or operational result. The configuration appears complete but the real requirement remains untested.

Final outcome

The learner will inspect, explain, test, and document User data and cloud-init. The submission must connect the Console and CLI view to the same AWS control, state what the evidence proves, diagnose one likely failure, and make a requirement-based architecture decision.

Learning outcomes

You will be able to:

  1. explain user data supplies launch-time input;
  2. explain default execution is normally first boot;
  3. explain scripts normally run with high privilege;
  4. explain user data is not a secret store;
  5. explain raw user data has a 16 kb limit;
  1. distinguish successful configuration from successful workload behavior;
  2. preserve redacted evidence and complete the stated cleanup or retention decision.

Mental model

requirement
   -> identity and permission
   -> account, Region, and resource scope
   -> configuration or request
   -> observable state
   -> workload result
   -> failure evidence
   -> cleanup or controlled retention

Never begin with a create button or a copied command. Start with the result that must be proven and the boundary that must remain protected.

Core facts

ConceptWhat it means in practice
User data supplies launch-time inputEC2 makes user data available to the instance. Linux images commonly process shell scripts or cloud-init directives; Windows images use EC2Launch behavior.
Default execution is normally first bootCommon Linux cloud-init configuration runs user-data scripts only during the initial boot. Repeated execution requires explicit cloud-init or operating-system configuration.
Scripts normally run with high privilegeLinux user-data scripts run as root in common AWS images. Errors can therefore damage the host, and downloaded code must be authenticated.
User data is not a secret storeIt is retrievable from instance metadata and visible through authorized APIs. Base64 is encoding, not encryption. Retrieve secrets at runtime from Secrets Manager or Parameter Store using a role.
Raw user data has a 16 KB limitThe value before base64 encoding is limited to 16 KB. Larger bootstrap assets should be downloaded from a controlled, integrity-checked location.
Bootstrap must expose completion and failureWrite logs, use strict error handling, make steps idempotent, signal CloudFormation or lifecycle hooks, and delay traffic until application health passes.

How to reason about it

Keep user data short: install or start a configuration agent, retrieve a versioned artifact, apply configuration, fetch secrets with the instance role, and report success. Put complex logic in version control and test it against the exact AMI.

Use the following decision table as a starting point, then change the answer when the scenario changes.

RequirementPreferred directionWhy
Small one-time boot configurationcloud-init user dataThe launch input is enough when it is short, tested, and idempotent.
Complex repeatable server buildGolden AMI plus configuration managementMove long installation work out of every scale-out event.
Bootstrap needs a database passwordRetrieve from a secret service using the instance roleDo not place plaintext credentials in user data.
Auto Scaling must not serve partial bootstrapLifecycle hook or health gate with success signalTraffic starts only after configuration is complete.

Prerequisites, permissions, Region, and cost

Run this lesson as the approved non-root course identity. Begin with aws sts get-caller-identity, confirm the private account record, and set the fixed project Region before any regional query. IAM resources are global within an account, while STS endpoints and the services reached by an identity can be regional.

Use only the read or change actions required for this lesson. An AccessDenied result is evidence to analyse, not permission to switch to root or attach AdministratorAccess. Record the action, resource, principal type, request context, and smallest justified correction.

The listed cost tier is T0 - no resource creation. Free Tier eligibility and credits are account-specific. Before a mutating lab, identify every resource that can charge, estimate its duration, start a timer, and write the reverse cleanup order. A budget reports cost after billing data arrives and is not a real-time stop control.

AWS Management Console method

  1. Open an EC2 launch template or the Launch instances Advanced details panel.
  2. Review the User data field and enter only a short tested cloud-init or shell example with no secret values.
  3. After launching a disposable test instance, use Session Manager to inspect cloud-init status and output logs, then terminate the test resources.

For every step record the service page, selected account and Region, exact object, visible state, and why that state matters. A Console label or green status is not enough unless it is tied to the final workload outcome.

AWS CLI or API evidence

Read cloud-init status and logs on a Linux instance instead of assuming user data succeeded.

sudo cloud-init status --long
sudo tail -n 100 /var/log/cloud-init-output.log

A running EC2 instance can have failed bootstrap. Look for command exit codes, package-repository access, DNS, IAM, artifact integrity, and a final readiness signal.

Before running the command, replace every placeholder, explain each option, and decide whether the operation is read-only or mutating. Capture the exit code immediately. Redact account IDs, ARNs, public addresses, request identifiers, and personal data before sharing.

The CLI and Console are clients of AWS APIs. Matching state across them increases confidence, but neither substitutes for data-plane or application verification.

Practical work

Create nw-p04-user-data.sh for AWS 072. It must start with a Bash shebang, enable strict error handling appropriate to the script, write logs, update only required packages, install and start Apache, create a deterministic local health page, avoid secrets, and be safe to rerun. Check it with bash -n, inspect its byte size against the EC2 raw user-data limit, and store it in the private evidence folder. Do not execute it locally as root.

The evidence package must include:

  • non-root principal type, account verified privately, and Region;
  • exact intended and observed state;
  • one Console observation and the matching CLI or API result;
  • one successful result and one denied, failed, or counterexample result;
  • what each result does not prove;
  • cost state and elapsed lab time;
  • cleanup evidence or a named retained-state owner and next lesson.

Verification standard

Use three levels of proof:

  1. Control plane: the object or policy exists with the intended configuration.
  2. Data plane or behavior: the request, packet, session, storage path, or application does what the requirement states.
  3. Operations: monitoring, failure diagnosis, cost, ownership, and cleanup are known.

A control-plane response can precede final readiness. Use waiters or state polling where supported, then test the actual behavior. If a request times out, do not assume it failed. Inspect state and use documented idempotency before retrying a mutation.

Troubleshooting method

SymptomEvidence firstSmallest safe response
command cannot authenticatecredential source, expiry, caller preflightrestore approved temporary login
access is deniedaction, resource, principal, all policy layerscorrect only the missing or conflicting control
object appears missingaccount, Region, filters, pagination, permissionalign scope before creating anything
configured state exists but behavior failsroute, identity, dependency, logs, service statetest the next boundary in the path
cleanup is blockeddependency inventory and owning serviceremove dependants in reviewed reverse order

Keep the original symptom and timestamp. State one hypothesis, make one reversible change, repeat the original test, and record rollback. Never open a management port to the world, expose credentials, disable TLS verification, format an unknown disk, or add broad permissions as a generic fix.

Architecture and certification decisions

Professional-level questions provide competing valid features. Identify the requirement that decides between them: human or workload identity, same-account or cross-account access, regional or zonal scope, stateful or stateless filtering, durable or ephemeral data, latency, RTO/RPO, cost, or operational ownership.

Explain why the selected option fits and why each plausible alternative fails one stated requirement. Do not rely on feature memorization or reproduce protected certification questions.

Knowledge check

  1. Is base64-encoded user data encrypted?

Expected direction: No. Base64 only encodes bytes for transport.

  1. Does Linux user data automatically run on every reboot?

Expected direction: Normally no. Common cloud-init configuration runs it once unless explicitly changed.

  1. What is the raw user-data size limit?

Expected direction: 16 KB before base64 encoding.

  1. Why make bootstrap idempotent?

Expected direction: Retries or image changes should not corrupt configuration or create duplicate state.

Cost, cleanup, and retained state

Retain only the state explicitly required by the next P04 lesson and record it in the private resource ledger.

Cleanup evidence includes the final state query, not only a successful delete response. Search related resources, other Regions used by the lab, retained storage, public IPv4 addresses, logging destinations, and service-managed dependencies. Schedule a later billing review because cost data can lag.

Completion gate

Pass when the practical artifact explains the real problem, matches Console and CLI evidence, answers every knowledge check, diagnoses one failure without broadening access, records cost, and proves cleanup or approved retention. The learner must defend one decision orally and name the requirement that would change it.

Official sources

Advertisement