CertNote/ Commute Study Notes
Roadmap
KOEN
CLF-C02 · FoundationalCloud Practitioner - Foundational
DVA-C02 · AssociateDeveloper - Associate
SAA-C03 · AssociateSolutions Architect - Associate
SOA-C02 · AssociateCloudOps Engineer - Associate
SAP-C02 · ProfessionalSolutions Architect - Professional
DOP-C02 · ProfessionalDevOps Engineer - Professional
  • Week 1
    • 1.DevOps as an Operating Model: The Five Axes of CALMS and the Truth DORA Proved Through Measurement
    • 2.Well-Architected Framework: Rereading It Through the Six Lenses of DevOps
    • 3.The AWS DevOps Tool Map: The Code* Series and the Real Picture Beyond It
    • 4.Multi-Account Strategy: The Real Picture of Organizations, Control Tower, and IAM Identity Center
    • 5.Week 1 Wrap-Up: Cementing the DevOps Thinking Frame with Scenarios
  • Week 2
  • Week 3
  • Week 4
  • Week 5
  • Week 6
  • Week 7
  • Week 8
  • Week 9
  • Week 10
  • Week 11
  • Week 12
    • 1.EventBridge: Event Bus Routing Model and the Nervous System of Asynchronous Automation
    • 2.SSM Automation: Operational Procedures as Code, and People Inside the Workflow
    • 3.Auto-Healing: The Control Theory of Automatic Recovery and the Safety Engineering That Stops Runaway Automation
    • 4.ChatOps and Incident Manager: The Boundary Where Automation Ends and the Human Organization Begins
    • 5.Week 12 Integrated Review: Wiring the Whole Nervous System of Incident Automation Together
  • Week 13
  • Week 14
  • Week 15
  • Week 16
Linux Master 2 · 2급KAIT Linux Master - Level 2
SCS-C03 · SpecialtySecurity - Specialty
Linux Master 1 · 1급KAIT Linux Master - Level 1
MLA-C01 · AssociateMachine Learning Engineer - Associate
AIF-C01 · FoundationalAI Practitioner - Foundational
DEA-C01 · AssociateData Engineer - Associate
MLS-C01 · SpecialtyMachine Learning - Specialty
SQLD · 개발자SQL Developer (SQLD)

© CertNote · 주간랩스

  • About
  • Changelog
  • Contact
  • Terms
  • Privacy
← DOP-C02/Week 12/Day 4

Based on the DOP-C02 exam guide·Report an error

DOP-C02· ProWeek 12 · Day 4~48 min read

Day 4 - ChatOps and Incident Manager: The Boundary Where Automation Ends and the Human Organization Begins

No matter how sophisticated automated recovery is, it cannot handle every incident. Some failures require judgment that code cannot make ("do we roll back this payment mismatch or correct it manually?"), some can only be solved when multiple teams come together at once, and some require reporting to customers, legal, and executives. At this point automation ends and the coordination of the human organization begins. And here the most expensive resource is not compute but human attention and coordination bandwidth. The time an engineer paged at 3 a.m. spends figuring out what is happening, deciding who else to call in, and reconstructing context by hopping across scattered tools (console, logs, tickets, phone calls) - this dominates the MTTR in the area automated recovery cannot reach.

Today we do not treat ChatOps and Incident Manager as "how to hook up Slack notifications"; we dig into the organizational sociology and incident command theory underneath. We look at what operating philosophy ChatOps came from (GitHub's Hubot, 2013), why "making the chat channel the single source of truth" reduces coordination cost, which emergency response standard (ICS) AWS Incident Manager's Response Plan, Escalation, and Timeline borrow from, and why blameless postmortems are the core of a safety culture. On the DOP exam, this area is central to the Operational Excellence domain and is tested repeatedly as "How do you notify Slack of a pipeline failure in the standard way?", "How do you automatically page and escalate on-call for a critical incident?", and "How do you block dangerous commands in ChatOps?"

Where ChatOps Came From - A Single Source of Truth for Operations

The idea of "operating through chat" was popularized around 2013 when GitHub performed deployment, monitoring, and incident response entirely in chat channels with Hubot (a chatbot framework). Until then, operational knowledge was fragmented across individuals' heads, scattered wikis, and someone's terminal history. The insight of ChatOps is simple yet powerful - if you gather commands, notifications, discussion, and documentation in one channel, that channel itself becomes the single source of truth for the incident.

The mechanism by which this reduces coordination cost resembles that of distributed systems. When multiple people act in different tools, the shared mental model of "what is the current state" splits apart - A looks at the console, B looks at the logs, C heard it over the phone. The most dangerous moment in incident response is when two engineers manipulate the same resource at the same time without knowing about each other (the 2017 S3 incident was ultimately also a problem of shared awareness about who was doing what). ChatOps serializes all actions onto a single timeline, so who did what and when is automatically recorded and visible to everyone. In effect this is a structure in which an audit log comes free as a byproduct of collaboration.

💡 Related theory: ChatOps shares its philosophy with consensus via a shared log in distributed systems. Just as consensus algorithms like Raft and Paxos make every node see the same log in the same order to achieve state consistency, ChatOps makes every responder see the same messages in the same order in the same channel, creating a shared mental model of "what is happening and who is doing what." Incident response research (the "Managing Incidents" chapter of the Google SRE Book) names the core of effective response as "clear roles (Incident Commander), a live status document, and a controlled communication channel," and a ChatOps channel implements all three in one place. The key is eliminating context-switching cost - when the cognitive load of hopping between tools and reassembling information disappears, the same person makes decisions faster in the same amount of time.

AWS Chatbot - The Translator Between SNS and Channels

AWS Chatbot is a managed bridge connecting SNS topics with Slack/Teams channels. The structure is simple.

SNS Topic → AWS Chatbot Channel Configuration → Slack/Teams channel
              │
              └─ IAM Role (permissions used when running @aws commands in Slack)

There are three components. (1) SNS topic subscription - Chatbot receives notifications thrown to SNS by CloudWatch Alarms, EventBridge, and CodeStar Notifications and renders them as cards in the channel. (2) Slack/Teams workspace OAuth authorization - the permission for Chatbot to post to that channel. (3) IAM Role - the role Chatbot assumes when running an @aws ... command in the channel; the permissions of this role set the upper bound of commands.

aws chatbot create-slack-channel-configuration \
  --configuration-name OpsChannel \
  --iam-role-arn arn:aws:iam::...:role/AWSChatbotChannelRole \
  --slack-channel-id C12345 \
  --slack-workspace-id T12345 \
  --sns-topic-arns arn:aws:sns:...:OncallTopic arn:aws:sns:...:PipelineNotify

Being able to run AWS commands directly from Slack is the double-edged sword of ChatOps.

@aws s3 ls
@aws ec2 describe-instances --filters Name=tag:Environment,Values=prod
@aws cloudwatch describe-alarms --state-value ALARM

Because commands are visible to every channel member, auditing is automatic and peer review happens on the spot, but at the same time there is a risk that someone accidentally types @aws ec2 terminate-instances.

⚠️ Trap: The actual permissions of a Chatbot command are determined by the intersection of two IAM layers - the IAM Role of the channel configuration and the additionally configured Guardrail Policy (channel guardrails). A guardrail works as an explicit Deny, so however broad the IAM Role is, it cannot do what the guardrail blocks. So the standard is "keep the Role broad for operational convenience and Deny only the dangerous actions with the Guardrail." A common mistake is trying to narrow only the Role and blocking even the read permissions operations need, or conversely trusting only the Role without a Guardrail and leaving dangerous commands open.

Guardrail Policy - Keeping Anyone from Deleting prod from Slack

A chat window is a space where typos and impulses become dangerous. A Guardrail Policy is an explicit Deny policy placed on a Chatbot channel that seals off dangerous commands regardless of the IAM Role's permissions.

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Deny",
    "Action": [
      "ec2:TerminateInstances", "ec2:Delete*",
      "rds:Delete*", "s3:DeleteBucket",
      "iam:*", "kms:ScheduleKeyDeletion"
    ],
    "Resource": "*"
  }]
}

The design principle is reads are free, writes go through the pipeline. Commands issued directly in Slack are limited to diagnostics (describe, list, get), and actual changes (deployments, deletions, configuration changes) go through CodePipeline with an approval gate or an SSM Automation Runbook. This is the ChatOps version of the Day 3 principle "put irreversible actions behind a gate," minimizing the blast radius of irreversible actions that humans perform directly.

The Guardrail Policy makes use of AWS IAM's explicit Deny wins (explicit deny always wins) evaluation model. IAM permission evaluation works as "if there is even one explicit Deny, deny unconditionally; if there is none, look for an explicit Allow; if there is none of that either, implicit deny." Thanks to this structure, a Guardrail's Deny takes precedence over any Allow above it - exactly the same mechanism as the guardrails that an Organizations SCP (Service Control Policy) places over an entire account. In both cases the key is that they "define a permission ceiling rather than grant permissions." That is, a Guardrail does not allow anything; it is a form of permissions boundary that defines what must never be allowed.

CodeStar Notifications - The Standard Path for Pipeline Notifications

The standard way to notify Slack of state changes in CodePipeline, CodeBuild, CodeDeploy, and CodeCommit is not to write a Lambda each time but CodeStar Notifications.

aws codestar-notifications create-notification-rule \
  --name PipelineToSlack \
  --resource arn:aws:codepipeline:...:MyApp \
  --event-type-ids \
    codepipeline-pipeline-pipeline-execution-failed \
    codepipeline-pipeline-pipeline-execution-succeeded \
  --targets TargetType=AWSChatbotSlack,TargetAddress=arn:aws:chatbot:...:chat-configuration/slack-channel/ops

CodeStar Notifications internally receives EventBridge events and flows through SNS to Chatbot. It has a higher level of abstraction than writing EventBridge Rules directly, so you only need to declare "which event types go to which channel." On the exam, the answer to "most simply/standardly notify Slack of a pipeline failure" is almost always CodeStar Notifications + Chatbot (Lambda or direct EventBridge is excessive glue code).

AWS Incident Manager - Emergency Response as Code

Beyond simple notification, a critical incident needs a system for whom to call, whom to hand off to if there is no response, what to run automatically, and how to record the whole process. AWS Systems Manager Incident Manager provides this as a managed service.

ComponentRoleAnalogy
Response PlanProcedure that proceeds automatically when an incident occurs (bundles impact, title, runbook, channel, contacts)Emergency response manual
ContactsPeople and their contact methods (Email/SMS/Voice)Emergency contact roster
EngagementActually pages a Contact (sends SMS/call/email)The act of paging
Escalation Plan"If no response within N minutes, page the next-tier group"Staged emergency call-up
TimelineAutomatically timestamps every event (engage, acknowledge, action)Incident log
Post-Incident Analysis (PIR)Auto-generates a draft post-incident analysis based on the TimelineIncident report
aws ssm-incidents create-response-plan \
  --name api-critical \
  --incident-template impact=1,title="API 5xx critical" \
  --chat-channel chatbotSns=[arn:aws:sns:...:OncallTopic] \
  --engagements arn:aws:ssm-contacts:...:contact/team-api \
  --actions ssmAutomation='{documentName=auto-remediate,roleArn=arn:...,parameters={...}}'

The flow is this. CloudWatch Alarm (Critical) → EventBridge → the Incident Manager Response Plan fires → the incident opens → the on-call team is paged (engaged) via SMS/Voice/Email → a Slack/Chime incident channel is created automatically → an SSM Automation Runbook is attached → automatic Timeline recording begins. If there is no response, the Escalation Plan pages the next group.

The structure of Incident Manager (chain of command, roles, staged escalation, timeline) is the ICS (Incident Command System), established in US wildfire response in the 1970s, transplanted into software operations. The principles of ICS are: (1) a single commander (Incident Commander) is responsible for coordination, (2) roles are predefined so there is no ambiguity about who does what, (3) when the span of control (the number of people one person directly manages, 3 to 7) is exceeded, layers are added, and (4) all activity is recorded. Both Google SRE's incident management and PagerDuty's Incident Response guide explicitly borrow from ICS. The Escalation Plan implements ICS's "an unresponsive resource is automatically succeeded by the next resource," and the Timeline implements ICS's activity log. In other words, Incident Manager codifies, through cloud APIs, an emergency response organization theory that has been validated for 50 years.

External SaaS Integration - PagerDuty, OpsGenie

Many organizations already use specialized SaaS such as PagerDuty and OpsGenie for on-call management. AWS integrates through two paths.

  • Inbound (AWS → SaaS): SNS → PagerDuty/OpsGenie Webhook, or EventBridge → API Destination (sends events to an external HTTPS endpoint, with managed authentication and rate limiting)
  • Outbound (SaaS → AWS): when an incident is acknowledged/resolved in PagerDuty, it notifies EventBridge via webhook for two-way synchronization
# Call the PagerDuty Events API with an EventBridge API Destination
aws events create-api-destination \
  --name pagerduty-events \
  --connection-arn arn:aws:events:...:connection/pd-conn \
  --invocation-endpoint https://events.pagerduty.com/v2/enqueue \
  --http-method POST

EventBridge API Destination is more than a simple webhook call - it stores authentication (API Key/OAuth/Basic) in a Connection object, manages secrets with Secrets Manager, applies a rate limit to calls so the external API is not overloaded, and, on failure, gets the same retry and DLQ safety net of EventBridge. If you call an external API directly from Lambda, you must manage all of this plumbing (credential renewal, rate limiting, retries, secret rotation) by hand. This is a consistent extension of EventBridge's philosophy of "absorbing glue code into managed services" seen on Day 1. On the exam, the answer to "safely send events from EventBridge to an external SaaS (PagerDuty/Datadog/ServiceNow), including authentication" is API Destination.

Blameless Postmortems - The Core of a Safety Culture

When an incident ends, you write a postmortem (post-incident analysis). Incident Manager auto-generates a PIR draft based on the Timeline, and the operator fills in cause, impact, lessons, and follow-up actions. But the real value of a postmortem lies not in the document itself but in the culture of writing it.

The blameless postmortem comes from research on the safety culture of high-risk industries such as aviation and medicine. The core insight connects to Sidney Dekker's "New View of Human Error" - an accident is not caused by a "bad person"; it is the result of a normal person taking an action that seemed reasonable in that moment, thereby exposing a latent flaw in the system. If you blame people, from then on people hide incidents, information gets blocked, and the same flaws repeat. Instead of blame, you ask "why was that action reasonable given that information at that moment?" and fix the system. James Reason's Swiss Cheese Model is in the same vein - an accident happens not from one person's mistake but when holes in multiple defensive layers happen to line up. The fact that the postmortem for the 2017 AWS S3 incident ended not with "blame the engineer" but with "the tool had no safety limit" is a model of this culture. This is exactly the "learning from failure" that the Operational Excellence pillar emphasizes in DOP.

Etsy was a pioneer that spread a blameless culture through the industry around 2012 with an engineering blog post titled "Blameless PostMortems and a Just Culture." Etsy had the engineer who caused the outage present the postmortem personally, but instead of punishment, the team jointly reconstructed "how that decision seemed reasonable at that moment." As a result, engineers actively shared incidents rather than hiding them, and the learning speed of the entire organization increased. The lesson this case shows: incident tools (Incident Manager, PagerDuty) help coordination, but it is a blameless culture that converts the data gathered with those tools into learning, and tools and culture must go together for MTTR to fall over the long term.

Slack Message Format - Rich Card Rendering

When an SNS message follows a specific schema, Chatbot renders it not as plain text but as a rich card (title, description, next-step buttons).

{
  "version": "1.0",
  "source": "custom",
  "content": {
    "textType": "client-markdown",
    "title": ":rotating_light: Deploy failed — MyApp prod",
    "description": "CodeDeploy rollback triggered. 5xx spike at 03:14 UTC.",
    "nextSteps": [
      "Check CloudWatch dashboard: <url>",
      "Run `@aws codedeploy get-deployment --deployment-id d-xxx`",
      "Page IC if not resolved in 10m"
    ]
  }
}

This elevates a notification from "conveying information" to "prompting the next action" - because what the recipient should do right away (next steps) is on the same card, the time spent reassembling context shrinks.

Wrapping Up

Today's picture has five parts. First, ChatOps gathers commands, notifications, discussion, and documentation in one channel to create a single source of truth, serializing shared awareness among responders and reducing coordination cost and context switching (GitHub Hubot as the origin, the shared-log philosophy of distributed consensus). Second, AWS Chatbot is the SNS-to-channel bridge, and command permissions are determined by the intersection of the IAM Role and the Guardrail Policy (explicit Deny wins), so "reads are free, writes go through the pipeline" is the standard. Third, CodeStar Notifications is the standard path for Pipeline/Build/Deploy notifications (no excessive glue code needed). Fourth, Incident Manager codifies ICS (the Incident Command System) to automate emergency response with Response Plan, Engagement, Escalation, Timeline, and PIR, and external SaaS is integrated via SNS/API Destination. Fifth, blameless postmortems are the core of a safety culture (the Swiss Cheese Model, Just Culture), converting the data tools gather into learning and reducing long-term MTTR.

In the next article, we tie together all of Week 12 - EventBridge, SSM Automation, auto-healing, ChatOps, and Incident Manager - into a single incident automation pipeline and do an integrated review with a real-world scenario.

📝 Practice Questions

Click a choice to reveal the answer and explanation.

Question 1

You want to notify a Slack channel of CodePipeline execution failures in the simplest, most standard way. What is the most suitable option?

Question 2

You want operators to be able to run AWS commands from Slack through Chatbot, but to absolutely block dangerous commands such as terminating prod EC2 or deleting RDS, even by accident. You want to keep the IAM Role broad for operational convenience. What is the correct configuration?

Question 3

For a critical incident, you want to set up staged emergency call-up so that if the primary on-call does not respond within 30 minutes, the secondary group is automatically paged, and if still none, the manager. What is the AWS-native solution?

Question 4

You want to safely send incidents from EventBridge to the external SaaS PagerDuty Events API, including authentication, without hand-coding credential renewal, rate limiting, retries, and secret management. What is the most suitable option?

Question 5

In incident response, multiple engineers act in different tools (console, logs, phone), manipulate the same resource without knowing about each other, and make the situation worse, repeatedly. What is the core value of ChatOps that structurally reduces this?

Question 6

While writing a postmortem after an incident, an atmosphere of blaming the engineer who caused the outage formed, and people gradually began hiding incidents. What is the correct approach from a safety culture perspective?

Question 7

Which option correctly maps the AWS Incident Manager components to the incident response flow?

📌 Today's Summary

Today's key points are five. First, ChatOps serializes commands, notifications, discussion, and documentation into one channel to create a single source of truth and a shared mental model, reducing coordination cost and context switching (GitHub Hubot as the origin, the shared-log philosophy of distributed consensus, Google SRE incident management). Second, AWS Chatbot is the SNS-to-Slack/Teams bridge, and command permissions are determined by the intersection of the IAM Role and the Guardrail Policy (IAM explicit-deny-always-wins, the same permission ceiling as SCPs), so "reads are free, writes go through the pipeline" is the standard. Third, CodeStar Notifications is the standard path for Pipeline/Build/Deploy notifications (no excessive glue code needed). Fourth, Incident Manager codifies the ICS (Incident Command System) of 1970s wildfire response to automate emergency response with Response Plan, Engagement, Escalation, Timeline, and PIR, and external SaaS (PagerDuty/OpsGenie) is integrated via SNS Webhook or EventBridge API Destination (Connection, Secrets Manager, rate limiting, retries). Fifth, blameless postmortems are the core of a safety culture (Dekker's New View, Reason's Swiss Cheese Model, Etsy's Just Culture), converting the data tools gather into learning and reducing long-term MTTR.

PreviousAuto-Healing: The Control Theory of Automatic Recovery and the Safety Engineering That Stops Runaway AutomationWeek 12 · Day 3Next Week 12 Integrated Review: Wiring the Whole Nervous System of Incident Automation TogetherWeek 12 · Day 5

Official references

  • DOP-C02 official exam page(opens in a new tab)
  • Amazon EventBridge documentation(opens in a new tab)
  • Amazon SNS documentation(opens in a new tab)
  • AWS IAM documentation(opens in a new tab)
  • AWS Lambda documentation(opens in a new tab)
  • Amazon S3 documentation(opens in a new tab)

On this page

  • Where ChatOps Came From - A Single Source of Truth for Operations
  • AWS Chatbot - The Translator Between SNS and Channels
  • Guardrail Policy - Keeping Anyone from Deleting prod from Slack
  • CodeStar Notifications - The Standard Path for Pipeline Notifications
  • AWS Incident Manager - Emergency Response as Code
  • External SaaS Integration - PagerDuty, OpsGenie
  • Blameless Postmortems - The Core of a Safety Culture
  • Slack Message Format - Rich Card Rendering
  • Wrapping Up
  • Practice Questions
  • Today's Summary