docs: add Terraform certification notes and tasks

This commit is contained in:
2026-08-04 23:18:47 +02:00
parent 91a1849009
commit 758182a700
53 changed files with 4588 additions and 0 deletions

111
terraform/task-18.md Normal file
View File

@@ -0,0 +1,111 @@
# Assignment
The Nautilus DevOps team needs to create an AWS Kinesis data stream for real-time data processing. This stream will be used to ingest and process large volumes of streaming data, which will then be consumed by various applications for analytics and real-time decision-making.
The stream should be named xfusion-stream.
Use Terraform to create this Kinesis stream.
The Terraform working directory is /home/bob/terraform. Create the main.tf file (do not create a different .tf file) to accomplish this task.
Note:
Right-click under the EXPLORER section in VS Code and select Open in Integrated Terminal to launch the terminal.
Before submitting the task, ensure that terraform plan returns No changes. Your infrastructure matches the configuration.
# Solution
# Kinesis Data Stream — `xfusion-stream`
Terraform solution to create a provisioned Kinesis data stream with a single shard,
configured so `terraform plan` reports no drift after apply.
## `main.tf`
```hcl
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 6.0"
}
}
}
provider "aws" {
region = "us-east-1"
}
resource "aws_kinesis_stream" "xfusion_stream" {
name = "xfusion-stream"
shard_count = 1
retention_period = 24
stream_mode_details {
stream_mode = "PROVISIONED"
}
}
```
## How to run
```bash
cd /home/bob/terraform
terraform init
terraform apply -auto-approve
# Idempotency check required by the task:
terraform plan
# -> "No changes. Your infrastructure matches the configuration."
```
## How it works
### `aws_kinesis_stream`
- **`name = "xfusion-stream"`** — the stream name, exactly as required.
- **`stream_mode_details { stream_mode = "PROVISIONED" }`** — Kinesis has two
capacity modes: `PROVISIONED` (you manage shards) and `ON_DEMAND` (AWS
auto-scales). This is set to `PROVISIONED` explicitly. The two modes are mutually
exclusive with `shard_count`: `PROVISIONED` **requires** `shard_count`, while
`ON_DEMAND` **forbids** it. Getting this pairing wrong is the usual cause of a
perpetual non-empty plan or an apply error.
- **`shard_count = 1`** — one shard. A shard is the base throughput unit (1 MB/s or
1000 records/s in, 2 MB/s out). One shard is plenty for a lab and is the
provisioned-capacity choice that pairs with `PROVISIONED` mode.
- **`retention_period = 24`** — hours that records stay in the stream before aging
out. `24` is the AWS default and the minimum; setting it explicitly to the default
value keeps the resource stable and readable.
### Why the plan comes back clean
The task explicitly requires `terraform plan` to report **no changes** after apply.
Two things guarantee that here:
1. **Mode and shard count are consistent.** `PROVISIONED` + an explicit
`shard_count` is the stable, non-conflicting combination. Mixing `ON_DEMAND` with
a `shard_count`, or omitting the mode and letting it get inferred, is what
typically produces a drift diff on the next plan.
2. **Every value set matches what AWS stores.** `retention_period = 24` equals the
service default, and no other arguments (encryption, shard-level metrics) are
toggled, so there's nothing for the provider to reconcile on refresh.
### Sandbox note
Constrained lab environments cap Kinesis at **PROVISIONED mode, 1 shard per stream,
≤24h retention, and ≤2 streams per account**. This config sits inside every one of
those limits, so it won't be silently reset or rejected.
## Verify
```bash
aws kinesis describe-stream-summary --stream-name xfusion-stream \
--query 'StreamDescriptionSummary.{Name:StreamName,Status:StreamStatus,Mode:StreamModeDetails.StreamMode,Shards:OpenShardCount,Retention:RetentionPeriodHours}'
```
Expected — name `xfusion-stream`, `StreamStatus: ACTIVE` (a few seconds after
create), `StreamMode: PROVISIONED`, `OpenShardCount: 1`, retention `24`.