{"id":1089,"date":"2026-09-17T11:36:07","date_gmt":"2026-09-17T02:36:07","guid":{"rendered":"https:\/\/baresupport.jp\/blog\/?p=1089"},"modified":"2026-09-17T11:36:07","modified_gmt":"2026-09-17T02:36:07","slug":"aws%e4%b8%8a%e3%81%aeweb%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc%ef%bc%88httpd%ef%bc%89%e3%81%a7%e5%ae%9f%e7%8f%be%e3%81%99%e3%82%8b%e3%80%81ai%e8%a7%a3%e6%9e%90%e3%82%92%e6%b4%bb%e7%94%a8%e3%81%97","status":"publish","type":"post","link":"https:\/\/baresupport.jp\/blog\/2026\/09\/17\/1089\/","title":{"rendered":"AWS\u4e0a\u306eWeb\u30b5\u30fc\u30d0\u30fc\uff08httpd\uff09\u3067\u5b9f\u73fe\u3059\u308b\u3001AI\u89e3\u6790\u3092\u6d3b\u7528\u3057\u305f\u4fe1\u983c\u6027\u306e\u9ad8\u3044\u81ea\u52d5\u30ea\u30ab\u30d0\u30ea\u69cb\u6210"},"content":{"rendered":"\n<p>Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u904b\u7528\u306b\u304a\u3044\u3066\u3001\u969c\u5bb3\u767a\u751f\u6642\u306e\u30c0\u30a6\u30f3\u30bf\u30a4\u30e0\u77ed\u7e2e\u3068\u904b\u7528\u8ca0\u8377\u306e\u524a\u6e1b\u306f\u91cd\u8981\u306a\u8ab2\u984c\u3067\u3059\u3002\u672c\u8a18\u4e8b\u3067\u306f\u3001AWS\u4e0a\u306eEC2\uff08httpd\uff09\u3067\u30d7\u30ed\u30bb\u30b9\u304c\u505c\u6b62\u3057\u305f\u969b\u306b\u3001<strong>CloudWatch<\/strong>\u3001<strong>Lambda<\/strong>\u3001<strong>Amazon Bedrock\uff08\u751f\u6210AI\uff09<\/strong>\u3001<strong>AWS Systems Manager\uff08SSM\uff09<\/strong>\u3092\u9023\u643a\u3055\u305b\u3066\u5b89\u5168\u306b\u81ea\u52d5\u5fa9\u65e7\u3059\u308b\u30b7\u30b9\u30c6\u30e0\u69cb\u6210\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002\u3042\u308f\u305b\u3066\u3001\u3053\u306e\u69cb\u6210\u3092\u4e00\u62ec\u3067\u30c7\u30d7\u30ed\u30a4\u3067\u304d\u308b<strong>CloudFormation\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8<\/strong>\u3082\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_76 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\"><p class=\"ez-toc-title\" style=\"cursor:inherit\">\u3053\u306e\u8a18\u4e8b\u306e\u76ee\u6b21<\/p>\n<\/div><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/baresupport.jp\/blog\/2026\/09\/17\/1089\/#%E5%85%A8%E4%BD%93%E6%A7%8B%E6%88%90%E3%81%A8%E8%87%AA%E5%8B%95%E3%83%AA%E3%82%AB%E3%83%90%E3%83%AA%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF\" >\u5168\u4f53\u69cb\u6210\u3068\u81ea\u52d5\u30ea\u30ab\u30d0\u30ea\u306e\u4ed5\u7d44\u307f<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/baresupport.jp\/blog\/2026\/09\/17\/1089\/#%E5%85%A8%E4%BD%93%E6%A7%8B%E6%88%90%E5%9B%B3\" >\u5168\u4f53\u69cb\u6210\u56f3<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/baresupport.jp\/blog\/2026\/09\/17\/1089\/#%E8%87%AA%E5%8B%95%E3%83%AA%E3%82%AB%E3%83%90%E3%83%AA%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AE%E8%A9%B3%E7%B4%B0%E5%87%A6%E7%90%86%E3%83%95%E3%83%AD%E3%83%BC\" >\u81ea\u52d5\u30ea\u30ab\u30d0\u30ea\u30b7\u30b9\u30c6\u30e0\u306e\u8a73\u7d30\u51e6\u7406\u30d5\u30ed\u30fc<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/baresupport.jp\/blog\/2026\/09\/17\/1089\/#%E2%91%A0%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E7%9B%A3%E8%A6%96%E3%81%A8%E3%82%A2%E3%83%A9%E3%83%BC%E3%83%A0%E6%A4%9C%E7%9F%A5%EF%BC%88EC2%E2%86%92CloudWatch%E2%86%92EventBridge%EF%BC%89\" >\u2460\u30d7\u30ed\u30bb\u30b9\u76e3\u8996\u3068\u30a2\u30e9\u30fc\u30e0\u691c\u77e5\uff08EC2\u2192CloudWatch\u2192EventBridge\uff09<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/baresupport.jp\/blog\/2026\/09\/17\/1089\/#%E2%91%A1%E8%B2%A0%E8%8D%B7%E4%BF%9D%E8%AD%B7%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E5%AE%89%E5%85%A8%E8%A8%BA%E6%96%AD%EF%BC%88Lambda%E2%86%92CloudWatch_Metrics%EF%BC%89\" >\u2461\u8ca0\u8377\u4fdd\u8b77\u306e\u305f\u3081\u306e\u5b89\u5168\u8a3a\u65ad\uff08Lambda\u2192CloudWatch Metrics\uff09<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/baresupport.jp\/blog\/2026\/09\/17\/1089\/#%E2%91%A2%E3%83%AD%E3%82%B0%E5%8F%96%E5%BE%97%E3%81%A8AI%E8%A8%BA%E6%96%AD%EF%BC%88Lambda%E2%86%92SSM%E2%86%92Bedrock%EF%BC%89\" >\u2462\u30ed\u30b0\u53d6\u5f97\u3068AI\u8a3a\u65ad\uff08Lambda\u2192SSM\u2192Bedrock\uff09<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/baresupport.jp\/blog\/2026\/09\/17\/1089\/#%E2%91%A3%E8%87%AA%E5%8B%95%E5%86%8D%E8%B5%B7%E5%8B%95%E3%81%AE%E5%AE%9F%E8%A1%8C%EF%BC%88Lambda%E2%86%92SSM%E2%86%92EC2%EF%BC%89\" >\u2463\u81ea\u52d5\u518d\u8d77\u52d5\u306e\u5b9f\u884c\uff08Lambda\u2192SSM\u2192EC2\uff09<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/baresupport.jp\/blog\/2026\/09\/17\/1089\/#%E6%A7%8B%E7%AF%89%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AAAWS_IAM%E6%A8%A9%E9%99%90%EF%BC%88IAM%E3%83%AD%E3%83%BC%E3%83%AB%E3%83%BB%E3%83%9D%E3%83%AA%E3%82%B7%E3%83%BC%EF%BC%89\" >\u69cb\u7bc9\u306b\u5fc5\u8981\u306aAWS IAM\u6a29\u9650\uff08IAM\u30ed\u30fc\u30eb\u30fb\u30dd\u30ea\u30b7\u30fc\uff09<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/baresupport.jp\/blog\/2026\/09\/17\/1089\/#EC2%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E7%94%A8IAM%E3%83%AD%E3%83%BC%E3%83%AB%EF%BC%88Instance_Profile%EF%BC%89\" >EC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u7528IAM\u30ed\u30fc\u30eb\uff08Instance Profile\uff09<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/baresupport.jp\/blog\/2026\/09\/17\/1089\/#%E3%83%AA%E3%82%AB%E3%83%90%E3%83%AA%E7%94%A8Lambda%E9%96%A2%E6%95%B0%E3%81%AEIAM%E3%83%AD%E3%83%BC%E3%83%AB\" >\u30ea\u30ab\u30d0\u30ea\u7528Lambda\u95a2\u6570\u306eIAM\u30ed\u30fc\u30eb<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/baresupport.jp\/blog\/2026\/09\/17\/1089\/#EventBridge%E3%83%AB%E3%83%BC%E3%83%AB%E3%81%AE%E6%A8%A9%E9%99%90\" >EventBridge\u30eb\u30fc\u30eb\u306e\u6a29\u9650<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/baresupport.jp\/blog\/2026\/09\/17\/1089\/#CloudFormation%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%81%A8%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4%E6%89%8B%E9%A0%86\" >CloudFormation\u30b5\u30f3\u30d7\u30eb\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3068\u30c7\u30d7\u30ed\u30a4\u624b\u9806<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/baresupport.jp\/blog\/2026\/09\/17\/1089\/#%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%81%AE%E7%89%B9%E5%BE%B4%E3%83%BB%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88\" >\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u7279\u5fb4\u30fb\u30dd\u30a4\u30f3\u30c8<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/baresupport.jp\/blog\/2026\/09\/17\/1089\/#%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%B3%E3%83%BC%E3%83%89%EF%BC%88templateyaml%EF%BC%89\" >\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30b3\u30fc\u30c9\uff08template.yaml\uff09<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/baresupport.jp\/blog\/2026\/09\/17\/1089\/#%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E4%BE%8B%EF%BC%88PowerShellWindows%E7%92%B0%E5%A2%83%EF%BC%89\" >\u30c7\u30d7\u30ed\u30a4\u30b3\u30de\u30f3\u30c9\u4f8b\uff08PowerShell\/Windows\u74b0\u5883\uff09<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/baresupport.jp\/blog\/2026\/09\/17\/1089\/#%E5%8F%82%E8%80%83%EF%BC%9AAmazon_Bedrock%E3%81%AE%E4%B8%BB%E8%A6%81%E3%81%AAModel_ID%E4%B8%80%E8%A6%A7%E3%81%A8%E9%81%B8%E5%AE%9A%E7%90%86%E7%94%B1\" >\u53c2\u8003\uff1aAmazon Bedrock\u306e\u4e3b\u8981\u306aModel ID\u4e00\u89a7\u3068\u9078\u5b9a\u7406\u7531<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/baresupport.jp\/blog\/2026\/09\/17\/1089\/#%E8%87%AA%E5%8B%95%E3%83%AA%E3%82%AB%E3%83%90%E3%83%AA%E6%A7%8B%E6%88%90%E3%81%AE%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88\" >\u81ea\u52d5\u30ea\u30ab\u30d0\u30ea\u69cb\u6210\u306e\u30e1\u30ea\u30c3\u30c8<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/baresupport.jp\/blog\/2026\/09\/17\/1089\/#%E8%A3%9C%E8%B6%B3%EF%BC%9A%E5%8B%95%E4%BD%9C%E6%A4%9C%E8%A8%BC%E3%83%BB%E9%81%8B%E7%94%A8%E7%A2%BA%E8%AA%8D%E3%81%AB%E4%BE%BF%E5%88%A9%E3%81%AAAWS_CLI%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89\" >\u88dc\u8db3\uff1a\u52d5\u4f5c\u691c\u8a3c\u30fb\u904b\u7528\u78ba\u8a8d\u306b\u4fbf\u5229\u306aAWS CLI\u30b3\u30de\u30f3\u30c9<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/baresupport.jp\/blog\/2026\/09\/17\/1089\/#%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E7%9B%A3%E8%A6%96%E3%83%A1%E3%83%88%E3%83%AA%E3%82%AF%E3%82%B9%E3%81%AE%E6%8E%A8%E7%A7%BB%E7%A2%BA%E8%AA%8D\" >\u30d7\u30ed\u30bb\u30b9\u76e3\u8996\u30e1\u30c8\u30ea\u30af\u30b9\u306e\u63a8\u79fb\u78ba\u8a8d<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/baresupport.jp\/blog\/2026\/09\/17\/1089\/#%E3%82%A2%E3%83%A9%E3%83%BC%E3%83%A0%E7%8A%B6%E6%85%8B%E3%81%A8%E5%A4%89%E6%9B%B4%E7%90%86%E7%94%B1%E3%81%AE%E7%A2%BA%E8%AA%8D\" >\u30a2\u30e9\u30fc\u30e0\u72b6\u614b\u3068\u5909\u66f4\u7406\u7531\u306e\u78ba\u8a8d<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/baresupport.jp\/blog\/2026\/09\/17\/1089\/#%E3%81%BE%E3%81%A8%E3%82%81\" >\u307e\u3068\u3081<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E5%85%A8%E4%BD%93%E6%A7%8B%E6%88%90%E3%81%A8%E8%87%AA%E5%8B%95%E3%83%AA%E3%82%AB%E3%83%90%E3%83%AA%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF\"><\/span><strong>\u5168\u4f53\u69cb\u6210\u3068\u81ea\u52d5\u30ea\u30ab\u30d0\u30ea\u306e\u4ed5\u7d44\u307f<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>\u672c\u69cb\u6210\u3067\u306f\u3001\u5358\u306b\u30d7\u30ed\u30bb\u30b9\u304c\u505c\u6b62\u3057\u305f\u3089\u518d\u8d77\u52d5\u3059\u308b\u306e\u3067\u306f\u306a\u304f\u3001\u5b89\u5168\u78ba\u8a8d\uff08\u30b5\u30fc\u30d0\u30fc\u304c\u9ad8\u8ca0\u8377\u306b\u9665\u3063\u3066\u3044\u306a\u3044\u304b\uff09\u3068AI\u8a3a\u65ad\uff08\u30ed\u30b0\u306b\u7570\u5e38\u304c\u306a\u3044\u304b\uff09\u3092\u884c\u3046\u3053\u3068\u3067\u3001\u4e8c\u6b21\u969c\u5bb3\u3092\u9632\u304e\u306a\u304c\u3089\u5b89\u5168\u306b\u81ea\u52d5\u5fa9\u65e7\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E5%85%A8%E4%BD%93%E6%A7%8B%E6%88%90%E5%9B%B3\"><\/span><strong>\u5168\u4f53\u69cb\u6210\u56f3<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"902\" height=\"554\" src=\"https:\/\/baresupport.jp\/blog\/wp-content\/uploads\/2026\/09\/image.png\" alt=\"\u81ea\u52d5\u30ea\u30ab\u30d0\u30ea\u306e\u5168\u4f53\u69cb\u6210\u56f3\" class=\"wp-image-1091\" srcset=\"https:\/\/baresupport.jp\/blog\/wp-content\/uploads\/2026\/09\/image.png 902w, https:\/\/baresupport.jp\/blog\/wp-content\/uploads\/2026\/09\/image-300x184.png 300w, https:\/\/baresupport.jp\/blog\/wp-content\/uploads\/2026\/09\/image-768x472.png 768w\" sizes=\"auto, (max-width: 902px) 100vw, 902px\" \/><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<pre class=\"wp-block-code\"><code>&#91; \u30e6\u30fc\u30b6\u30fc \/ \u30af\u30e9\u30a4\u30a2\u30f3\u30c8 ]\n         \u2502\n         \u25bc (HTTPS)\n&#91; AWS ALB \/ EC2 (httpd) ] \uff08Web \u30b5\u30fc\u30d0\u30fc \/ \u30b5\u30fc\u30d3\u30b9\u63d0\u4f9b\uff09\n   \u2502               \u25b2\n   \u2502 (1) \u76e3\u8996      \u2502 (5) \u81ea\u52d5\u5fa9\u65e7 (SSM Run Command)\n   \u25bc               \u2502\n&#91; CloudWatch Alarm ] \u2500\u2500(2) \u30a2\u30e9\u30fc\u30e0\u767a\u5831\u2500\u2500\u25ba &#91; EventBridge ]\n   \u2502                                            \u2502\n   \u251c\u2500\u2500(\u96fb\u8a71 \/ Slack \u9023\u643a\u30aa\u30d7\u30b7\u30e7\u30f3)              (3) \u8d77\u52d5\n   \u25bc                                            \u2502\n &#91; \u7ba1\u7406\u8005\u901a\u77e5 ]                                 \u25bc\n                                    &#91; AWS Lambda ]\n                                       \u251c\u2500\u2500 (4-a) \u8ca0\u8377\u30c1\u30a7\u30c3\u30af (CloudWatch Metrics)\n                                       \u251c\u2500\u2500 (4-b) \u30ed\u30b0\u89e3\u6790 (Amazon Bedrock)\n                                       \u2514\u2500\u2500 (5)   \u518d\u8d77\u52d5\u6307\u793a (SSM Systems Manager)<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E8%87%AA%E5%8B%95%E3%83%AA%E3%82%AB%E3%83%90%E3%83%AA%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AE%E8%A9%B3%E7%B4%B0%E5%87%A6%E7%90%86%E3%83%95%E3%83%AD%E3%83%BC\"><\/span><strong>\u81ea\u52d5\u30ea\u30ab\u30d0\u30ea\u30b7\u30b9\u30c6\u30e0\u306e\u8a73\u7d30\u51e6\u7406\u30d5\u30ed\u30fc<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>\u969c\u5bb3\u691c\u77e5\u304b\u3089\u5fa9\u65e7\u307e\u3067\u3001\u4ee5\u4e0b\u306e\u30b9\u30c6\u30c3\u30d7\u306b\u6cbf\u3063\u3066\u51e6\u7406\u304c\u884c\u308f\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E2%91%A0%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E7%9B%A3%E8%A6%96%E3%81%A8%E3%82%A2%E3%83%A9%E3%83%BC%E3%83%A0%E6%A4%9C%E7%9F%A5%EF%BC%88EC2%E2%86%92CloudWatch%E2%86%92EventBridge%EF%BC%89\"><\/span><strong>\u2460\u30d7\u30ed\u30bb\u30b9\u76e3\u8996\u3068\u30a2\u30e9\u30fc\u30e0\u691c\u77e5\uff08EC2\u2192CloudWatch\u2192EventBridge\uff09<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>EC2\u4e0a\u306eCloudWatch Agent\u304cprocstat_lookup_pid_count\u3092\u53ce\u96c6\u3057\u3001httpd\u306e\u30d7\u30ed\u30bb\u30b9\u6570\u3092\u76e3\u8996\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li>httpd\u30d7\u30ed\u30bb\u30b9\u6570\u304c0\uff08\u505c\u6b62\uff09\u306b\u306a\u308b\u3068\u3001CloudWatch Alarm\uff08HttpdDownAlarm\uff09\u304cALARM\u72b6\u614b\u3078\u9077\u79fb\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li>ALARM\u72b6\u614b\u3078\u306e\u9077\u79fb\u3092\u30c8\u30ea\u30ac\u30fc\u3068\u3057\u3066\u3001EventBridge\u30eb\u30fc\u30eb\u304c\u81ea\u52d5\u30ea\u30ab\u30d0\u30ea\u7528Lambda\u95a2\u6570\uff08httpd-auto-recovery-multi\uff09\u3092\u8d77\u52d5\u3057\u307e\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E2%91%A1%E8%B2%A0%E8%8D%B7%E4%BF%9D%E8%AD%B7%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E5%AE%89%E5%85%A8%E8%A8%BA%E6%96%AD%EF%BC%88Lambda%E2%86%92CloudWatch_Metrics%EF%BC%89\"><\/span><strong>\u2461\u8ca0\u8377\u4fdd\u8b77\u306e\u305f\u3081\u306e\u5b89\u5168\u8a3a\u65ad\uff08Lambda<\/strong>\u2192<strong>CloudWatch Metrics\uff09<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Lambda\u95a2\u6570\u306f\u30ea\u30ab\u30d0\u30ea\u51e6\u7406\u3092\u958b\u59cb\u3059\u308b\u524d\u306b\u3001\u5bfe\u8c61\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u30ea\u30bd\u30fc\u30b9\u72b6\u614b\u3092CloudWatch\u304b\u3089\u53d6\u5f97\u30fb\u691c\u8a3c\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u30e1\u30e2\u30ea\u4f7f\u7528\u7387\uff08<\/strong><strong>mem_used_percent<\/strong><strong>\uff09<\/strong>\uff1a80.0%\u8d85<\/li>\n\n\n\n<li><strong>CPU<\/strong><strong>\u4f7f\u7528\u7387\uff08<\/strong><strong>cpu_usage_active<\/strong><strong>\uff09<\/strong>\uff1a80.0%\u8d85<\/li>\n\n\n\n<li><strong>\u30ed\u30fc\u30c9\u30a2\u30d9\u30ec\u30fc\u30b8\uff08<\/strong><strong>load1<\/strong><strong>\uff09<\/strong>\uff1a5.0\u8d85<\/li>\n<\/ul>\n\n\n\n<p><strong>\u3010\u5b89\u5168\u5236\u5fa1\u30ed\u30b8\u30c3\u30af\u3011<\/strong>\u4e0a\u8a183\u3064\u306e\u3046\u3061<strong>\u3044\u305a\u308c\u304b1\u3064\u3067\u3082<\/strong>\u95be\u5024\u3092\u8d85\u3048\u3066\u3044\u308b\u5834\u5408\u3001\u904e\u8ca0\u8377\u3084\u30ea\u30bd\u30fc\u30b9\u67af\u6e07\u306b\u3088\u308b\u30d7\u30ed\u30bb\u30b9\u505c\u6b62\u3068\u5224\u65ad\u3057\u307e\u3059\u3002\u3053\u306e\u72b6\u614b\u3067\u518d\u8d77\u52d5\u3092\u884c\u3046\u3068\u7121\u9650\u30eb\u30fc\u30d7\u3084\u3055\u3089\u306a\u308b\u8ca0\u8377\u5897\u5927\u3092\u5f15\u304d\u8d77\u3053\u3059\u304a\u305d\u308c\u304c\u3042\u308b\u305f\u3081\u3001\u81ea\u52d5\u518d\u8d77\u52d5\u3092\u30b9\u30ad\u30c3\u30d7\uff08SKIPPED\uff09\u3057\u3066\u7ba1\u7406\u8005\u306b\u30a2\u30e9\u30fc\u30c8\u3092\u901a\u77e5\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E2%91%A2%E3%83%AD%E3%82%B0%E5%8F%96%E5%BE%97%E3%81%A8AI%E8%A8%BA%E6%96%AD%EF%BC%88Lambda%E2%86%92SSM%E2%86%92Bedrock%EF%BC%89\"><\/span><strong>\u2462\u30ed\u30b0\u53d6\u5f97\u3068AI\u8a3a\u65ad\uff08Lambda\u2192SSM\u2192Bedrock\uff09<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>\u30ea\u30bd\u30fc\u30b9\u72b6\u614b\u304c\u5b89\u5168\u57fa\u6e96\u3092\u6e80\u305f\u3057\u3066\u3044\u308b\u5834\u5408\u3001\u4ee5\u4e0b\u306e\u30ed\u30b8\u30c3\u30af\u3067AI\u8a3a\u65ad\u3078\u9032\u307f\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ed\u30b0\u53d6\u5f97<\/strong>\uff1aSSM Run Command\u7d4c\u7531\u3067\u3001EC2\u4e0a\u306e\/var\/log\/httpd\/error_log\u306e\u76f4\u8fd1\u306e\u30ed\u30b0\u304a\u3088\u3073systemctl status httpd\u306e\u51fa\u529b\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>Bedrock<\/strong><strong>\u89e3\u6790<\/strong>\uff1a\u53d6\u5f97\u3057\u305f\u30ed\u30b0\u3092Amazon Bedrock\uff08Nova Micro\u306a\u3069\uff09\u306b\u9001\u4fe1\u3057\u3001\u30d7\u30ed\u30bb\u30b9\u306e\u518d\u8d77\u52d5\u3067\u5fa9\u65e7\u53ef\u80fd\u304b\u3069\u3046\u304b\u3092\u89e3\u6790\u3055\u305b\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u5224\u5b9a<\/strong>\uff1aBedrock\u304b\u3089should_restart: true\u306eJSON\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u53d7\u3051\u53d6\u3063\u305f\u5834\u5408\u306e\u307f\u3001\u6b21\u306e\u5fa9\u65e7\u30a2\u30af\u30b7\u30e7\u30f3\u3078\u9077\u79fb\u3057\u307e\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E2%91%A3%E8%87%AA%E5%8B%95%E5%86%8D%E8%B5%B7%E5%8B%95%E3%81%AE%E5%AE%9F%E8%A1%8C%EF%BC%88Lambda%E2%86%92SSM%E2%86%92EC2%EF%BC%89\"><\/span><strong>\u2463\u81ea\u52d5\u518d\u8d77\u52d5\u306e\u5b9f\u884c\uff08Lambda\u2192SSM\u2192EC2\uff09<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>AI\u306e\u63a8\u5968\u7d50\u679c\u306b\u57fa\u3065\u304d\u3001Lambda\u306fSSM Run Command\u3092\u4f7f\u7528\u3057\u3066\u5bfe\u8c61\u306eEC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u4e0a\u3067\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>Bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl restart httpd<\/code><\/pre>\n\n\n\n<p>\u518d\u8d77\u52d5\u304c\u5b8c\u4e86\u3059\u308b\u3068\u3001CloudWatch Alarm\u304c\u6b63\u5e38\u72b6\u614b\uff08OK\uff09\u3078\u5fa9\u5e30\u3057\u3001\u4e00\u9023\u306e\u81ea\u52d5\u5fa9\u65e7\u30d5\u30ed\u30fc\u304c\u5b8c\u4e86\u3057\u307e\u3059\u3002<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E6%A7%8B%E7%AF%89%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AAAWS_IAM%E6%A8%A9%E9%99%90%EF%BC%88IAM%E3%83%AD%E3%83%BC%E3%83%AB%E3%83%BB%E3%83%9D%E3%83%AA%E3%82%B7%E3%83%BC%EF%BC%89\"><\/span><strong>\u69cb\u7bc9\u306b\u5fc5\u8981\u306aAWS IAM\u6a29\u9650\uff08IAM\u30ed\u30fc\u30eb\u30fb\u30dd\u30ea\u30b7\u30fc\uff09<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>\u3053\u306e\u30b7\u30b9\u30c6\u30e0\u3092\u6b63\u5e38\u304b\u3064\u5b89\u5168\u306b\u52d5\u4f5c\u3055\u305b\u308b\u305f\u3081\u306b\u3001\u5404\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306b\u9069\u5207\u306a\u6a29\u9650\u3092\u4ed8\u4e0e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u6700\u5c0f\u6a29\u9650\u539f\u5247\uff08Least Privilege\uff09\u306b\u57fa\u3065\u3044\u3066\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"EC2%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E7%94%A8IAM%E3%83%AD%E3%83%BC%E3%83%AB%EF%BC%88Instance_Profile%EF%BC%89\"><\/span><strong>EC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u7528IAM\u30ed\u30fc\u30eb\uff08Instance Profile\uff09<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>EC2\u304cCloudWatch Agent\u3092\u52d5\u304b\u3057\u3001SSM\u304b\u3089\u306e\u5236\u5fa1\u3092\u53d7\u3051\u308b\u305f\u3081\u306b\u4ed8\u4e0e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u30de\u30cd\u30fc\u30b8\u30c9\u30dd\u30ea\u30b7\u30fc\uff1a<\/strong><ul><li>AmazonSSMManagedInstanceCore\uff08SSM\u304b\u3089\u306e\u30b3\u30de\u30f3\u30c9\u5b9f\u884c\u3084\u30ed\u30b0\u53d6\u5f97\u306b\u5fc5\u8981\uff09<\/li><\/ul>\n<ul class=\"wp-block-list\">\n<li>CloudWatchAgentServerPolicy\uff08\u30d7\u30ed\u30bb\u30b9\u6570\u3084\u30e1\u30e2\u30ea\u306a\u3069\u306e\u30e1\u30c8\u30ea\u30af\u30b9\u9001\u4fe1\u306b\u5fc5\u8981\uff09<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E3%83%AA%E3%82%AB%E3%83%90%E3%83%AA%E7%94%A8Lambda%E9%96%A2%E6%95%B0%E3%81%AEIAM%E3%83%AD%E3%83%BC%E3%83%AB\"><\/span><strong>\u30ea\u30ab\u30d0\u30ea\u7528Lambda\u95a2\u6570\u306eIAM\u30ed\u30fc\u30eb<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Lambda\u304cCloudWatch\u306e\u30e1\u30c8\u30ea\u30af\u30b9\u3092\u53d6\u5f97\u3057\u3001SSM\u7d4c\u7531\u3067EC2\u3092\u64cd\u4f5c\u3057\u3066Bedrock\u3067AI\u8a3a\u65ad\u3092\u884c\u3046\u305f\u3081\u306e\u6a29\u9650\u3067\u3059\u3002Bedrock\u547c\u3073\u51fa\u3057\u6a29\u9650\u306b\u306f\u3001\u901a\u5e38\u306e\u57fa\u76e4\u30e2\u30c7\u30eb\uff08foundation-model\uff09\u306b\u52a0\u3048\u3066\u3001\u30ea\u30fc\u30b8\u30e7\u30f3\u63a8\u8ad6\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\uff08inference-profile\uff08\u4f8b\uff1aapac.amazon.nova-micro-v1:0\uff09\uff09\u306e\u30ea\u30bd\u30fc\u30b9\u6307\u5b9a\u3082\u542b\u3081\u3066\u53b3\u683c\u5316\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u57fa\u672c\u6a29\u9650\uff08CloudWatch Logs\u767a\u884c\uff09\uff1a<\/strong>\n<ul class=\"wp-block-list\">\n<li>AWSLambdaBasicExecutionRole\uff08\u30de\u30cd\u30fc\u30b8\u30c9\u30dd\u30ea\u30b7\u30fc\uff09<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u30a4\u30f3\u30e9\u30a4\u30f3\u30dd\u30ea\u30b7\u30fc\u5b9a\u7fa9\u4f8b\uff1a<\/strong><\/li>\n<\/ul>\n\n\n\n<p>JSON<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n\u00a0 \"Version\": \"2012-10-17\",\n\u00a0 \"Statement\": &#91;\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0 \"Sidebar\": \"CloudWatch \u30e1\u30c8\u30ea\u30af\u30b9\u53d6\u5f97\u6a29\u9650\",\n\u00a0\u00a0\u00a0\u00a0\u00a0 \"Effect\": \"Allow\",\n\u00a0\u00a0\u00a0\u00a0\u00a0 \"Action\": &#91;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"cloudwatch:GetMetricStatistics\",\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"cloudwatch:GetMetricData\"\n\u00a0\u00a0\u00a0\u00a0\u00a0 ],\n\u00a0\u00a0\u00a0\u00a0\u00a0 \"Resource\": \"*\"\n\u00a0\u00a0\u00a0 },\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0 \"Sidebar\": \"SSM Run Command \u306b\u3088\u308b\u30b3\u30de\u30f3\u30c9\u5b9f\u884c\u30fb\u7d50\u679c\u53d6\u5f97\",\n\u00a0\u00a0\u00a0\u00a0\u00a0 \"Effect\": \"Allow\",\n\u00a0\u00a0\u00a0\u00a0\u00a0 \"Action\": &#91;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"ssm:SendCommand\",\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"ssm:GetCommandInvocation\"\n\u00a0\u00a0\u00a0\u00a0\u00a0 ],\n\u00a0\u00a0\u00a0\u00a0\u00a0 \"Resource\": &#91;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"arn:aws:ssm:*:*:document\/AWS-RunShellScript\",\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"arn:aws:ec2:*:*:instance\/*\"\n\u00a0\u00a0\u00a0\u00a0\u00a0 ]\n\u00a0\u00a0\u00a0 },\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0 \"Sidebar\": \"Amazon Bedrock \u30e2\u30c7\u30eb\u547c\u3073\u51fa\u3057\u6a29\u9650\uff08\u57fa\u76e4\u30e2\u30c7\u30eb\u304a\u3088\u3073\u63a8\u8ad6\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\uff09\",\n\u00a0\u00a0\u00a0\u00a0\u00a0 \"Effect\": \"Allow\",\n\u00a0\u00a0\u00a0\u00a0\u00a0 \"Action\": &#91;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"bedrock:InvokeModel\"\n\u00a0\u00a0\u00a0\u00a0\u00a0 ],\n\u00a0\u00a0\u00a0\u00a0\u00a0 \"Resource\": &#91;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"arn:aws:bedrock:*:*:foundation-model\/*\",\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"arn:aws:bedrock:*:*:inference-profile\/*\"\n\u00a0\u00a0\u00a0\u00a0\u00a0 ]\n\u00a0\u00a0\u00a0 }\n\u00a0 ]\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"EventBridge%E3%83%AB%E3%83%BC%E3%83%AB%E3%81%AE%E6%A8%A9%E9%99%90\"><\/span><strong>EventBridge\u30eb\u30fc\u30eb\u306e\u6a29\u9650<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>EventBridge\u304cCloudWatch Alarm\u767a\u751f\u6642\u306bLambda\u95a2\u6570\u3092\u547c\u3073\u51fa\u3059\u305f\u3081\u306e\u30ea\u30bd\u30fc\u30b9\u30d9\u30fc\u30b9\u30dd\u30ea\u30b7\u30fc\uff08Lambda\u5074\u306e\u30a2\u30af\u30bb\u30b9\u8a31\u53ef\uff09\u3067\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Lambda<\/strong><strong>\u5074\u30ea\u30bd\u30fc\u30b9\u30dd\u30ea\u30b7\u30fc\u8a2d\u5b9a<\/strong>\uff1alambda:InvokeFunction\u306e\u5b9f\u884c\u6a29\u9650\u3092\u3001\u5bfe\u8c61\u306e EventBridge\u30eb\u30fc\u30ebARN\u304b\u3089\u306e\u547c\u3073\u51fa\u3057\u306b\u5bfe\u3057\u3066\u8a31\u53ef\u3057\u307e\u3059\u3002<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"CloudFormation%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%81%A8%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4%E6%89%8B%E9%A0%86\"><\/span><strong>CloudFormation\u30b5\u30f3\u30d7\u30eb\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3068\u30c7\u30d7\u30ed\u30a4\u624b\u9806<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>\u672c\u69cb\u6210\uff08IAM\u30ed\u30fc\u30eb\u3001Lambda \u95a2\u6570\u3001CloudWatch Alarm\u3001EventBridge \u30eb\u30fc\u30eb\u3001\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u8a2d\u5b9a\uff09\u306e\u30b9\u30bf\u30c3\u30af\u3092\u4e00\u62ec\u3067\u69cb\u7bc9\u3067\u304d\u308bCloudFormation\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u30b5\u30f3\u30d7\u30eb\u3067\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%81%AE%E7%89%B9%E5%BE%B4%E3%83%BB%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88\"><\/span><strong>\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u7279\u5fb4\u30fb\u30dd\u30a4\u30f3\u30c8<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u30de\u30eb\u30c1\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5bfe\u5fdc<\/strong>\uff1a\u30d1\u30e9\u30e1\u30fc\u30bfTargetInstanceIds\u3067\u30ab\u30f3\u30de\u533a\u5207\u308a\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9ID\u30ea\u30b9\u30c8\u3092\u53d7\u3051\u53d6\u308a\u3001Lambda\u5074\u3067\u30eb\u30fc\u30d7\u51e6\u7406\u3092\u884c\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u5b89\u5168\u5236\u5fa1\u30ed\u30b8\u30c3\u30af\u306e\u5185\u8535<\/strong>\uff1aPython\u30b3\u30fc\u30c9\u5185\u3067check_metric_threshold\u95a2\u6570\u3092\u5b9f\u88c5\u3057\u30011\u5206\u30fb3\u5206\u30fb5\u5206\u306e\u5404\u5e73\u5747\u5024\u3067CPU\/\u30e1\u30e2\u30ea80%\u3001\u30ed\u30fc\u30c9\u30a2\u30d9\u30ec\u30fc\u30b8 5.0\u3092\u8d85\u3048\u3066\u3044\u308b\u304b\u8a3a\u65ad\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>Amazon Bedrock <\/strong><strong>\uff08Nova Micro<\/strong>\uff09<strong>\u9023\u643a<\/strong>\uff1a\u8efd\u91cf\u30fb\u9ad8\u901f\u306aapac.amazon.nova-micro-v1:0\u3092\u30c7\u30d5\u30a9\u30eb\u30c8\u30e2\u30c7\u30eb\u3068\u3057\u3066\u6307\u5b9a\u3057\u3001\u53b3\u683c\u306aJSON\u51fa\u529b\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u8981\u6c42\u3057\u3066\u5224\u5b9a\u7cbe\u5ea6\u3092\u9ad8\u3081\u3066\u3044\u307e\u3059\u3002IAM\u30ed\u30fc\u30eb\u5b9a\u7fa9\u3067\u3082foundation-model\u3068inference-profile\u306e\u53cc\u65b9\u3092\u6700\u5c0f\u9650\u306e\u7bc4\u56f2\u3067\u8a31\u53ef\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%B3%E3%83%BC%E3%83%89%EF%BC%88templateyaml%EF%BC%89\"><\/span><strong>\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30b3\u30fc\u30c9\uff08template.yaml\uff09<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>YAML<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>AWSTemplateFormatVersion: '2010-09-09'\nDescription: Fast-detection auto-recovery for EC2 instances using CloudWatch Alarm, Bedrock Nova Micro, and SSM.\n\nParameters:\n\u00a0 TargetInstanceIds:\n\u00a0\u00a0\u00a0 Type: CommaDelimitedList\n\u00a0\u00a0\u00a0 Default: \"XXX\"\n\u00a0\u00a0\u00a0 Description: Comma-separated EC2 Instance IDs to monitor (e.g. XXX or i-xxxxxx).\n\u00a0 ModelId:\n\u00a0\u00a0\u00a0 Type: String\n\u00a0\u00a0\u00a0 Default: apac.amazon.nova-micro-v1:0\n\u00a0\u00a0\u00a0 Description: Bedrock Model ID to use for diagnosis.\n\u00a0 EvaluationPeriodSeconds:\n\u00a0\u00a0\u00a0 Type: Number\n\u00a0\u00a0\u00a0 Default: 60\n\u00a0\u00a0\u00a0 AllowedValues: &#91;10, 30, 60]\n\u00a0\u00a0\u00a0 Description: Evaluation period in seconds for the CloudWatch Alarm (10, 30, or 60).\n\nResources:\n\u00a0 LambdaRole:\n\u00a0\u00a0\u00a0 Type: AWS::IAM::Role\n\u00a0\u00a0\u00a0 Properties:\n\u00a0\u00a0\u00a0\u00a0\u00a0 AssumeRolePolicyDocument:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Version: '2012-10-17'\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Statement:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 - Effect: Allow\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Principal:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Service: lambda.amazonaws.com\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Action: sts:AssumeRole\n\u00a0\u00a0\u00a0\u00a0\u00a0 ManagedPolicyArns:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 - arn:aws:iam::aws:policy\/AmazonSSMFullAccess\n\u00a0\u00a0\u00a0\u00a0\u00a0 Policies:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 - PolicyName: AutoRecoveryPolicy\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PolicyDocument:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Version: '2012-10-17'\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Statement:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 - Effect: Allow\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Action:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 - logs:CreateLogGroup\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 - logs:CreateLogStream\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 - logs:PutLogEvents\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 - cloudwatch:GetMetricStatistics\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Resource: \"*\"\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 - Effect: Allow\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Action: ec2:DescribeInstances\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Resource: \"*\"\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 - Effect: Allow\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Action: bedrock:InvokeModel\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Resource:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 - \"arn:aws:bedrock:*:*:foundation-model\/*\"\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 - \"arn:aws:bedrock:*:*:inference-profile\/*\"\n\n\u00a0 LambdaLogGroup:\n\u00a0\u00a0\u00a0 Type: AWS::Logs::LogGroup\n\u00a0\u00a0\u00a0 Properties:\n\u00a0\u00a0\u00a0\u00a0\u00a0 LogGroupName: \/aws\/lambda\/httpd-auto-recovery-multi\n\u00a0\u00a0\u00a0\u00a0\u00a0 RetentionInDays: 7\n\n\u00a0 RecoveryFunction:\n\u00a0\u00a0\u00a0 Type: AWS::Lambda::Function\n\u00a0\u00a0\u00a0 DependsOn: LambdaLogGroup\n\u00a0\u00a0\u00a0 Properties:\n\u00a0\u00a0\u00a0\u00a0\u00a0 FunctionName: httpd-auto-recovery-multi\n\u00a0\u00a0\u00a0\u00a0\u00a0 Runtime: python3.12\n\u00a0\u00a0\u00a0\u00a0\u00a0 Handler: index.lambda_handler\n\u00a0\u00a0\u00a0\u00a0\u00a0 Role: !GetAtt LambdaRole.Arn\n\u00a0\u00a0\u00a0\u00a0\u00a0 Timeout: 120\n\u00a0\u00a0\u00a0\u00a0\u00a0 Environment:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Variables:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 INSTANCE_IDS: !Join &#91;\",\", !Ref TargetInstanceIds]\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 MODEL_ID: !Ref ModelId\n\u00a0\u00a0\u00a0\u00a0\u00a0 Code:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ZipFile: |\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 import json\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 import os\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 import time\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 import boto3\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 from datetime import datetime, timedelta\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ec2 = boto3.client('ec2')\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 cloudwatch = boto3.client('cloudwatch')\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ssm = boto3.client('ssm')\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 bedrock = boto3.client('bedrock-runtime')\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 MODEL_ID = os.environ.get('MODEL_ID', 'apac.amazon.nova-micro-v1:0')\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 def get_instance_state(instance_id):\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 try:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 res = ec2.describe_instances(InstanceIds=&#91;instance_id])\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 state = res&#91;'Reservations']&#91;0]&#91;'Instances']&#91;0]&#91;'State']&#91;'Name']\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return state\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 except Exception as e:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 print(f\"&#91;{instance_id}] Error describing instance state: {e}\")\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return \"unknown\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 def check_metric_threshold(instance_id, namespace, metric_name, threshold, comparison='gt'):\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 now = datetime.utcnow()\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 periods = &#91;1, 3, 5]\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 dimensions = &#91;{'Name': 'InstanceId', 'Value': instance_id}]\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 for minutes in periods:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 response = cloudwatch.get_metric_statistics(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Namespace=namespace,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 MetricName=metric_name,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Dimensions=dimensions,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 StartTime=now - timedelta(minutes=minutes),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 EndTime=now,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Period=minutes * 60,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Statistics=&#91;'Average']\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 )\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 datapoints = response.get('Datapoints', &#91;])\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if datapoints:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 avg_val = datapoints&#91;0]&#91;'Average']\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 print(f\"&#91;{instance_id}] &#91;{metric_name}] Average for last {minutes} min: {avg_val:.2f}\")\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if comparison == 'gt' and avg_val > threshold:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 print(f\"&#91;{instance_id}] Safety Check NG: {metric_name} last {minutes} min average ({avg_val:.2f}) exceeds threshold ({threshold})\")\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return False\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 else:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 print(f\"&#91;{instance_id}] &#91;{metric_name}] No datapoints for last {minutes} min\")\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return True\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 def run_ssm_command(instance_id, commands):\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 res = ssm.send_command(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 InstanceIds=&#91;instance_id],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DocumentName=\"AWS-RunShellScript\",\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Parameters={'commands': commands}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 )\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 cmd_id = res&#91;'Command']&#91;'CommandId']\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 time.sleep(3)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 inv_res = ssm.get_command_invocation(CommandId=cmd_id, InstanceId=instance_id)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return inv_res.get('StandardOutputContent', '')\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 def process_instance(instance_id):\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 print(f\"--- Processing Instance: {instance_id} ---\")\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 instance_state = get_instance_state(instance_id)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 print(f\"&#91;{instance_id}] Current Instance State: {instance_state}\")\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if instance_state != 'running':\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 reason = f\"Skipped auto-recovery because the instance status is '{instance_state}' (not running).\"\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 print(f\"&#91;{instance_id}] {reason}\")\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return {\"instance_id\": instance_id, \"status\": \"SKIPPED\", \"reason\": reason}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 is_memory_safe = check_metric_threshold(instance_id, 'CWAgent', 'mem_used_percent', threshold=80.0)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 is_cpu_safe = check_metric_threshold(instance_id, 'CWAgent', 'cpu_usage_active', threshold=80.0)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 is_load_safe = check_metric_threshold(instance_id, 'CWAgent', 'load1', threshold=5.0)\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if not is_memory_safe or not is_cpu_safe or not is_load_safe:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 reason = \"Skipped auto-recovery because Memory\/CPU exceeded 80% or Load Average exceeded 5.0.\"\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 print(f\"&#91;{instance_id}] {reason}\")\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return {\"instance_id\": instance_id, \"status\": \"SKIPPED\", \"reason\": reason}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 print(f\"&#91;{instance_id}] Resource check passed. Fetching logs and starting Bedrock diagnosis.\")\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 raw_output = run_ssm_command(instance_id, &#91;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"echo '=== SYSTEMD STATUS ==='\",\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"systemctl status httpd\",\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"echo '=== HTTPD ERROR LOG ==='\",\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"tail -n 30 \/var\/log\/httpd\/error_log 2>\/dev\/null || echo 'No error log found'\"\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ])\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 prompt = f\"\"\"\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 The following is the status and error log of a web server (httpd).\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Analyze the status and determine if the httpd process should be restarted.\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &#91;Target Instance]\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {instance_id}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &#91;Fetched Log Data]\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {raw_output}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &#91;Rules for Judgment]\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1. If httpd status is 'inactive (dead)', 'failed', or NOT running, you MUST set \"should_restart\" to true so it can be recovered.\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 2. ONLY set \"should_restart\" to false if httpd is currently 'active (running)'.\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &#91;Output Format]\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Return ONLY valid JSON with no markdown and no explanation outside JSON:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"should_restart\": true or false,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"reason\": \"Specific reason for the decision in 1 sentence.\"\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"\"\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 body = json.dumps({\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"messages\": &#91;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"role\": \"user\",\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"content\": &#91;{\"text\": prompt}]\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"inferenceConfig\": {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"maxTokens\": 300\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 })\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 response = bedrock.invoke_model(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 modelId=MODEL_ID,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 contentType=\"application\/json\",\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 accept=\"application\/json\",\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 body=body\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 )\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 res_payload = json.loads(response&#91;'body'].read())\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ai_output_str = res_payload&#91;'output']&#91;'message']&#91;'content']&#91;0]&#91;'text'].strip()\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 try:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 result = json.loads(ai_output_str)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 except Exception:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 result = {\"should_restart\": False, \"reason\": \"Failed to parse AI output.\"}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 print(f\"&#91;{instance_id}] &#91;AI Diagnosis Result] {json.dumps(result)}\")\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if result.get(\"should_restart\") is True:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 print(f\"&#91;{instance_id}] Restarting httpd based on safe resource level and AI diagnosis.\")\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 run_ssm_command(instance_id, &#91;\"sudo systemctl restart httpd\"])\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return {\"instance_id\": instance_id, \"status\": \"RESTARTED\", \"reason\": result.get(\"reason\")}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 else:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 print(f\"&#91;{instance_id}] Skipping restart based on AI decision.\")\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return {\"instance_id\": instance_id, \"status\": \"SKIPPED\", \"reason\": result.get(\"reason\")}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 def lambda_handler(event, context):\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 target_instances = &#91;]\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 try:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 dimensions = event&#91;'detail']&#91;'configuration']&#91;'metrics']&#91;0]&#91;'metricStat']&#91;'metric']&#91;'dimensions']\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 for dim in dimensions:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if dim&#91;'name'] == 'InstanceId':\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 target_instances.append(dim&#91;'value'])\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 except Exception:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 pass\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if not target_instances:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 raw_ids = os.environ.get('INSTANCE_IDS', '')\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 target_instances = &#91;i.strip() for i in raw_ids.split(',') if i.strip()]\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 print(f\"Target Instances to process: {target_instances}\")\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 results = &#91;]\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 for instance_id in target_instances:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 res = process_instance(instance_id)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 results.append(res)\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return {\"results\": results}\n\n\u00a0 HttpdDownAlarm:\n\u00a0\u00a0\u00a0 Type: AWS::CloudWatch::Alarm\n\u00a0\u00a0\u00a0 Properties:\n\u00a0\u00a0\u00a0\u00a0\u00a0 AlarmName: \"httpd-Down-MultiInstance\"\n\u00a0\u00a0\u00a0\u00a0\u00a0 MetricName: \"procstat_lookup_pid_count\"\n\u00a0\u00a0\u00a0\u00a0\u00a0 Namespace: \"CWAgent\"\n\u00a0\u00a0\u00a0\u00a0\u00a0 Statistic: \"Average\"\n\u00a0\u00a0\u00a0\u00a0\u00a0 Period: !Ref EvaluationPeriodSeconds\n\u00a0\u00a0\u00a0\u00a0\u00a0 EvaluationPeriods: 1\n\u00a0\u00a0\u00a0\u00a0\u00a0 DatapointsToAlarm: 1\n\u00a0\u00a0\u00a0\u00a0\u00a0 Threshold: 1.0\n\u00a0\u00a0\u00a0\u00a0\u00a0 ComparisonOperator: \"LessThanThreshold\"\n\u00a0\u00a0\u00a0\u00a0\u00a0 TreatMissingData: \"breaching\"\n\u00a0\u00a0\u00a0\u00a0\u00a0 Dimensions:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 - Name: \"InstanceId\"\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Value: !Select &#91;0, !Ref TargetInstanceIds]\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 - Name: \"pattern\"\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Value: \"httpd\"\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 - Name: \"pid_finder\"\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Value: \"native\"\n\u00a0\u00a0\u00a0\u00a0\u00a0 AlarmActions:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 - !GetAtt RecoveryFunction.Arn\n\n\u00a0 AlarmRule:\n\u00a0\u00a0\u00a0 Type: AWS::Events::Rule\n\u00a0\u00a0\u00a0 Properties:\n\u00a0\u00a0\u00a0\u00a0\u00a0 Name: \"Trigger-Recovery-MultiInstance\"\n\u00a0\u00a0\u00a0\u00a0\u00a0 EventPattern:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 source:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 - \"aws.cloudwatch\"\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 detail-type:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 - \"CloudWatch Alarm State Change\"\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 detail:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 state:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 value:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 - \"ALARM\"\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 alarmName:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 - \"httpd-Down-MultiInstance\"\n\u00a0\u00a0\u00a0\u00a0\u00a0 Targets:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 - Id: TargetLambda\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Arn: !GetAtt RecoveryFunction.Arn\n\n\u00a0 LambdaPermissionForEvents:\n\u00a0\u00a0\u00a0 Type: AWS::Lambda::Permission\n\u00a0\u00a0\u00a0 Properties:\n\u00a0\u00a0\u00a0\u00a0\u00a0 FunctionName: !Ref RecoveryFunction\n\u00a0\u00a0\u00a0\u00a0\u00a0 Action: lambda:InvokeFunction\n\u00a0\u00a0\u00a0\u00a0\u00a0 Principal: events.amazonaws.com\n\u00a0\u00a0\u00a0\u00a0\u00a0 SourceArn: !GetAtt AlarmRule.Arn\n\n\u00a0 LambdaPermissionForAlarm:\n\u00a0\u00a0\u00a0 Type: AWS::Lambda::Permission\n\u00a0\u00a0\u00a0 Properties:\n\u00a0\u00a0\u00a0\u00a0\u00a0 FunctionName: !Ref RecoveryFunction\n\u00a0\u00a0\u00a0\u00a0\u00a0 Action: lambda:InvokeFunction\n\u00a0\u00a0\u00a0\u00a0\u00a0 Principal: cloudwatch.amazonaws.com\n\u00a0\u00a0\u00a0\u00a0\u00a0 SourceArn: !GetAtt HttpdDownAlarm.Arn<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E4%BE%8B%EF%BC%88PowerShellWindows%E7%92%B0%E5%A2%83%EF%BC%89\"><\/span><strong>\u30c7\u30d7\u30ed\u30a4\u30b3\u30de\u30f3\u30c9\u4f8b\uff08PowerShell\/Windows\u74b0\u5883\uff09<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>\u4f5c\u6210\u3057\u305ftemplate.yaml\u3092\u4f7f\u7528\u3057\u3066\u3001AWS CLI\uff08PowerShell\uff09\u304b\u3089\u30b9\u30bf\u30c3\u30af\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u30b3\u30de\u30f3\u30c9\u4f8b\u3067\u3059\u3002\u30d1\u30e9\u30e1\u30fc\u30bfTargetInstanceIds\u306b\u5bfe\u8c61\u306eEC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9ID\uff08\u4f8b\uff1aXXX\uff09\u3092\u6307\u5b9a\u3057\u3066\u5b9f\u884c\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>PowerShell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>aws cloudformation deploy `\n\u00a0 --template-file .\/template.yaml `\n\u00a0 --stack-name ai-lambda `\n\u00a0 --parameter-overrides TargetInstanceIds=\"XXX\" ModelId=\"apac.amazon.nova-micro-v1:0\" `\n\u00a0 --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>&#8211;template-file<\/strong>\uff1a\u4f5c\u6210\u3057\u305fCloudFormation\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u306e\u30d1\u30b9\uff08.\/template.yaml\uff09\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>&#8211;parameter-overrides<\/strong>\uff1a\u76e3\u8996\u5bfe\u8c61\u306eEC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9 ID\uff08TargetInstanceIds=&#8221;XXX&#8221;\uff09\u304a\u3088\u3073\u5229\u7528\u3059\u308bBedrock\u30e2\u30c7\u30ebID\uff08ModelId=&#8221;apac.amazon.nova-micro-v1:0&#8243;\uff09\u3092\u4e0a\u66f8\u304d\u6307\u5b9a\u3057\u307e\u3059\u3002\u8907\u6570\u6307\u5b9a\u3059\u308b\u5834\u5408\u306f&#8221;XXX,YYY&#8221;\u306e\u3088\u3046\u306b\u30ab\u30f3\u30de\u533a\u5207\u308a\u3067\u6307\u5b9a\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>&#8211;capabilities<\/strong>\uff1aIAM\u30ed\u30fc\u30eb\u3092\u81ea\u52d5\u751f\u6210\u3059\u308b\u305f\u3081\u3001CAPABILITY_IAM\u304a\u3088\u3073CAPABILITY_NAMED_IAM\u306e\u4ed8\u4e0e\u304c\u5fc5\u8981\u3067\u3059\u3002<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E5%8F%82%E8%80%83%EF%BC%9AAmazon_Bedrock%E3%81%AE%E4%B8%BB%E8%A6%81%E3%81%AAModel_ID%E4%B8%80%E8%A6%A7%E3%81%A8%E9%81%B8%E5%AE%9A%E7%90%86%E7%94%B1\"><\/span><strong>\u53c2\u8003\uff1aAmazon Bedrock\u306e\u4e3b\u8981\u306aModel ID\u4e00\u89a7\u3068\u9078\u5b9a\u7406\u7531<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>\u672c\u30b7\u30b9\u30c6\u30e0\u3067\u5229\u7528\u3067\u304d\u308b\u4e3b\u306aBedrock\u30e2\u30c7\u30eb\u306e\u9078\u629e\u80a2\u3067\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>\u30e2\u30c7\u30eb\u540d<\/strong><\/td><td><strong>Model ID<\/strong><\/td><td><strong>\u7279\u5fb4\u30fb\u63a8\u5968\u3055\u308c\u308b\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9<\/strong><\/td><\/tr><tr><td><strong>Amazon Nova Micro<\/strong><\/td><td>apac.amazon.nova-micro-v1:0<\/td><td><strong>\u30c6\u30ad\u30b9\u30c8\u5c02\u7528\u30fb\u9ad8\u901f\u30fb\u4f4e\u30b3\u30b9\u30c8<\/strong>\u3002\u30ed\u30b0\u306e\u4e00\u6b21\u8a3a\u65ad\u3084\u5224\u5b9a\u51e6\u7406\u306b\u9069\u3057\u3066\u3044\u308b\u3002\uff08\u203b\u672c\u69cb\u6210\u3067\u63a1\u7528\uff09<\/td><\/tr><tr><td><strong>Amazon Nova Lite<\/strong><\/td><td>apac.amazon.nova-lite-v1:0<\/td><td>\u8efd\u91cf\u304b\u3064\u30de\u30eb\u30c1\u30e2\u30fc\u30c0\u30eb\u5bfe\u5fdc\u3002\u30b3\u30b9\u30c8\u3092\u6291\u3048\u3064\u3064\u3084\u3084\u8907\u96d1\u306a\u63a8\u8ad6\u3092\u884c\u3044\u305f\u3044\u5834\u5408\u306b\u9069\u3057\u3066\u3044\u308b\u3002<\/td><\/tr><tr><td><strong>Amazon Nova Pro<\/strong><\/td><td>apac.amazon.nova-pro-v1:0<\/td><td>\u9ad8\u7cbe\u5ea6\u306a\u5206\u6790\u3068\u8907\u96d1\u306a\u6587\u8108\u7406\u89e3\u304c\u53ef\u80fd\u3002\u5927\u898f\u6a21\u306a\u30ed\u30b0\u5206\u6790\u3084\u8a73\u7d30\u306a\u539f\u56e0\u7279\u5b9a\u306b\u9069\u3057\u3066\u3044\u308b\u3002<\/td><\/tr><tr><td><strong>Anthropic Claude 3.5 Haiku<\/strong><\/td><td>apac.anthropic.claude-3-5-haiku-20241022-v1:0<\/td><td>\u8efd\u91cf\u30fb\u9ad8\u901f\u3067\u3001\u9ad8\u54c1\u8cea\u306a\u51fa\u529b\u304c\u671f\u5f85\u3067\u304d\u308b\u3002\u8907\u96d1\u306a\u30a8\u30e9\u30fc\u30ed\u30b0\u306e\u8aad\u307f\u53d6\u308a\u7cbe\u5ea6\u3092\u91cd\u8996\u3059\u308b\u5834\u5408\u306b\u9069\u3057\u3066\u3044\u308b\u3002<\/td><\/tr><tr><td><strong>Anthropic Claude 3.5 Sonnet<\/strong><\/td><td>apac.anthropic.claude-3-5-sonnet-20241022-v2:0<\/td><td>\u9ad8\u3044\u63a8\u8ad6\u80fd\u529b\u3002\u30b7\u30b9\u30c6\u30e0\u5168\u4f53\u306e\u76f8\u95a2\u5206\u6790\u306a\u3069\u9ad8\u5ea6\u306a\u30bf\u30b9\u30af\u306b\u9069\u3057\u3066\u3044\u308b\u3002<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><strong>\u3010<\/strong><strong>apac.amazon.nova-micro-v1:0<\/strong><strong>\uff08Nova Micro\uff09\u306e\u9078\u5b9a\u7d50\u679c\u30fb\u52b9\u679c\u3011<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5fdc\u7b54\u6642\u9593\u306e\u77ed\u3055\uff08\u4f4e\u30ec\u30a4\u30c6\u30f3\u30b7\uff09<\/strong>\uff1aAI \u306e\u30ec\u30b9\u30dd\u30f3\u30b9\u5f85\u3061\u6642\u9593\u3092<strong>1\u301c2\u79d2\u4ee5\u5185<\/strong>\u306b\u6291\u3048\u3001\u30ea\u30ab\u30d0\u30ea\u51e6\u7406\u5168\u4f53\u306e\u9045\u5ef6\u3092\u6291\u3048\u3089\u308c\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30b3\u30b9\u30c8\u306e\u4f4e\u3055<\/strong>\uff1a1,000\u5165\u529b\u30c8\u30fc\u30af\u30f3\u3042\u305f\u308a$0.000035\u7a0b\u5ea6\u3068\u975e\u5e38\u306b\u5b89\u4fa1\u306a\u305f\u3081\u3001\u5b9a\u671f\u7684\u306a\u76e3\u8996\u3084\u5927\u91cf\u30a2\u30e9\u30fc\u30c8\u304c\u767a\u751f\u3057\u3066\u3082\u30b3\u30b9\u30c8\u306e\u8ca0\u62c5\u3092\u6291\u3048\u3089\u308c\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>JSON<\/strong><strong>\u51fa\u529b\u306e\u5b89\u5b9a\u6027<\/strong>\uff1a\u69cb\u9020\u5316\u51fa\u529b\u306e\u6307\u793a\u306b\u5f93\u3044\u3084\u3059\u304f\u3001Lambda\u5074\u306e\u30b3\u30fc\u30c9\u3067\u5b89\u5168\u306b\u5224\u5b9a\u51e6\u7406\u304c\u884c\u3048\u307e\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E8%87%AA%E5%8B%95%E3%83%AA%E3%82%AB%E3%83%90%E3%83%AA%E6%A7%8B%E6%88%90%E3%81%AE%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88\"><\/span><strong>\u81ea\u52d5\u30ea\u30ab\u30d0\u30ea\u69cb\u6210\u306e\u30e1\u30ea\u30c3\u30c8<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u30c0\u30a6\u30f3\u30bf\u30a4\u30e0\u306e\u77ed\u7e2e<\/strong>\uff1a\u6df1\u591c\u3084\u4f11\u65e5\u3067\u3042\u3063\u3066\u3082\u3001\u969c\u5bb3\u767a\u751f\u304b\u3089\u6570\u5206\u4ee5\u5185\u306b\u81ea\u52d5\u3067Web\u30b5\u30fc\u30d0\u30fc\u304c\u5fa9\u65e7\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u4e8c\u6b21\u969c\u5bb3\u306e\u9632\u6b62<\/strong>\uff1a\u5358\u7d14\u306a\u81ea\u52d5\u518d\u8d77\u52d5\u3067\u306f\u306a\u304f\u3001CPU\/\u30e1\u30e2\u30ea\/\u30ed\u30fc\u30c9\u30a2\u30d9\u30ec\u30fc\u30b8\u306e\u95be\u5024\u30c1\u30a7\u30c3\u30af\u3092\u884c\u3046\u3053\u3068\u3067\u3001\u30b9\u30d1\u30a4\u30af\u6642\u3084\u904e\u8ca0\u8377\u6642\u306e\u4e0d\u8981\u306a\u518d\u8d77\u52d5\u306e\u9023\u9396\u3092\u9632\u304e\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>AI<\/strong><strong>\u306b\u3088\u308b\u9ad8\u5ea6\u306a\u5224\u65ad<\/strong>\uff1aAmazon Bedrock\u304c\u30ed\u30b0\u3092\u89e3\u6790\u3057\u3066\u539f\u56e0\u3092\u4e00\u6b21\u8a3a\u65ad\u3059\u308b\u305f\u3081\u3001\u30ed\u30b0\u89e3\u6790\u306e\u624b\u9593\u3092\u6e1b\u3089\u3057\u3001\u5b89\u5168\u6027\u306e\u9ad8\u3044\u5fa9\u65e7\u81ea\u52d5\u5316\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E8%A3%9C%E8%B6%B3%EF%BC%9A%E5%8B%95%E4%BD%9C%E6%A4%9C%E8%A8%BC%E3%83%BB%E9%81%8B%E7%94%A8%E7%A2%BA%E8%AA%8D%E3%81%AB%E4%BE%BF%E5%88%A9%E3%81%AAAWS_CLI%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89\"><\/span><strong>\u88dc\u8db3\uff1a\u52d5\u4f5c\u691c\u8a3c\u30fb\u904b\u7528\u78ba\u8a8d\u306b\u4fbf\u5229\u306aAWS CLI\u30b3\u30de\u30f3\u30c9<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>\u672c\u30b7\u30b9\u30c6\u30e0\u306e\u5c0e\u5165\u6642\u3084\u969c\u5bb3\u30c6\u30b9\u30c8\u6642\u306b\u306f\u3001\u30de\u30cd\u30b8\u30e1\u30f3\u30c8\u30b3\u30f3\u30bd\u30fc\u30eb\u3092\u958b\u304b\u305a\u306bAWS CLI\u304b\u3089\u72b6\u614b\u3092\u8fc5\u901f\u306b\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u6d3b\u7528\u3059\u308b\u3068\u52b9\u7387\u7684\u3067\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E7%9B%A3%E8%A6%96%E3%83%A1%E3%83%88%E3%83%AA%E3%82%AF%E3%82%B9%E3%81%AE%E6%8E%A8%E7%A7%BB%E7%A2%BA%E8%AA%8D\"><\/span><strong>\u30d7\u30ed\u30bb\u30b9\u76e3\u8996\u30e1\u30c8\u30ea\u30af\u30b9\u306e\u63a8\u79fb\u78ba\u8a8d<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>\u76f4\u8fd110\u5206\u9593\u306ehttpd\u30d7\u30ed\u30bb\u30b9\u6570\u306e\u63a8\u79fb\u3092\u3001\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u9806\u306e\u8868\u5f62\u5f0f\u3067\u51fa\u529b\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>Bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>aws cloudwatch get-metric-statistics \\\n\u00a0\u00a0 --namespace \"CWAgent\" \\\n\u00a0\u00a0 --metric-name \"procstat_lookup_pid_count\" \\\n\u00a0\u00a0 --dimensions Name=InstanceId,Value=$INSTANCE_ID Name=exe,Value=httpd Name=pid_finder,Value=native \\\n\u00a0\u00a0 --start-time $(date -u -d '10 minutes ago' +%Y-%m-%dT%H:%M:%SZ) \\\n\u00a0\u00a0 --end-time $(date -u +%Y-%m-%dT%H:%M:%SZ) \\\n\u00a0\u00a0 --period 60 \\\n\u00a0\u00a0 --statistics Average \\\n\u00a0\u00a0 --query \"sort_by(Datapoints, &amp;Timestamp)&#91;*].&#91;Timestamp, Average]\" \\\n\u00a0\u00a0 --output table<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E3%82%A2%E3%83%A9%E3%83%BC%E3%83%A0%E7%8A%B6%E6%85%8B%E3%81%A8%E5%A4%89%E6%9B%B4%E7%90%86%E7%94%B1%E3%81%AE%E7%A2%BA%E8%AA%8D\"><\/span><strong>\u30a2\u30e9\u30fc\u30e0\u72b6\u614b\u3068\u5909\u66f4\u7406\u7531\u306e\u78ba\u8a8d<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>\u5bfe\u8c61\u30a2\u30e9\u30fc\u30e0\uff08httpd-Down-MultiInstance\uff09\u306e\u73fe\u5728\u306e\u72b6\u614b\uff08OK\/ALARM\uff09\u3001\u6700\u7d42\u66f4\u65b0\u65e5\u6642\u3001\u767a\u5831\u7406\u7531\u3092\u8fc5\u901f\u306b\u78ba\u8a8d\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>Bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>aws cloudwatch describe-alarms \\\n\u00a0\u00a0 --alarm-names \"httpd-Down-MultiInstance\" \\\n\u00a0\u00a0 --query \"MetricAlarms&#91;*].&#91;AlarmName, StateValue, StateUpdatedTimestamp, StateReason]\" \\\n\u00a0\u00a0 --output table<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E3%81%BE%E3%81%A8%E3%82%81\"><\/span><strong>\u307e\u3068\u3081<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>\u672c\u8a18\u4e8b\u3067\u7d39\u4ecb\u3057\u305f\u81ea\u52d5\u5fa9\u65e7\u69cb\u6210\u306b\u52a0\u3048\u3001<strong>\u30d9\u30a2\u30b5\u30dd\u30fc\u30c8\u3067\u306f\u8981\u4ef6\u306b\u5408\u308f\u305b\u305f\u5404\u7a2e\u30a2\u30e9\u30fc\u30c8\u901a\u77e5\u3084\u5916\u90e8\u30c4\u30fc\u30eb\u9023\u643a\u306e\u69cb\u7bc9\u3082\u53ef\u80fd<\/strong>\u3067\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u96fb\u8a71\u81ea\u52d5\u901a\u5831\u6a5f\u80fd\uff08Amazon Connect \u9023\u643a\uff09<\/strong>\uff1a\u591c\u9593\u3084\u4f11\u65e5\u306a\u3069\u306e\u91cd\u5927\u969c\u5bb3\u767a\u751f\u6642\u3001\u62c5\u5f53\u8005\u306e\u643a\u5e2f\u96fb\u8a71\u3078\u81ea\u52d5\u97f3\u58f0\u3067\u7dca\u6025\u30b3\u30fc\u30eb\u3092\u767a\u4fe1\u3002<\/li>\n\n\n\n<li><strong>\u30d3\u30b8\u30cd\u30b9\u30c1\u30e3\u30c3\u30c8\u5373\u6642\u901a\u77e5\uff08Slack \/ Microsoft Teams\u9023\u643a\uff09<\/strong>\uff1a\u969c\u5bb3\u767a\u751f\u6642\u306e\u30b9\u30bf\u30c3\u30af\u60c5\u5831\u3001\u81ea\u52d5\u5fa9\u65e7\u306e\u6210\u5426\u3001AI\u306b\u3088\u308b\u30ed\u30b0\u8a3a\u65ad\u7d50\u679c\u3092Slack\u3084Teams\u306e\u7279\u5b9a\u30c1\u30e3\u30f3\u30cd\u30eb\u3078\u5373\u5ea7\u306b\u30ab\u30fc\u30c9\u5f62\u5f0f\u3067\u901a\u77e5\u3002<\/li>\n\n\n\n<li><strong>\u30c1\u30b1\u30c3\u30c8\u8d77\u7968\u81ea\u52d5\u5316\uff08Jira\/Backlog\u9023\u643a\uff09<\/strong>\uff1a\u81ea\u52d5\u30ea\u30ab\u30d0\u30ea\u304c\u30b9\u30ad\u30c3\u30d7\u3055\u308c\u305f\u9ad8\u8ca0\u8377\u969c\u5bb3\u6642\u306a\u3069\u3001\u624b\u52d5\u5bfe\u5fdc\u304c\u5fc5\u8981\u306a\u30b1\u30fc\u30b9\u3067\u81ea\u52d5\u7684\u306b\u904b\u7528\u30c1\u30b1\u30c3\u30c8\u3092\u767a\u884c\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u9069\u5207\u306aIAM\u6a29\u9650\u3092\u8a2d\u5b9a\u3057\u3001AWS\u306e\u6a19\u6e96\u904b\u7528\u30c4\u30fc\u30eb\uff08CloudWatch\u3001SSM\u3001Lambda\u3001Bedrock\uff09\u3068\u3053\u308c\u3089\u306e\u901a\u77e5\u57fa\u76e4\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u624b\u52d5\u4ecb\u5165\u3092\u6700\u5c0f\u9650\u306b\u6291\u3048\u305f\u81ea\u5f8b\u7684\u304b\u3064\u900f\u660e\u6027\u306e\u9ad8\u3044Web\u30b5\u30fc\u30d0\u30fc\u904b\u7528\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u30b7\u30b9\u30c6\u30e0\u69cb\u7bc9\u3084\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306e\u3054\u76f8\u8ac7\u306f\u3001\u305c\u3072\u30d9\u30a2\u30b5\u30dd\u30fc\u30c8\u307e\u3067\u304a\u6c17\u8efd\u306b\u304a\u554f\u3044\u5408\u308f\u305b\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<p><a href=\"https:\/\/baresupport.jp\/\">\u30a4\u30f3\u30d5\u30e9\u904b\u7528\u309224\u6642\u9593365\u65e5\u30b5\u30dd\u30fc\u30c8\uff5c\u30d9\u30a2\u30b5\u30dd\u30fc\u30c8<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u904b\u7528\u306b\u304a\u3044\u3066\u3001\u969c\u5bb3\u767a\u751f\u6642\u306e\u30c0\u30a6\u30f3\u30bf\u30a4\u30e0\u77ed\u7e2e\u3068\u904b\u7528\u8ca0\u8377\u306e\u524a\u6e1b\u306f\u91cd\u8981\u306a\u8ab2\u984c\u3067\u3059\u3002\u672c\u8a18\u4e8b\u3067\u306f\u3001AWS\u4e0a\u306eEC2\uff08httpd\uff09\u3067\u30d7\u30ed\u30bb\u30b9\u304c\u505c\u6b62\u3057\u305f\u969b\u306b\u3001CloudWatch\u3001Lambda\u3001Amazon B [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1100,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[18],"tags":[44,17,43,45],"class_list":["post-1089","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tech-blog","tag-amazon-bedrock","tag-aws","tag-cloudwatch","tag-45"],"aioseo_notices":[],"views":15,"_links":{"self":[{"href":"https:\/\/baresupport.jp\/blog\/wp-json\/wp\/v2\/posts\/1089","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/baresupport.jp\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/baresupport.jp\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/baresupport.jp\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/baresupport.jp\/blog\/wp-json\/wp\/v2\/comments?post=1089"}],"version-history":[{"count":3,"href":"https:\/\/baresupport.jp\/blog\/wp-json\/wp\/v2\/posts\/1089\/revisions"}],"predecessor-version":[{"id":1094,"href":"https:\/\/baresupport.jp\/blog\/wp-json\/wp\/v2\/posts\/1089\/revisions\/1094"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/baresupport.jp\/blog\/wp-json\/wp\/v2\/media\/1100"}],"wp:attachment":[{"href":"https:\/\/baresupport.jp\/blog\/wp-json\/wp\/v2\/media?parent=1089"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/baresupport.jp\/blog\/wp-json\/wp\/v2\/categories?post=1089"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/baresupport.jp\/blog\/wp-json\/wp\/v2\/tags?post=1089"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}