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 spécifique, la procédure opérationnelle standard (SOP) ou l' AWS FIS expérience 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 JSON au format -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::Alarm
alarme 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 Amazon 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 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. SOP Le fichier JSON formaté 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 des AWS CloudFormation modèles SOPs et AWS FIS des expériences, vous adopterez la même approche, en remplaçant les références codées en dur par IDs 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).