Connect your AWS infrastructure to ConvOps in about 5 minutes. No code changes required.
IAM Role + SNS Topic. ~2 min.
Mark what ConvOps can act on. ~1 min.
Point alarms at the SNS topic. ~1 min.
Email Role ARN — we handle the rest.
| Resource | Type | Purpose |
|---|---|---|
ConvOpsAccessRole |
IAM Role | Allows ConvOps to read your metrics and take approved actions on tagged resources |
ConvOpsAlertTopic |
SNS Topic | Receives CloudWatch alarms and forwards them securely to ConvOps |
That's it — no changes to existing resources, no code, no agents.
This creates the IAM Role and SNS Topic ConvOps needs.
YOUR_CUSTOMER_EXTERNAL_ID — provided by ConvOps during onboardingYOUR_CONVOPS_API_KEY — provided by ConvOps during onboardingAWSTemplateFormatVersion: '2010-09-09'
Description: ConvOps Infrastructure Setup — IAM Role + Alert Topic
Parameters:
CustomerExternalId:
Type: String
Description: Unique external ID provided by ConvOps (keep this secret)
Default: YOUR_CUSTOMER_EXTERNAL_ID
ConvOpsApiKey:
Type: String
Description: Your ConvOps API key (provided during onboarding)
Default: YOUR_CONVOPS_API_KEY
NoEcho: true
Resources:
# SNS Topic: receives CloudWatch alarms and forwards to ConvOps
ConvOpsAlertTopic:
Type: AWS::SNS::Topic
Properties:
TopicName: ConvOpsAlerts
Subscription:
- Protocol: https
Endpoint: https://api.convops.io/v1/ingest
DeliveryPolicy:
healthyRetryPolicy:
numRetries: 3
minDelayTarget: 20
maxDelayTarget: 20
ConvOpsAlertTopicPolicy:
Type: AWS::SNS::TopicPolicy
Properties:
Topics:
- !Ref ConvOpsAlertTopic
PolicyDocument:
Statement:
- Effect: Allow
Principal:
Service: cloudwatch.amazonaws.com
Action: sns:Publish
Resource: !Ref ConvOpsAlertTopic
# IAM Role: allows ConvOps to read and take approved actions
ConvOpsAccessRole:
Type: AWS::IAM::Role
Properties:
RoleName: ConvOpsAccessRole
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
AWS: arn:aws:iam::009001720832:role/convops-executor
Action: sts:AssumeRole
Condition:
StringEquals:
sts:ExternalId: !Ref CustomerExternalId
Policies:
- PolicyName: ConvOpsReadPolicy
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- cloudwatch:GetMetricData
- cloudwatch:GetMetricStatistics
- cloudwatch:DescribeAlarms
- logs:FilterLogEvents
- logs:GetLogEvents
- logs:DescribeLogGroups
- logs:DescribeLogStreams
- ec2:DescribeInstances
- ecs:DescribeTasks
- ecs:DescribeServices
- ecs:ListTasks
- ecs:ListServices
- rds:DescribeDBInstances
- rds:DescribeEvents
- lambda:ListFunctions
- lambda:GetFunctionConfiguration
Resource: "*"
- PolicyName: ConvOpsActionPolicy
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action: ecs:UpdateService
Resource: "*"
Condition:
StringEquals:
aws:ResourceTag/ConvOpsManaged: "true"
- Effect: Allow
Action: ec2:RebootInstances
Resource: "*"
Condition:
StringEquals:
aws:ResourceTag/ConvOpsManaged: "true"
- Effect: Allow
Action: rds:RebootDBInstance
Resource: "*"
Condition:
StringEquals:
aws:ResourceTag/ConvOpsManaged: "true"
- Effect: Allow
Action: ssm:SendCommand
Resource:
- !Sub "arn:aws:ssm:*:*:document/AWS-RestartService"
- !Sub "arn:aws:ssm:*:*:document/AWS-RunShellScript"
- !Sub "arn:aws:ec2:*:${AWS::AccountId}:instance/*"
Condition:
StringEquals:
aws:ResourceTag/ConvOpsManaged: "true"
Outputs:
RoleArn:
Description: Share this with ConvOps during onboarding
Value: !GetAtt ConvOpsAccessRole.Arn
SNSTopicArn:
Description: Use this as your CloudWatch alarm action
Value: !Ref ConvOpsAlertTopic
aws cloudformation deploy \
--template-file customer-convops-setup.yaml \
--stack-name convops-setup \
--capabilities CAPABILITY_NAMED_IAM \
--parameter-overrides \
CustomerExternalId=YOUR_EXTERNAL_ID \
ConvOpsApiKey=YOUR_API_KEY
CustomerExternalId and ConvOpsApiKey when promptedConvOps uses tags to determine what it can act on. Investigation (reading metrics and logs) works on all resources — but actions like restarts and reboots are restricted to tagged resources only.
| Tag Key | Tag Value |
|---|---|
ConvOpsManaged | true |
aws ecs tag-resource \
--resource-arn arn:aws:ecs:eu-central-1:YOUR_ACCOUNT:service/my-cluster/my-service \
--tags key=ConvOpsManaged,value=true
aws ec2 create-tags \
--resources i-0abc123def456 \
--tags Key=ConvOpsManaged,Value=true
aws rds add-tags-to-resource \
--resource-name arn:aws:rds:eu-central-1:YOUR_ACCOUNT:db:my-db \
--tags Key=ConvOpsManaged,Value=true
Add the ConvOpsAlerts SNS topic as an action on any alarm you want ConvOps to monitor.
# Get your SNS Topic ARN from the CloudFormation stack outputs
SNS_ARN=$(aws cloudformation describe-stacks \
--stack-name convops-setup \
--query "Stacks[0].Outputs[?OutputKey=='SNSTopicArn'].OutputValue" \
--output text)
# Add ConvOps as an alarm action on an existing alarm
aws cloudwatch put-metric-alarm \
--alarm-name "prod-api-cpu-high" \
--alarm-actions $SNS_ARN \
--metric-name CPUUtilization \
--namespace AWS/ECS \
--statistic Average \
--period 300 \
--threshold 85 \
--comparison-operator GreaterThanThreshold \
--evaluation-periods 2
ConvOpsAlertsOnboarding is currently handled directly with the ConvOps team — no self-serve signup yet.
ConvOpsManaged: true tagConvOpsAccessRole IAM role at any time. ConvOps immediately and permanently loses all access to your account.
Check the following:
Check the following:
ConvOpsManaged: true tag appliedEnsure your deploying IAM user/role has these permissions:
cloudformation:*iam:CreateRole, iam:PutRolePolicy, iam:AttachRolePolicysns:CreateTopic, sns:SetTopicAttributesAlso ensure you included the --capabilities CAPABILITY_NAMED_IAM flag.
ConvOps needs to confirm the HTTPS subscription from our side. Email nitesh@convops.io with your SNS Topic ARN and we'll confirm it manually within a few hours.
We'll walk you through setup on a 15-minute call.
Email Usnitesh@convops.io · Usually responds within a few hours