{"id":30534,"date":"2026-01-26T10:16:44","date_gmt":"2026-01-26T01:16:44","guid":{"rendered":"https:\/\/www.skyarch.net\/blog\/?p=30534"},"modified":"2026-01-26T10:16:44","modified_gmt":"2026-01-26T01:16:44","slug":"aws%e3%83%8b%e3%83%a5%e3%83%bc%e3%82%b9%e3%81%ae%e8%87%aa%e5%8b%95%e8%a6%81%e7%b4%84%e3%83%bb%e9%85%8d%e4%bf%a1%e3%82%a2%e3%83%97%e3%83%aa%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f","status":"publish","type":"post","link":"https:\/\/www.skyarch.net\/blog\/aws%e3%83%8b%e3%83%a5%e3%83%bc%e3%82%b9%e3%81%ae%e8%87%aa%e5%8b%95%e8%a6%81%e7%b4%84%e3%83%bb%e9%85%8d%e4%bf%a1%e3%82%a2%e3%83%97%e3%83%aa%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f\/","title":{"rendered":"AWS\u30cb\u30e5\u30fc\u30b9\u306e\u81ea\u52d5\u8981\u7d04\u30fb\u914d\u4fe1\u30a2\u30d7\u30ea\u3092\u4f5c\u3063\u3066\u307f\u305f\u3002"},"content":{"rendered":"<h2>\u306f\u3058\u3081\u306b<\/h2>\n<p>\u65e5\u3005\u5927\u91cf\u306b\u66f4\u65b0\u3055\u308c\u308bAWS\u306e\u6700\u65b0\u60c5\u5831\u3092\u30ad\u30e3\u30c3\u30c1\u30a2\u30c3\u30d7\u3059\u308b\u306e\u306f\u5927\u5909\u3067\u3059\u3002\u4e00\u65e5\u306b\u4f55\u4ef6\u3082\u306e\u8a18\u4e8b\u304c\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u305f\u308a\u3001\u82f1\u8a9e\u306e\u539f\u6587\u3092\u7ffb\u8a33\u3057\u3066\u8aad\u3093\u3060\u308a\u3059\u308b\u306e\u306b\u306f\u6642\u9593\u304c\u304b\u304b\u308a\u307e\u3059\u3002<br \/>\n\u305d\u3053\u3067\u3001\u6700\u65b0\u60c5\u5831\u306e\u30ad\u30e3\u30c3\u30c1\u30a2\u30c3\u30d7\u3092\u3082\u3063\u3068\u7c21\u5358\u306b\u3057\u305f\u3044\u3068\u601d\u3044\u3001<br \/>\nAWS\u30cb\u30e5\u30fc\u30b9\u306e\u81ea\u52d5\u8981\u7d04\u30fb\u914d\u4fe1\u30a2\u30d7\u30ea\u3092\u4f5c\u3063\u3066\u307f\u307e\u3057\u305f\u3002<br \/>\n\u624b\u9806\u306a\u3069\u3082\u8f09\u305b\u3066\u3044\u308b\u306e\u3067\u3001\u826f\u3051\u308c\u3070\u3054\u53c2\u8003\u306b\u3057\u3066\u3044\u305f\u3060\u3051\u308c\u3070\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<h2>\u76ee\u6b21<\/h2>\n<ul>\n<li><a href=\"#overview\">\u6982\u8981<\/a><\/li>\n<li><a href=\"#overview\">\u30b7\u30b9\u30c6\u30e0\u69cb\u6210<\/a><\/li>\n<li><a href=\"#overview\">\u624b\u9806\u306e\u6982\u8981<\/a><\/li>\n<li><a href=\"#tejun\">\u624b\u9806<\/a><\/li>\n<li><a href=\"#matome\">\u307e\u3068\u3081<\/a><\/li>\n<\/ul>\n<h2>\u6982\u8981<\/h2>\n<p>\u3053\u306e\u30a2\u30d7\u30ea\u306f\u3001AWS Lambda\u3068Bedrock\u3001S3\u3001Difi\u306a\u3069\u3092\u4f7f\u3063\u3066\u4f5c\u6210\u3057\u307e\u3057\u305f\u3002<br \/>\n\u4ed5\u7d44\u307f\u3068\u3057\u3066\u306f\u3001Lambda (Python) \u304cAWS\u516c\u5f0fRSS\u30d5\u30a3\u30fc\u30c9\u3092\u53d6\u5f97\u3001\u305d\u308c\u3092Bedrock(Claude 3.5 Sonnet)\u8a18\u4e8b\u306e\u5185\u5bb9\u3092\u9001\u308a\u3001\u300c3\u884c\u30b5\u30de\u30ea\u30fc\u300d\u300c\u5909\u66f4\u70b9\u300d\u300c\u30e1\u30ea\u30c3\u30c8\u300d\u306b\u8981\u7d04\u3055\u305b\u3001\u898b\u3084\u3059\u3044HTML\u5f62\u5f0f\u306b\u5909\u63db\u3057\u3066S3\u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u3001\u5b8c\u6210\u3057\u305fWeb\u30da\u30fc\u30b8\u306eURL\u3092 Slack\u306b\u901a\u77e5\u3059\u308b\u4ed5\u7d44\u307f\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<h2>\u30b7\u30b9\u30c6\u30e0\u69cb\u6210<\/h2>\n<a href=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/de168b8bd4c24ad646c5b8e5121c69c7.png\"><img decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/de168b8bd4c24ad646c5b8e5121c69c7.png\" alt=\"\" \/><\/a>\n<h2>\u624b\u9806\u306e\u6982\u8981<\/h2>\n<ol>\n<li>\u901a\u77e5\u5148\u306e\u8a2d\u5b9a<\/li>\n<li>IAM\u30e6\u30fc\u30b6\u30fc\u306e\u4f5c\u6210<\/li>\n<li>S3\u30d0\u30b1\u30c3\u30c8\u306e\u4f5c\u6210<\/li>\n<li>Lambda\u95a2\u6570\u306e\u4f5c\u6210<\/li>\n<li>EventBridge\u306e\u8a2d\u5b9a<\/li>\n<li>Difi\u306e\u8a2d\u5b9a<\/li>\n<\/ol>\n<h2>\u624b\u9806<\/h2>\n<h3>\u901a\u77e5\u5148\u306e\u8a2d\u5b9a<\/h3>\n<p>\u901a\u77e5\u5148\u306eSlack\u30c1\u30e3\u30f3\u30cd\u30eb\u3092\u6c7a\u3081\u3066\u3001Incoming Webhook URL\u3092\u767a\u884c\u3057\u307e\u3059\u3002<br \/>\n\u4eca\u56de\u306e\u901a\u77e5\u5148\u306f\u81ea\u5206\u306eSlack\u306e\u30c1\u30e3\u30f3\u30cd\u30eb\u306b\u3057\u307e\u3057\u305f\u3002<br \/>\n\u4f5c\u6210\u3057\u305fURL\u306f\u5f8c\u7a0b\u4f7f\u7528\u3059\u308b\u306e\u3067\u63a7\u3048\u3066\u304a\u304d\u307e\u3059\u3002<\/p>\n<h3>IAM\u30e6\u30fc\u30b6\u30fc\u306e\u4f5c\u6210<\/h3>\n<p>Dify\u304cBedrock\u306eAPI\u3092\u547c\u3073\u51fa\u3059\u305f\u3081\u306eIAM\u30e6\u30fc\u30b6\u30fc\u306e\u4f5c\u6210\u3057\u3001IAM\u30e6\u30fc\u30b6\u30fc\u306e\u30a2\u30af\u30bb\u30b9\u30ad\u30fc\u3068\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u3092\u4f5c\u6210\u3057\u3066\u3044\u304d\u307e\u3059\u3002<br \/>\nIAM\u306e\u753b\u9762\u306b\u79fb\u52d5\u3057\u3066\u3001\u30e6\u30fc\u30b6\u30fc\u306e\u4f5c\u6210\u3092\u62bc\u3057\u307e\u3059\u3002<br \/>\n\u30e6\u30fc\u30b6\u30fc\u306e\u540d\u524d\u306f\u4efb\u610f\u3002(\u4f8b:Dify-User)<br \/>\n<a href=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/image-20260101-102703.png\"><img decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/image-20260101-102703-1024x456.png\" alt=\"\" \/><\/a><\/p>\n<p>\u30dd\u30ea\u30b7\u30fc\u3092\u76f4\u63a5\u30a2\u30bf\u30c3\u30c1\u3092\u9078\u629e\u3057\u3066\u3001BedrockFullAccess\u3092\u9078\u629e\u3001\u6b21\u3078\u3092\u62bc\u3057\u3001\u30e6\u30fc\u30b6\u30fc\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<br \/>\n<a href=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/image-20260101-103053.png\"><img decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/image-20260101-103053-1024x458.png\" alt=\"\" \/><\/a><\/p>\n<p>\u4f5c\u6210\u51fa\u6765\u305f\u3089\u3001\u4f5c\u6210\u3057\u305f\u30e6\u30fc\u30b6\u30fc\u3092\u9078\u629e\u3057\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8a8d\u8a3c\u30bf\u30d6\u3092\u9078\u629e\u3057\u3001\u30a2\u30af\u30bb\u30b9\u30ad\u30fc\u306e\u4f5c\u6210\u3092\u62bc\u3059\u3002<br \/>\n<a href=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/image-20260101-103530.png\"><img decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/image-20260101-103530-1024x461.png\" alt=\"\" \/><\/a><\/p>\n<h3>S3\u30d0\u30b1\u30c3\u30c8\u306e\u4f5c\u6210<\/h3>\n<p>\u30c7\u30fc\u30bf\u306e\u4fdd\u5b58\u5148\u3067\u3042\u308a\u3001\u95b2\u89a7\u753b\u9762\u3068\u306a\u308bWeb\u30b5\u30fc\u30d0\u30fc\u90e8\u5206\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<br \/>\nS3\u306e\u30da\u30fc\u30b8\u306b\u79fb\u52d5\u3057\u3001\u30d0\u30b1\u30c3\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<p>\u30d0\u30b1\u30c3\u30c8\u540d(\u4f8b:my-aws-news-digest)\u3092\u5165\u308c\u3066\u3001\u30d0\u30b1\u30c3\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<br \/>\n<a href=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/d56b6c11985ced457dc6ccac5fa732b2-1.png\"><img decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/d56b6c11985ced457dc6ccac5fa732b2-1-1024x441.png\" alt=\"\" \/><\/a><\/p>\n<p>\u4f5c\u6210\u51fa\u6765\u305f\u3089\u3001\u30d0\u30b1\u30c3\u30c8\u3092\u9078\u629e\u3057\u3001\u30d7\u30ed\u30d1\u30c6\u30a3\u306b\u79fb\u52d5\u3057\u3001\u9759\u7684\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u307e\u3067\u3044\u304d\u3001S3 \u9759\u7684\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u3092\u6709\u52b9\u306b\u3057\u307e\u3059\u3002<a href=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/1345edfa367b8298498c6f7036e00931.png\"><img decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/1345edfa367b8298498c6f7036e00931-1024x460.png\" alt=\"\" \/><\/a><\/p>\n<p>\u6b21\u306b\u30a2\u30af\u30bb\u30b9\u8a31\u53ef\u30bf\u30d6\u306b\u79fb\u52d5\u3057\u3066\u3001\u30d1\u30d6\u30ea\u30c3\u30af\u30a2\u30af\u30bb\u30b9\u3092\u3059\u3079\u3066\u30d6\u30ed\u30c3\u30af\u306b\u3059\u308b\u3053\u3068\u3068\u3001<\/p>\n<p>\u30d0\u30b1\u30c3\u30c8\u30dd\u30ea\u30b7\u30fc\u3092\u7de8\u96c6\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n<details style=\"border: 1px solid #ccc;border-radius: 8px;overflow: hidden;margin-bottom: 1em;font-family: sans-serif\">\n<summary style=\"cursor: pointer;padding: 1em;background-color: #f7f7f7;font-weight: bold;border-bottom: 1px solid #ccc\">\n    \u25bc \u30af\u30ea\u30c3\u30af\u3057\u3066\u30dd\u30ea\u30b7\u30fc\uff08JSON\uff09\u3092\u8868\u793a<br \/>\n  <\/summary>\n<div style=\"padding: 0;background-color: #2d2d2d\">\n<pre style=\"margin: 0;padding: 1.5em;color: #f8f8f2;font-family: 'Courier New', Courier, monospace;line-height: 1.5\"><code>{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Sid\": \"PublicReadGetObject\",\n      \"Effect\": \"Allow\",\n      \"Principal\": \"*\",\n      \"Action\": \"s3:GetObject\",\n      \"Resource\": \"arn:aws:s3:::\u81ea\u5206\u304c\u4f5c\u6210\u3057\u305f\u30d0\u30b1\u30c3\u30c8\u540d\/*\"\n    }\n  ]\n}<\/code><\/pre>\n<\/p><\/div>\n<\/details>\n<p><a href=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2025\/10\/image-20260101-090530.png\"><img decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2025\/10\/image-20260101-090530-1024x461.png\" alt=\"\" \/><\/a><br \/>\nS3\u306e\u8a2d\u5b9a\u306f\u3053\u308c\u3067\u7d42\u308f\u308a\u3067\u3059\u3002<\/p>\n<h3>Lambda\u95a2\u6570\u306e\u4f5c\u6210<\/h3>\n<p>Lambda\u306e\u30da\u30fc\u30b8\u3092\u958b\u304d\u3001Lambda\u95a2\u6570\u3092\u4f5c\u6210\u3057\u3066\u304f\u3002<br \/>\n\u300c\u4e00\u304b\u3089\u4f5c\u6210\u300d\u3092\u9078\u629e\u3057\u3001\u95a2\u6570\u540d\u3092\u5165\u529b\u3059\u308b\u3002(\u4f8b:aws-news-to-slack-standard)<\/p>\n<p>\u30e9\u30f3\u30bf\u30a4\u30e0\u306f\u300cPython3.12\u300d\u3092\u9078\u629e\u3057\u3001\u4f5c\u6210\u3092\u62bc\u3057\u307e\u3059\u3002<a href=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/image-20260101-090605.png\"><img decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/image-20260101-090605-1024x460.png\" alt=\"\" \/><\/a><\/p>\n<p>\u4f5c\u6210\u3067\u304d\u305f\u3089\u3001\u4e0b\u8a18\u30b3\u30fc\u30c9\u3092lambd_function.py\u306b\u3042\u308b\u30b3\u30fc\u30c9\u3092\u524a\u9664\u3057\u3066\u3001\u8cbc\u308a\u4ed8\u3051\u307e\u3059\u3002<\/p>\n<details style=\"border: 1px solid #ccc;border-radius: 8px;overflow: hidden;margin-bottom: 1em;font-family: sans-serif\">\n<summary style=\"cursor: pointer;padding: 1em;background-color: #f7f7f7;font-weight: bold;border-bottom: 1px solid #ccc\">\n    \u25bc \u30af\u30ea\u30c3\u30af\u3057\u3066\u30dd\u30ea\u30b7\u30fc\uff08JSON\uff09\u3092\u8868\u793a<br \/>\n  <\/summary>\n<div style=\"padding: 0;background-color: #2d2d2d\">\n<pre style=\"margin: 0;padding: 1.5em;color: #f8f8f2;font-family: 'Courier New', Courier, monospace;line-height: 1.5\"><code>import json\nimport os\nimport ssl\nimport urllib.request\nimport urllib.error\nimport xml.etree.ElementTree as ET\nimport gzip\nimport boto3\nfrom datetime import datetime, timedelta, timezone\n\n# --- Configuration ---\nS3_BUCKET_NAME = os.environ.get('S3_BUCKET_NAME')\nS3_WEBSITE_URL = os.environ.get('S3_WEBSITE_URL', '').rstrip('\/')\nDIFY_API_KEY = os.environ.get('DIFY_API_KEY')\nSLACK_WEBHOOK_URL = os.environ.get('SLACK_WEBHOOK_URL')\nDIFY_APP_BASE_URL = os.environ.get('DIFY_APP_BASE_URL', 'https:\/\/api.dify.ai\/v1')\n\nTARGET_FEED_URLS = [\n    \"https:\/\/aws.amazon.com\/jp\/blogs\/news\/feed\/\",\n    \"https:\/\/aws.amazon.com\/about-aws\/whats-new\/recent\/feed\/\"\n]\n\ns3 = boto3.client('s3')\n\ndef get_dify_summary(title, summary):\n    if not summary or not summary.strip():\n        return None\n\n    api_url = f\"{DIFY_APP_BASE_URL}\/chat-messages\"\n    query_text = (\n        f\"\u4ee5\u4e0b\u306eAWS\u30cb\u30e5\u30fc\u30b9\u8a18\u4e8b\u3092\u65e5\u672c\u8a9e\u3067\u8981\u7d04\u3057\u3066\u304f\u3060\u3055\u3044\u3002\\n\"\n        f\"\u5f62\u5f0f\uff1a\\n\u30fb3\u884c\u30b5\u30de\u30ea\u30fc\\n\u30fb\u4f55\u304c\u5909\u308f\u3063\u305f\uff1f\\n\u30fb\u3069\u3093\u306a\u6642\u306b\u5b09\u3057\u3044\uff1f\\n\\n\"\n        f\"\u30bf\u30a4\u30c8\u30eb: {title}\\n\u672c\u6587: {summary[:2000]}\"\n    )\n\n    payload = {\n        \"inputs\": {},\n        \"query\": query_text,\n        \"user\": \"aws-auto-bot\",\n        \"response_mode\": \"blocking\"\n    }\n    headers = {\n        \"Authorization\": f\"Bearer {DIFY_API_KEY}\",\n        \"Content-Type\": \"application\/json\"\n    }\n\n    try:\n        data = json.dumps(payload).encode('utf-8')\n        req = urllib.request.Request(api_url, data=data, headers=headers, method='POST')\n        context = ssl._create_unverified_context()\n        with urllib.request.urlopen(req, context=context, timeout=90) as response:\n            result = json.loads(response.read().decode('utf-8'))\n            return result.get('answer', '')\n    except Exception as e:\n        print(f\"Error: Dify API request failed: {e}\")\n        return None\n\ndef post_to_slack(message):\n    payload = {\"text\": message, \"mrkdwn\": True}\n    try:\n        data = json.dumps(payload).encode('utf-8')\n        req = urllib.request.Request(\n            SLACK_WEBHOOK_URL, \n            data=data, \n            headers={'Content-Type': 'application\/json'}, \n            method='POST'\n        )\n        context = ssl._create_unverified_context()\n        urllib.request.urlopen(req, context=context, timeout=10)\n    except Exception as e:\n        print(f\"Error: Slack notification failed: {e}\")\n\ndef parse_rss_feed(feed_url):\n    try:\n        headers = {'User-Agent': 'Mozilla\/5.0'}\n        req = urllib.request.Request(feed_url, headers=headers)\n        context = ssl._create_unverified_context()\n        with urllib.request.urlopen(req, context=context, timeout=15) as response:\n            raw = response.read()\n            if response.info().get('Content-Encoding') == 'gzip':\n                xml_content = gzip.decompress(raw).decode('utf-8')\n            else:\n                xml_content = raw.decode('utf-8', errors='ignore')\n\n        root = ET.fromstring(xml_content)\n        entries = []\n        for item in root.findall('.\/\/item'):\n            entries.append({\n                'title': item.findtext('title', 'No Title'),\n                'link': item.findtext('link', feed_url),\n                'summary': item.findtext('description', ''),\n                'published_str': item.findtext('pubDate', '')\n            })\n        return entries\n    except Exception as e:\n        print(f\"Error: RSS parsing failed for {feed_url}: {e}\")\n        return []\n\ndef generate_html(articles, date_str):\n    css = \"\"\"\n    body { font-family: 'Helvetica Neue', Arial, sans-serif; background-color: #f4f6f8; color: #333; margin: 0; padding: 20px; }\n    .container { max-width: 800px; margin: 0 auto; background: white; padding: 40px; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); }\n    h1 { color: #232f3e; border-bottom: 2px solid #ff9900; padding-bottom: 10px; }\n    .date { color: #666; font-size: 0.9em; margin-bottom: 30px; }\n    .nav-link { display: block; margin-top: 10px; text-align: right; }\n    .article { border-bottom: 1px solid #eee; padding: 20px 0; }\n    .article:last-child { border-bottom: none; }\n    .article h2 { font-size: 1.4em; margin: 0 0 10px 0; }\n    .article h2 a { color: #0073bb; text-decoration: none; }\n    .summary { background-color: #fafafa; padding: 15px; border-radius: 5px; border-left: 4px solid #ff9900; line-height: 1.6; }\n    .footer { margin-top: 40px; text-align: center; color: #aaa; font-size: 0.8em; }\n    \"\"\"\n\n    html_parts = [\n        f\"<title>AWS News {date_str}<\/title>{css}\",\n        f\"<div class='container'><div class='nav-link'><a href='index.html'>\ud83d\udcc2 Back to Archives<\/a><\/div>\",\n        f\"<h1>AWS News Digest<\/h1><div class='date'>Date: {date_str}<\/div>\"\n    ]\n\n    if not articles:\n        html_parts.append(\"<p>No new articles found.<\/p>\")\n    else:\n        for article in articles:\n            ai_summary = article.get('ai_summary', 'Summary generation failed.')\n            summary_html = '<br>'.join([line.lstrip('&gt; ') for line in ai_summary.split('\\n')])\n            html_parts.append(f\"\"\"\n                <div class='article'>\n                    <h2><a href=\"{article['link']}\" target=\"_blank\">{article['title']}<\/a><\/h2>\n                    <div class='summary'>{summary_html}<\/div>\n                <\/div>\"\"\")\n\n    html_parts.append(\"<div class='footer'>Automated by AWS Lambda<\/div><\/div>\")\n    return \"\".join(html_parts)\n\ndef update_index_page():\n    try:\n        response = s3.list_objects_v2(Bucket=S3_BUCKET_NAME)\n        if 'Contents' not in response:\n            return\n\n        files = [\n            {'key': obj['Key'], 'last_modified': obj['LastModified']}\n            for obj in response['Contents']\n            if obj['Key'].endswith('.html') and obj['Key'].startswith('news_digest_')\n        ]\n        files.sort(key=lambda x: x['last_modified'], reverse=True)\n\n        css = \"body{font-family:sans-serif;padding:20px;background:#f4f6f8} .container{max-width:600px;margin:0 auto;background:white;padding:20px;border-radius:8px;} h1{border-bottom:2px solid #ff9900} ul{list-style:none;padding:0} li{padding:10px 0;border-bottom:1px solid #eee} a{text-decoration:none;color:#0073bb;font-size:1.1em} .date{font-size:0.8em;color:#666}\"\n        html_lines = [\n            \"<title>AWS News Archives<\/title>\",\n            f\"{css}<div class='container'><h1>\ud83d\udcc2 AWS News Archives<\/h1><ul>\"\n        ]\n\n        for f in files:\n            display_name = f['key'].replace('news_digest_', '').replace('.html', '')\n            date_info = f['last_modified'].strftime('%Y-%m-%d %H:%M')\n            html_lines.append(f\"<li><a>\ud83d\udcc5 {display_name}<\/a><div class='date'>Created: {date_info}<\/div><\/li>\")\n\n        html_lines.append(\"<\/ul><\/div>\")\n\n        s3.put_object(\n            Bucket=S3_BUCKET_NAME,\n            Key='index.html',\n            Body=\"\".join(html_lines).encode('utf-8'),\n            ContentType='text\/html',\n            CacheControl='max-age=60'\n        )\n    except Exception as e:\n        print(f\"Warning: Failed to update index.html: {e}\")\n\ndef lambda_handler(event, context):\n    if not all([S3_BUCKET_NAME, S3_WEBSITE_URL, DIFY_API_KEY, SLACK_WEBHOOK_URL]):\n        return {'statusCode': 500, 'body': 'Missing required environment variables'}\n\n    now = datetime.now(timezone.utc)\n    one_day_ago = now - timedelta(days=1)\n    all_valid_entries = []\n\n    for url in TARGET_FEED_URLS:\n        for entry in parse_rss_feed(url):\n            pub_str = entry['published_str']\n            if not pub_str: continue\n            try:\n                pub_str = pub_str.replace('GMT', '+0000').replace('UT', '+0000').replace('Z', '+0000')\n                dt = datetime.strptime(pub_str, '%a, %d %b %Y %H:%M:%S %z')\n                if dt &gt; one_day_ago:\n                    entry['published_dt'] = dt\n                    all_valid_entries.append(entry)\n            except ValueError:\n                continue\n\n    all_valid_entries.sort(key=lambda x: x['published_dt'], reverse=True)\n    target_entries = all_valid_entries[:15]\n\n    for entry in target_entries:\n        summary = get_dify_summary(entry['title'], entry['summary'])\n        entry['ai_summary'] = summary if summary else \"No summary available.\"\n\n    today_str = now.strftime('%Y-%m-%d')\n    file_name = f\"news_digest_{now.strftime('%Y%m%d')}.html\"\n    html_content = generate_html(target_entries, today_str)\n\n    try:\n        s3.put_object(\n            Bucket=S3_BUCKET_NAME,\n            Key=file_name,\n            Body=html_content.encode('utf-8'),\n            ContentType='text\/html'\n        )\n        update_index_page()\n    except Exception as e:\n        print(f\"Error: S3 operations failed: {e}\")\n        return {'statusCode': 500, 'body': 'S3 Error'}\n\n    digest_url = f\"{S3_WEBSITE_URL}\/{file_name}\"\n    archive_url = f\"{S3_WEBSITE_URL}\/index.html\"\n\n    if not target_entries:\n        msg = f\"\ud83c\udf89 No new AWS articles found today.\\n\ud83d\udcc2 \"\n    else:\n        msg = (\n            f\"\ud83d\udcf0 *AWS News Digest ({today_str})*\\n\"\n            f\"Processed {len(target_entries)} new articles.\\n\"\n            f\"\ud83d\udc49 \\n\"\n            f\"\ud83d\udcc2 \"\n        )\n\n    post_to_slack(msg)\n    return {'statusCode': 200, 'body': 'Execution completed'}<\/code><\/pre>\n<\/p><\/div>\n<\/details>\n<p>\u8cbc\u308a\u4ed8\u3051\u305f\u3089\u3001deploy\u3092\u62bc\u3057\u307e\u3059\u3002<\/p>\n<p>\u8a2d\u5b9a\u30bf\u30d6\u306b\u79fb\u52d5\u3057\u3066\u3001\u74b0\u5883\u5909\u6570\u306e\u8a2d\u5b9a\u3092\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n<p>\u767b\u9332\u3059\u308b\u5909\u6570\u306e\u30ad\u30fc\u306f\u2193\u5024\u306f\u305d\u308c\u305e\u308c\u306eURL\u306a\u3069\u3092\u8cbc\u308a\u4ed8\u3051\u307e\u3059\u3002<\/p>\n<p>\u30fbSLACK_WEBHOOK_URL<\/p>\n<p>\u30fbDify_API_KEY<\/p>\n<p>\u30fbS3_BUCKET_NAME<\/p>\n<p>\u30fbS3_WEBSITE_URL<\/p>\n<p>Difi_API_Key\u306fDifi\u306e\u8a2d\u5b9a\u3092\u3057\u305f\u5f8c\u306b\u5f35\u308a\u4ed8\u3051\u307e\u3059\u3002<\/p>\n<a href=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/image-20260101-095144.png\"><img decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/image-20260101-095144-1024x440.png\" alt=\"\" \/><\/a>\n<p>\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u306e\u79d2\u6570\u306e\u8a2d\u5b9a\u3082\u884c\u3063\u3066\u304a\u304f\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u304c3\u79d2\u306a\u306e\u3067\u30015\u5206\u306b\u5909\u66f4\u3057\u307e\u3059\u3002(3\u79d2\u3060\u3068\u8a18\u4e8b\u304c\u591a\u3044\u3068\u304d\u306b\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u3057\u3066\u3057\u307e\u3046\u306e\u3067\u3001\u9577\u3081\u306b5\u5206\u307b\u3069\u306b\u8a2d\u5b9a\u3057\u3066\u304a\u304f\u3002)<br \/>\n<a href=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/image-20260101-095333.png\"><img decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/image-20260101-095333-1024x460.png\" alt=\"\" \/><\/a><\/p>\n<p>Lambda\u4f5c\u6210\u6642\u306b\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u4f5c\u3089\u308c\u308b\u30ed\u30fc\u30eb\u306bAmazonS3FullAccess\u3068AmazonBedrockFullAccess\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<br \/>\n<a href=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/0c15f0c8d3f475d33626849523419550.png\"><img decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/0c15f0c8d3f475d33626849523419550-1024x461.png\" alt=\"\" \/><\/a><\/p>\n<h3>EventBridge\u306e\u8a2d\u5b9a<\/h3>\n<p>EventBridge\u3067\u6bce\u671d9\u6642\u306b\u5b9a\u671f\u7684\u306b\u5b9f\u884c\u3055\u308c\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3057\u3066\u3044\u304d\u307e\u3059\u3002<br \/>\nLamudba\u306e\u95a2\u6570\u306e\u753b\u9762\u3067\u3001\u30c8\u30ea\u30ac\u30fc\u3092\u8ffd\u52a0\u3092\u62bc\u3057\u3001EventBridge\u3092\u9078\u629e\u3057\u307e\u3059\u3002<br \/>\n<a href=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/image-20260101-095541-1.png\"><img decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/image-20260101-095541-1-1024x460.png\" alt=\"\" \/><\/a><\/p>\n<p>\u65b0\u898f\u30eb\u30fc\u30eb\u306e\u4f5c\u6210\u3092\u9078\u629e\u3057\u307e\u3059\u3002<\/p>\n<p>\u30eb\u30fc\u30eb\u540d\u3092\u5165\u529b\u3057\u3001\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<p>\u30eb\u30fc\u30eb\u540d\u306e\u4f8b: <code style=\"background-color: #f0f0f0;padding: 2px 5px;border-radius: 4px;font-family: monospace\">Weekly-AWS-News-Trigger<\/code><\/p>\n<p>\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u306eCron\u5f0f: <code style=\"background-color: #f0f0f0;padding: 2px 5px;border-radius: 4px;font-family: monospace\">0 0 * * ? *<\/code> (\u6bce\u65e5\u671d9\u6642 \u203bJST\u306e\u5834\u5408)<\/p>\n<p>\u8ffd\u52a0\u3092\u62bc\u3057\u307e\u3059\u3002<br \/>\n\u3053\u308c\u3067EventBridge\u306e\u8a2d\u5b9a\u306f\u5b8c\u4e86\u3067\u3059\u3002<\/p>\n<h3>Difi\u306e\u8a2d\u5b9a<\/h3>\n<p>\u6700\u5f8c\u306bDifi\u306e\u8a2d\u5b9a\u3092\u3057\u3066\u3044\u304d\u307e\u3059\u3002<br \/>\n\u3053\u3061\u3089\u306f\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u4f5c\u6210\u3057\u3066\u3044\u308b\u524d\u63d0\u306e\u624b\u9806\u306b\u306a\u308a\u307e\u3059\u3002<br \/>\n\u3082\u3057\u4f5c\u6210\u3055\u308c\u3066\u3044\u306a\u3044\u65b9\u306f\u4e0b\u8a18\u8a18\u4e8b\u3092\u53c2\u8003\u306b\u4f5c\u6210\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002<br \/>\n\u25bcDifi\u30a2\u30ab\u30a6\u30f3\u30c8\u4f5c\u6210\u53c2\u8003\u8a18\u4e8b<br \/>\n<a href=\"https:\/\/www.skyarch.net\/blog\/amazon-bedrock%e3%81%a8dify%e3%81%a7%e3%83%81%e3%83%a3%e3%83%83%e3%83%88%e3%83%9c%e3%83%83%e3%83%88%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f\/\">Amazon Bedrock\u3068Dify\u3067\u30c1\u30e3\u30c3\u30c8\u30dc\u30c3\u30c8\u4f5c\u3063\u3066\u307f\u305f<\/a><\/p>\n<p>\u307e\u305a\u3001Difi\u3092\u958b\u304d\u307e\u3059\u3002<br \/>\n\u53f3\u4e0a\u306e\u81ea\u5206\u306e\u30a2\u30a4\u30b3\u30f3\u3092\u9078\u629e\u3057\u3001\u8a2d\u5b9a\u3092\u62bc\u3057\u307e\u3059\u3002<br \/>\n<a href=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/0a8112905aad9d19ea7b9032bb7f4d5f-1.png\"><img decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/0a8112905aad9d19ea7b9032bb7f4d5f-1-1024x487.png\" alt=\"\" \/><\/a><\/p>\n<p>\u30e2\u30c7\u30eb\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3092\u9078\u629e\u3057\u3001Beadrock\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002<br \/>\n<a href=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/image-20260101-101439.png\"><img decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/image-20260101-101439-1024x486.png\" alt=\"\" \/><\/a><\/p>\n<p>\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u304d\u305f\u3089\u3001API KEY\u306e\u30b3\u30f3\u30d5\u30a3\u30b0\u3092\u62bc\u3057\u3001API\u30ad\u30fc\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<br \/>\n<a href=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/image-20260101-104524.png\"><img decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/image-20260101-104524-1024x485.png\" alt=\"\" \/><\/a><\/p>\n<p>API\u306e\u540d\u524d\u3092\u5165\u529b\u3057\u3066\u3001Authentication Method\u3092Access-Secret Key\u306b\u5909\u66f4\u3057\u307e\u3059\u3002<\/p>\n<p>Access Key\u3068Secret Access Key\u306fIAM\u30e6\u30fc\u30b6\u30fc\u4f5c\u6210\u6642\u306ekey\u3092\u5165\u529b\u3057\u307e\u3059\u3002<\/p>\n<p>\u30ea\u30fc\u30b8\u30e7\u30f3\u306f\u4efb\u610f\u3067\u3059\u3002(\u4eca\u56de\u306fUS East (N. Virginia)\u306b\u3057\u307e\u3057\u305f\u3002)<\/p>\n<p>Available Model Name\u306b\u306f\u3001\u81ea\u5206\u304c\u4f7f\u7528\u3059\u308b\u751f\u6210AI\u30e2\u30c7\u30eb\u306e\u30e2\u30c7\u30eb\u540d\u3092\u5165\u308c\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u4eca\u56de\u79c1\u304c\u4f7f\u7528\u3057\u305f\u751f\u6210AI\u306fClaude 3 Haiku\u3092\u4f7f\u7528\u3057\u305f\u306e\u3067\u3001\u30e2\u30c7\u30eb\u540d\u306f<br \/>\n(anthropic.claude-3-haiku-20240307-v1:0)\u306b\u306a\u308a\u307e\u3059\u3002<br \/>\n<a href=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/image-20260101-104755.png\"><img decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/image-20260101-104755-1024x485.png\" alt=\"\" \/><\/a><\/p>\n<div style=\"background-color: #ebf5ff;border: 1px solid #c2e0ff;border-radius: 8px;padding: 20px;margin-bottom: 20px;align-items: flex-start;gap: 15px;font-family: sans-serif\">\n<div style=\"flex-shrink: 0;margin-top: 2px\"><\/div>\n<div style=\"color: #1e3a8a;line-height: 1.6;width: 100%\">\n<p style=\"margin: 0;font-size: 1.1em;font-weight: bold\">\u30e2\u30c7\u30eb\u540d\u306fBedrock\u3067\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002<\/p>\n<p style=\"margin: 8px 0 15px 0;font-size: 1em\">\u81ea\u5206\u304c\u4f7f\u7528\u3057\u305f\u3044\u751f\u6210AI\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u30e2\u30c7\u30eb\u540d\u3082\u8a18\u8f09\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>        <img decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/image-20260101-105554-1024x463.png\" alt=\"Bedrock\u306e\u753b\u9762\u8aac\u660e\" style=\"max-width: 100%;height: auto;border-radius: 4px;border: 1px solid #c2e0ff;margin-top: 10px\">\n    <\/div>\n<\/div>\n<p>\u4fdd\u5b58\u3057\u305f\u3089\u3001\u521d\u3081\u306e\u753b\u9762\u306b\u623b\u308a\u3001\u30c1\u30e3\u30c3\u30c8\u30dc\u30c3\u30c8\u3092\u9078\u629e\u3057\u3066\u3001\u6700\u521d\u304b\u3089\u4f5c\u6210\u3092\u62bc\u3057\u307e\u3059\u3002<br \/>\n<a href=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/image-20260101-105642.png\"><img decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/image-20260101-105642-1024x486.png\" alt=\"\" \/><\/a><br \/>\n\u30c1\u30e3\u30c3\u30c8\u30dc\u30c3\u30c8\u3092\u9078\u629e\u3057\u3001\u30a2\u30d7\u30ea\u540d\u3092\u5165\u529b\u3057\u3066\u4f5c\u6210\u3057\u307e\u3059\u3002<br \/>\n<a href=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/image-20260101-105946.png\"><img decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/image-20260101-105946-1024x488.png\" alt=\"\" \/><\/a><\/p>\n<p>\u30d7\u30ed\u30f3\u30d7\u30c8\u306b\u4e0b\u8a18\u6587\u3092\u5165\u529b\u3057\u307e\u3059\u3002<\/p>\n<details style=\"border: 1px solid #ccc;border-radius: 8px;overflow: hidden;margin-bottom: 1em;font-family: sans-serif\">\n<summary style=\"cursor: pointer;padding: 1em;background-color: #f7f7f7;font-weight: bold;border-bottom: 1px solid #ccc\">\n    \u30d7\u30ed\u30f3\u30d7\u30c8\u6587<br \/>\n  <\/summary>\n<div style=\"padding: 0;background-color: #2d2d2d\">\n<pre style=\"margin: 0;padding: 1.5em;color: #f8f8f2;font-family: 'Courier New', Courier, monospace;line-height: 1.5\"><code>\u3042\u306a\u305f\u306fAWS\u306e\u6700\u65b0\u60c5\u5831\u3092\u89e3\u8aac\u3059\u308b\u30d7\u30ed\u306e\u30c6\u30c3\u30af\u30e9\u30a4\u30bf\u30fc\u3067\u3059\u3002\n\u3042\u306a\u305f\u306f\u512a\u79c0\u306a\u30c6\u30af\u30cb\u30ab\u30eb\u30e9\u30a4\u30bf\u30fc\u3067\u3059\u3002\n\u30e6\u30fc\u30b6\u30fc\u304b\u3089\u9001\u3089\u308c\u3066\u304d\u305fAWS\u306e\u8a18\u4e8b\u30bf\u30a4\u30c8\u30eb\u3068\u672c\u6587\u3092\u5143\u306b\u3001\n\u6307\u5b9a\u3055\u308c\u305f\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3067\u65e5\u672c\u8a9e\u306e\u8981\u7d04\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\u4f59\u8a08\u306a\u6328\u62f6\u3084\u300c\u65b0\u7740\u8a18\u4e8b\u306f\u3042\u308a\u307e\u305b\u3093\u300d\u306a\u3069\u306e\u8a00\u8449\u306f\u4e0d\u8981\u3067\u3059\u3002\n\u5165\u529b\u3055\u308c\u305f\u30cb\u30e5\u30fc\u30b9\u8a18\u4e8b\u3092\u8aad\u307f\u3001\u30a8\u30f3\u30b8\u30cb\u30a2\u304c\u76f4\u611f\u7684\u306b\u7406\u89e3\u3067\u304d\u308b\u300c\u30e2\u30c0\u30f3\u306a\u30ab\u30fc\u30c9\u98a8\u30b5\u30de\u30ea\u30fc\u300d\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\nSlack\u3067\u898b\u3084\u3059\u304f\u8868\u793a\u3059\u308b\u305f\u3081\u306b\u3001\u4ee5\u4e0b\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3068\u30eb\u30fc\u30eb\u3092\u53b3\u5b88\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\n# \ud83d\udcdd \u5fc5\u9808\u30eb\u30fc\u30eb\n- **\u8a18\u4e8b\u306e\u30bf\u30a4\u30c8\u30eb\u306f\u3001\u5143\u306e\u610f\u5473\u3092\u4fdd\u3061\u3064\u3064\u3001\u30ad\u30e3\u30c3\u30c1\u30fc\u306a\u65e5\u672c\u8a9e\u306b\u7ffb\u8a33\u3057\u3066\u304f\u3060\u3055\u3044\u3002**\n- \u3059\u3079\u3066\u306e\u884c\u306e\u5148\u982d\u306b <code>&gt;<\/code> \u3068\u534a\u89d2\u30b9\u30da\u30fc\u30b9\u3092\u5165\u308c\u3066\u304f\u3060\u3055\u3044\uff08\u5f15\u7528\u8868\u793a\u306b\u3059\u308b\u305f\u3081\uff09\u3002\n- \u30bf\u30a4\u30c8\u30eb\u306f\u30a2\u30a4\u30b3\u30f3\u3092\u4ed8\u3051\u3001\u592a\u5b57\u3067\u76ee\u7acb\u305f\u305b\u3066\u304f\u3060\u3055\u3044\u3002\n- \u91cd\u8981\u306a\u30ad\u30fc\u30ef\u30fc\u30c9\uff08\u30b5\u30fc\u30d3\u30b9\u540d\u306a\u3069\uff09\u306f <code>\u30b3\u30fc\u30c9\u30d6\u30ed\u30c3\u30af\u8868\u793a<\/code> \uff08\u30d0\u30c3\u30af\u30af\u30a9\u30fc\u30c8\u3067\u56f2\u3080\uff09\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\n# \ud83d\udce4 \u51fa\u529b\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\n> \ud83c\udd95 *AWS New Update*\n> # [\u65e5\u672c\u8a9e\u306b\u7ffb\u8a33\u3057\u305f\u30bf\u30a4\u30c8\u30eb]\n>\n> **\u26a1\ufe0f 3\u884c\u30b5\u30de\u30ea\u30fc**\n> \u2022 [\u30dd\u30a4\u30f3\u30c81]\n> \u2022 [\u30dd\u30a4\u30f3\u30c82]\n> \u2022 [\u30dd\u30a4\u30f3\u30c83]\n>\n> \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n>\n> **\ud83d\udee0\ufe0f \u4f55\u304c\u5909\u308f\u3063\u305f\uff1f**\n> [\u3053\u3053\u306b\u5909\u66f4\u70b9\u3092\u7c21\u6f54\u306b\u8a18\u8ff0\u3002\u91cd\u8981\u306a\u5358\u8a9e\u306f <code>EC2<\/code> \u306e\u3088\u3046\u306b\u56f2\u3080]\n>\n> **\ud83d\udc40 \u3069\u3093\u306a\u6642\u306b\u5b09\u3057\u3044\uff1f**\n> [\u30a8\u30f3\u30b8\u30cb\u30a2\u76ee\u7dda\u3067\u306e\u30e1\u30ea\u30c3\u30c8\u3092\u4e00\u8a00\u3067]\n>\n> \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n> *Generated by Dify AI \ud83e\udd16*<\/code><\/pre>\n<\/p><\/div>\n<\/details>\n<p>\u753b\u9762\u53f3\u306e\u65b9\u306b\u3042\u308b\u30e2\u30c7\u30eb\u3092\u81ea\u5206\u306e\u4f7f\u7528\u3057\u305f\u3044\u30e2\u30c7\u30eb\u306b\u3057\u3066\u304a\u304d\u307e\u3059\u3002<br \/>\n<a href=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/image-20260101-110524-1.png\"><img decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/image-20260101-110524-1-1024x487.png\" alt=\"\" \/><\/a><\/p>\n<p>\u305d\u3057\u3066\u6700\u5f8c\u306b\u3001Difi\u306eAPI\u30ad\u30fc\u3092Lambda\u306e\u74b0\u5883\u5909\u6570\uff08Dify_API_KEY\uff09\u306b\u767b\u9332\u3057\u307e\u3059\u3002<br \/>\nAPI\u30ad\u30fc\u306e\u78ba\u8a8d\u306e\u4ed5\u65b9\u306f\u753b\u50cf\u306eAPI\u30a2\u30af\u30bb\u30b9\u3092\u62bc\u3057\u307e\u3059\u3002<br \/>\n<a href=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/5801af360882259e093855f04a54f97c.png\"><img decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/5801af360882259e093855f04a54f97c-1024x488.png\" alt=\"\" \/><\/a><br \/>\n\u4e0b\u8a18\u753b\u50cf\u306e\u30da\u30fc\u30b8\u306b\u79fb\u308b\u306e\u3067\u3001\u4e0b\u8a18\u753b\u50cf\u306eAPI\u30b5\u30fc\u30d0\u3092\u30b3\u30d4\u30fc\u3057\u3001<br \/>\nDify_API_KEY\u306e\u5024\u306b\u5f35\u308a\u4ed8\u3051\u307e\u3059\u3002<br \/>\n<a href=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/b79e79602750f463ca9759a1fdedf284.png\"><img decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/b79e79602750f463ca9759a1fdedf284-1024x480.png\" alt=\"\" \/><\/a><\/p>\n<p>\u3053\u308c\u3067\u3001\u8a2d\u5b9a\u306f\u5b8c\u4e86\u3067\u3059\u3002<br \/>\nLambda\u306e\u30c6\u30b9\u30c8\u30bf\u30d6\u3067\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001Slack\u306b\u901a\u77e5\u3055\u308c\u308b\u306f\u305a\u3067\u3059\uff01<br \/>\n<a href=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/7d8c1d85bb7b2da4e97e0817371b2d66.png\"><img decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/7d8c1d85bb7b2da4e97e0817371b2d66-1024x269.png\" alt=\"\" \/><\/a><\/p>\n<h2>\u901a\u77e5\u3055\u308c\u308b\u3082\u306e<\/h2>\n<p>\u30cb\u30e5\u30fc\u30b9\u304c\u3042\u308b\u65e5\u306b\u306f\u4e0b\u8a18\u753b\u50cf\u306e\u3088\u3046\u306b\u901a\u77e5\u3055\u308c\u307e\u3059\u3002<br \/>\n<a href=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/771c15999f6851238acf28a73d332c85.png\"><img decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/771c15999f6851238acf28a73d332c85.png\" alt=\"\" \/><\/a><br \/>\n\u30cb\u30e5\u30fc\u30b9\u304c\u306a\u3044\u65e5\u306b\u306f\u4e0b\u8a18\u753b\u50cf\u306e\u3088\u3046\u306b\u901a\u77e5\u3055\u308c\u307e\u3059\u3002<br \/>\n<a href=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/870ef4fb7b4e63cbc4b6f8c237c6d0fe.png\"><img decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/870ef4fb7b4e63cbc4b6f8c237c6d0fe.png\" alt=\"\" \/><\/a><br \/>\n\u305d\u3057\u3066\u3001\u30cb\u30e5\u30fc\u30b9\u304c\u3042\u308b\u65e5\u306e\u30cb\u30e5\u30fc\u30b9\u30da\u30fc\u30b8\u306f\u3053\u306e\u3088\u3046\u306a\u30c7\u30b6\u30a4\u30f3\u3067\u3059\u3002<br \/>\n<a href=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/9a44edd6f6d422ab5bc1c59202f52431.png\"><img decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/9a44edd6f6d422ab5bc1c59202f52431.png\" alt=\"\" \/><\/a><br \/>\n\u904e\u53bb\u306e\u30a2\u30fc\u30ab\u30a4\u30d6\u30da\u30fc\u30b8\u306e\u30ea\u30f3\u30af\u3092\u62bc\u3059\u3068\u4e0b\u8a18\u753b\u50cf\u306e\u3088\u3046\u306b\u8868\u793a\u3055\u308c\u307e\u3059\u3002<br \/>\n<a href=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/dacf27605b11d824e7752e43bae1c4b3.png\"><img decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2026\/01\/dacf27605b11d824e7752e43bae1c4b3.png\" alt=\"\" \/><\/a><\/p>\n<h2>\u307e\u3068\u3081<\/h2>\n<p>\u4eca\u56de\u306e\u4f5c\u6210\u3067\u3001\u306f\u3058\u3081\u306f\u8981\u7d04\u3055\u308c\u305f\u30cb\u30e5\u30fc\u30b9\u6587\u3092\u76f4\u63a5Slack\u306b\u901a\u77e5\u3059\u308b\u4ed5\u7d44\u307f\u3067\u4f5c\u6210\u3057\u307e\u3057\u305f\u304c\u3001\u901a\u77e5\u304c\u591a\u3044\u306e\u3068\u3001\u5927\u4e8b\u306a\u30e1\u30e2\u306a\u3069\u304c\u6d41\u308c\u3066\u3057\u307e\u3046\u53ef\u80fd\u6027\u3082\u3042\u3063\u305f\u306e\u3067\u3001HTML\u5f62\u5f0f\u306b\u5909\u66f4\u3057\u307e\u3057\u305f\u3002<br \/>\n\u307e\u305f\u3001\u500b\u4eba\u7684\u306b\u3088\u304f\u3067\u304d\u305f\u306a\u3068\u601d\u3046\u70b9\u306f\u3001\u30cb\u30e5\u30fc\u30b9\u307a\u30fc\u30b8\u304b\u3089\u539f\u6587\u306e\u8a18\u4e8b\u306b\u3044\u3051\u308b\u3088\u3046\u306b\u3057\u305f\u3053\u3068\u3068\u3001\u5404\u30cb\u30e5\u30fc\u30b9\u30da\u30fc\u30b8\u304b\u3089\u30a2\u30fc\u30ab\u30a4\u30d6\u4e00\u89a7\u306e\u307a\u30fc\u30b8\u306b\u79fb\u52d5\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u305f\u70b9\u3067\u3059\u3002<\/p>\n<p>\u4f7f\u3063\u3066\u3044\u304f\u3046\u3061\u306b\u554f\u984c\u70b9\u306a\u3069\u3082\u898b\u3048\u3066\u3001\u305d\u306e\u305f\u3073\u6539\u5584\u3057\u3066\u3044\u304f\u3053\u3068\u304c\u3067\u304d\u305f\u306e\u3067\u3001\u3088\u308a\u3088\u3044\u3082\u306e\u304c\u4f5c\u308c\u305f\u3068\u601d\u3044\u307e\u3059\u3002<br \/>\ninput\u7528\u306e\u30a2\u30d7\u30ea\u304c\u4f5c\u6210\u51fa\u6765\u3066\u3001AWS\u306e\u6700\u65b0\u60c5\u5831\u3082\u78ba\u8a8d\u3067\u304d\u308b\u306e\u3067\u3001\u4f5c\u6210\u3057\u3066\u3088\u304b\u3063\u305f\u3068\u601d\u3044\u307e\u3057\u305f\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u306f\u3058\u3081\u306b \u65e5\u3005\u5927\u91cf\u306b\u66f4\u65b0\u3055\u308c\u308bAWS\u306e\u6700\u65b0\u60c5\u5831\u3092\u30ad\u30e3\u30c3\u30c1\u30a2\u30c3\u30d7\u3059\u308b\u306e\u306f\u5927\u5909\u3067\u3059\u3002\u4e00\u65e5\u306b\u4f55\u4ef6\u3082\u306e\u8a18\u4e8b\u304c\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u305f\u308a\u3001\u82f1\u8a9e\u306e\u539f\u6587\u3092\u7ffb\u8a33\u3057\u3066\u8aad\u3093\u3060\u308a\u3059\u308b\u306e\u306b\u306f\u6642\u9593\u304c\u304b\u304b\u308a\u307e\u3059\u3002 \u305d\u3053\u3067\u3001\u6700\u65b0\u60c5\u5831\u306e\u30ad\u30e3\u30c3\u30c1\u30a2\u30c3\u30d7\u3092\u3082\u3063\u3068&#8230;<\/p>\n","protected":false},"author":231,"featured_media":30570,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_locale":"ja","_original_post":"https:\/\/www.skyarch.net\/blog\/?p=30534","footnotes":""},"categories":[1260,1276],"tags":[1275,1338],"class_list":{"0":"post-30534","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-ai","8":"category-amazon-bedrock","9":"tag-amazon-bedrock","10":"tag-dify","11":"ja"},"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.skyarch.net\/blog\/wp-json\/wp\/v2\/posts\/30534","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.skyarch.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.skyarch.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.skyarch.net\/blog\/wp-json\/wp\/v2\/users\/231"}],"replies":[{"embeddable":true,"href":"https:\/\/www.skyarch.net\/blog\/wp-json\/wp\/v2\/comments?post=30534"}],"version-history":[{"count":14,"href":"https:\/\/www.skyarch.net\/blog\/wp-json\/wp\/v2\/posts\/30534\/revisions"}],"predecessor-version":[{"id":30573,"href":"https:\/\/www.skyarch.net\/blog\/wp-json\/wp\/v2\/posts\/30534\/revisions\/30573"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.skyarch.net\/blog\/wp-json\/wp\/v2\/media\/30570"}],"wp:attachment":[{"href":"https:\/\/www.skyarch.net\/blog\/wp-json\/wp\/v2\/media?parent=30534"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.skyarch.net\/blog\/wp-json\/wp\/v2\/categories?post=30534"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.skyarch.net\/blog\/wp-json\/wp\/v2\/tags?post=30534"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}