AWS CloudFormation を使用して、運用上の推奨事項をアプリケーションに統合します - AWS レジリエンスハブ

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS CloudFormation を使用して、運用上の推奨事項をアプリケーションに統合します

運用上の推奨事項ページで CloudFormation テンプレートの作成 を選択した後、AWS Resilience Hub は、アプリケーションの特定のアラーム、標準運用手順 (SOP)、または AWS FIS の実験を説明する AWS CloudFormation のテンプレートを作成します。AWS CloudFormation のテンプレートは Amazon S3 バケットに保存され、「運用上の推奨事項」ページの テンプレートの詳細 タブでテンプレートへの S3 パスを確認できます。

たとえば、以下のリストは JSON 形式の AWS CloudFormation のテンプレートを示しています。このテンプレートには、AWS Resilience Hub によってレンダリングされるアラーム推奨が記述されています。Employees という名前の DynamoDB テーブルの読み取りスロットリングアラームです。

テンプレートの Resources セクションでは、DynamoDB テーブルの読み取りスロットルイベントの数が 1 を超えたときにアクティブになる AWS::CloudWatch::Alarm のアラームについて説明しています。また、この 2 つの AWS::SSM::Parameter リソースは、実際のアプリケーションをスキャンしなくても AWS Resilience Hub がインストールされているリソースを識別できるようにするメタデータを定義します。

{ "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." } } } }

テンプレートの変更 AWS CloudFormation

アラーム、SOP、または AWS FIS リソースをメインアプリケーションに統合する最も簡単な方法は、アプリケーションテンプレートを記述するテンプレートに別のリソースとして追加することです。以下に示す JSON 形式のファイルは、DynamoDB テーブルが AWS CloudFormation のテンプレートでどのように記述されるかの基本的な概要を示しています。実際のアプリケーションには、追加のテーブルなど、さらにいくつかのリソースが含まれる可能性があります。

{ "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" } } ] } } } }

アラームリソースをアプリケーションとともにデプロイできるようにするには、ハードコーディングされたリソースをアプリケーションスタックの動的参照に置き換える必要があります。

そこで、AWS::CloudWatch::Alarm のリソース定義で以下を変更してください。

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

以下へ:

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

そこで、AWS::SSM::Parameter のリソース定義で以下を変更してください。

"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\"]}"

以下へ:

"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\"]}"

SOP や AWS FIS の実験用に AWS CloudFormation のテンプレートを変更する場合も、ハードコーディングされた参照 ID を、ハードウェアが変更されても動作し続ける動的参照に置き換えるという同じアプローチを取ります。

DynamoDB テーブルへの参照を使用することで、AWS CloudFormation によって次のことが可能になります。

  • まず、データベーステーブルを作成します。

  • 生成されたリソースの実際の ID を必ずアラームに使用し、AWS CloudFormation がリソースの交換を必要とする場合はアラームを動的に更新してください。

注記

スタックをネストしたり別の AWS CloudFormation スタックにあるリソース出力を参照したりするなど、AWS CloudFormation を使用したアプリケーションリソースの管理にはより高度な方法を選択できます。(ただし、レコメンデーションスタックをメインスタックとは別にしておきたい場合は、2 つのスタック間で情報を渡す方法を設定する必要があります)。

さらに、HashiCorp の Terraform などのサードパーティツールを使用して、Infrastructure as Code (IaC) をプロビジョニングすることもできます。