Intégrer des recommandations opérationnelles dans votre application avec AWS CloudFormation - AWS Centre de résilience

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Intégrer des recommandations opérationnelles dans votre application avec AWS CloudFormation

Après avoir choisi Créer un CloudFormation modèle sur la page des recommandations opérationnelles, vous AWS Resilience Hub créez un AWS CloudFormation modèle qui décrit l'alarme, la procédure opérationnelle standard (SOP) ou l'AWS FISexpérience spécifique pour votre application. Le AWS CloudFormation modèle est stocké dans un compartiment Amazon S3, et vous pouvez vérifier le chemin S3 vers le modèle dans l'onglet Détails du modèle sur la page des recommandations opérationnelles.

Par exemple, la liste ci-dessous montre un AWS CloudFormation modèle au format JSON qui décrit une recommandation d'alarme émise par. AWS Resilience Hub Il s'agit d'une alarme de limitation de lecture pour une table DynamoDB appelée. Employees

La Resources section du modèle décrit l'AWS::CloudWatch::Alarmalarme qui est activée lorsque le nombre d'événements de limitation de lecture pour la table DynamoDB dépasse 1. Et les deux AWS::SSM::Parameter ressources définissent des métadonnées qui permettent AWS Resilience Hub d'identifier les ressources installées sans avoir à scanner l'application elle-même.

{ "AWSTemplateFormatVersion" : "2010-09-09", "Parameters" : { "SNSTopicARN" : { "Type" : "String", "Description" : "The ARN of the SNS topic to which alarm status changes are to be sent. This must be in the same region being deployed.", "AllowedPattern" : "^arn:(aws|aws-cn|aws-iso|aws-iso-[a-z]{1}|aws-us-gov):sns:([a-z]{2}-((iso[a-z]{0,1}-)|(gov-)){0,1}[a-z]+-[0-9]):[0-9]{12}:[A-Za-z0-9/][A-Za-z0-9:_/+=,@.-]{1,256}$" } }, "Resources" : { "ReadthrottleeventsthresholdexceededEmployeesONDEMAND0DynamoDBTablePXBZQYH3DCJ9Alarm" : { "Type" : "AWS::CloudWatch::Alarm", "Properties" : { "AlarmDescription" : "An Alarm by AWS Resilience Hub that alerts when the number of read-throttle events are greater than 1.", "AlarmName" : "ResilienceHub-ReadThrottleEventsAlarm-2020-04-01_Employees-ON-DEMAND-0-DynamoDBTable-PXBZQYH3DCJ9", "AlarmActions" : [ { "Ref" : "SNSTopicARN" } ], "MetricName" : "ReadThrottleEvents", "Namespace" : "AWS/DynamoDB", "Statistic" : "Sum", "Dimensions" : [ { "Name" : "TableName", "Value" : "Employees-ON-DEMAND-0-DynamoDBTable-PXBZQYH3DCJ9" } ], "Period" : 60, "EvaluationPeriods" : 1, "DatapointsToAlarm" : 1, "Threshold" : 1, "ComparisonOperator" : "GreaterThanOrEqualToThreshold", "TreatMissingData" : "notBreaching", "Unit" : "Count" }, "Metadata" : { "AWS::ResilienceHub::Monitoring" : { "recommendationId" : "dynamodb:alarm:health-read_throttle_events:2020-04-01" } } }, "dynamodbalarmhealthreadthrottleevents20200401EmployeesONDEMAND0DynamoDBTablePXBZQYH3DCJ9AlarmSSMParameter" : { "Type" : "AWS::SSM::Parameter", "Properties" : { "Name" : "/ResilienceHub/Alarm/3f904525-4bfa-430f-96ef-58ec9b19aa73/dynamodb-alarm-health-read-throttle-events-2020-04-01_Employees-ON-DEMAND-0-DynamoDBTable-PXBZQYH3DCJ9", "Type" : "String", "Value" : { "Fn::Sub" : "${ReadthrottleeventsthresholdexceededEmployeesONDEMAND0DynamoDBTablePXBZQYH3DCJ9Alarm}" }, "Description" : "SSM Parameter for identifying installed resources." } }, "dynamodbalarmhealthreadthrottleevents20200401EmployeesONDEMAND0DynamoDBTablePXBZQYH3DCJ9AlarmInfoSSMParameter" : { "Type" : "AWS::SSM::Parameter", "Properties" : { "Name" : "/ResilienceHub/Info/Alarm/3f904525-4bfa-430f-96ef-58ec9b19aa73/dynamodb-alarm-health-read-throttle-events-2020-04-01_Employees-ON-DEMAND-0-DynamoDBTable-PXBZQYH3DCJ9", "Type" : "String", "Value" : { "Fn::Sub" : "{\"alarmName\":\"${ReadthrottleeventsthresholdexceededEmployeesONDEMAND0DynamoDBTablePXBZQYH3DCJ9Alarm}\",\"referenceId\":\"dynamodb:alarm:health_read_throttle_events:2020-04-01\",\"resourceId\":\"Employees-ON-DEMAND-0-DynamoDBTable-PXBZQYH3DCJ9\",\"relatedSOPs\":[\"dynamodb:sop:update_provisioned_capacity:2020-04-01\"]}" }, "Description" : "SSM Parameter for identifying installed resources." } } } }

Modifier le AWS CloudFormation modèle

Le moyen le plus simple d'intégrer une alarme, un SOP ou une AWS FIS ressource dans votre application principale consiste simplement à l'ajouter en tant que ressource supplémentaire dans le modèle qui décrit votre modèle d'application. Le fichier au format JSON fourni ci-dessous fournit un aperçu de base de la façon dont une table DynamoDB est décrite dans un modèle. AWS CloudFormation Une véritable application est susceptible d'inclure plusieurs ressources supplémentaires, telles que des tables supplémentaires.

{ "AWSTemplateFormatVersion": "2010-09-09T00:00:00.000Z", "Description": "Application Stack with Employees Table", "Outputs": { "DynamoDBTable": { "Description": "The DynamoDB Table Name", "Value": {"Ref": "Employees"} } }, "Resources": { "Employees": { "Type": "AWS::DynamoDB::Table", "Properties": { "BillingMode": "PAY_PER_REQUEST", "AttributeDefinitions": [ { "AttributeName": "USER_ID", "AttributeType": "S" }, { "AttributeName": "RANGE_ATTRIBUTE", "AttributeType": "S" } ], "KeySchema": [ { "AttributeName": "USER_ID", "KeyType": "HASH" }, { "AttributeName": "RANGE_ATTRIBUTE", "KeyType": "RANGE" } ], "PointInTimeRecoverySpecification": { "PointInTimeRecoveryEnabled": true }, "Tags": [ { "Key": "Key", "Value": "Value" } ], "LocalSecondaryIndexes": [ { "IndexName": "resiliencehub-index-local-1", "KeySchema": [ { "AttributeName": "USER_ID", "KeyType": "HASH" }, { "AttributeName": "RANGE_ATTRIBUTE", "KeyType": "RANGE" } ], "Projection": { "ProjectionType": "ALL" } } ], "GlobalSecondaryIndexes": [ { "IndexName": "resiliencehub-index-1", "KeySchema": [ { "AttributeName": "USER_ID", "KeyType": "HASH" } ], "Projection": { "ProjectionType": "ALL" } } ] } } } }

Pour permettre le déploiement de la ressource d'alarme avec votre application, vous devez à présent remplacer les ressources codées en dur par une référence dynamique dans les piles d'applications.

Ainsi, dans la définition de la AWS::CloudWatch::Alarm ressource, modifiez les éléments suivants :

"Value" : "Employees-ON-DEMAND-0-DynamoDBTable-PXBZQYH3DCJ9"

à ce qui suit :

"Value" : {"Ref": "Employees"}

Et dans la définition de la AWS::SSM::Parameter ressource, modifiez ce qui suit :

"Fn::Sub" : "{\"alarmName\":\"${ReadthrottleeventsthresholdexceededDynamoDBEmployeesONDEMAND0DynamoDBTablePXBZQYH3DCJ9Alarm}\",\"referenceId\":\"dynamodb:alarm:health_read_throttle_events:2020-04-01\",\"resourceId\":\"Employees-ON-DEMAND-0-DynamoDBTable-PXBZQYH3DCJ9\",\"relatedSOPs\":[\"dynamodb:sop:update_provisioned_capacity:2020-04-01\"]}"

à ce qui suit :

"Fn::Sub" : "{\"alarmName\":\"${ReadthrottleeventsthresholdexceededEmployeesONDEMAND0DynamoDBTablePXBZQYH3DCJ9Alarm}\",\"referenceId\":\"dynamodb:alarm:health_read_throttle_events:2020-04-01\",\"resourceId\":\"${Employees}\",\"relatedSOPs\":[\"dynamodb:sop:update_provisioned_capacity:2020-04-01\"]}"

Lorsque vous modifiez AWS CloudFormation des modèles pour les SOP et les AWS FIS expériences, vous adopterez la même approche, en remplaçant les ID de référence codés en dur par des références dynamiques qui continuent de fonctionner même après des modifications matérielles.

En utilisant une référence à la table DynamoDB, vous AWS CloudFormation autorisez les opérations suivantes :

  • Créez d'abord la table de base de données.

  • Utilisez toujours l'identifiant réel de la ressource générée dans l'alarme et mettez à jour l'alarme de manière dynamique s'il est AWS CloudFormation nécessaire de remplacer la ressource.

Note

Vous pouvez choisir des méthodes plus avancées pour gérer les ressources de votre application, par AWS CloudFormation exemple en imbriquant des piles ou en faisant référence aux sorties de ressources dans une pile séparée AWS CloudFormation. (Mais si vous souhaitez séparer la pile de recommandations de la pile principale, vous devez configurer un moyen de transmettre les informations entre les deux piles.)

En outre, des outils tiers, tels que Terraform by HashiCorp, peuvent également être utilisés pour provisionner l'infrastructure en tant que code (IaC).