{"id":9554,"date":"2025-10-15T05:49:49","date_gmt":"2025-10-15T05:49:49","guid":{"rendered":"https:\/\/pokecon.jp\/job\/?p=9554"},"modified":"2025-10-15T05:49:49","modified_gmt":"2025-10-15T05:49:49","slug":"amazon-bedrock%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%83%8a%e3%83%ac%e3%83%83%e3%82%b8%e3%83%99%e3%83%bc%e3%82%b9%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%88%e3%81%86-play-developers-blog","status":"publish","type":"post","link":"https:\/\/pokecon.jp\/job\/9554\/","title":{"rendered":"Amazon Bedrock\u3092\u4f7f\u3063\u3066\u30ca\u30ec\u30c3\u30b8\u30d9\u30fc\u30b9\u3092\u4f5c\u3063\u3066\u307f\u3088\u3046 &#8211; PLAY DEVELOPERS BLOG"},"content":{"rendered":"\n<\/p>\n<div>\n<p><span itemscope=\"\" itemtype=\"http:\/\/schema.org\/Photograph\"><img decoding=\"async\" src=\"https:\/\/cdn-ak.f.st-hatena.com\/images\/fotolife\/p\/playjp\/20251015\/20251015133916.jpg\" width=\"1200\" height=\"630\" loading=\"lazy\" title=\"\" class=\"hatena-fotolife\" itemprop=\"image\"\/><\/span><\/p>\n<p>\u307f\u306a\u3055\u3093\u3001\u3053\u3093\u306b\u3061\u306f\u30024\u6708\u306b\u5165\u793e\u3057\u307e\u3057\u305f\u3001\u30e1\u30c7\u30a3\u30a2\u30b5\u30d7\u30e9\u30a4\u30c1\u30a7\u30fc\u30f3\u6280\u8853\u90e8\u958b\u767a\u7b2c2\u30b0\u30eb\u30fc\u30d7\u306e\u5c71\u672c\u3067\u3059\u3002\u666e\u6bb5\u306e\u958b\u767a\u3084\u30d3\u30b8\u30cd\u30b9\u306e\u696d\u52d9\u306b\u304a\u3044\u3066\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u5834\u9762\u306b\u906d\u9047\u3057\u305f\u3053\u3068\u306f\u306a\u3044\u3067\u3057\u3087\u3046\u304b\uff1f<\/p>\n<p>\u300c\u3042\u306e\u30d5\u30a1\u30a4\u30eb\u3001\u3069\u3053\u306b\u3042\u3063\u305f\u3063\u3051&#8230;\uff1f\u300d\u300c\u60c5\u5831\u304c\u70b9\u5728\u3057\u3066\u3044\u3066\u3069\u3053\u304b\u3089\u307f\u305f\u3089\u3044\u3044\u304b\u5206\u304b\u3089\u306a\u3044\u300d\u300c\u63a2\u3059\u306e\u306b\u6642\u9593\u304c\u304b\u304b\u308b\u3057\u3001\u3082\u3046\u8ae6\u3081\u3088\u3046\u30fb\u30fb\u30fb\u300d<\/p>\n<p>\u4eca\u56de\u3001Bedrock\u3092\u4f7f\u3063\u3066\u30ca\u30ec\u30c3\u30b8\u30d9\u30fc\u30b9\u3092\u4f5c\u6210\u3057\u3001\u3053\u306e\u3088\u3046\u306a\u8ab2\u984c\u3092\u89e3\u6c7a\u3057\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<h2 id=\"\u30b7\u30b9\u30c6\u30e0\u69cb\u6210\u56f3\">\u30b7\u30b9\u30c6\u30e0\u69cb\u6210\u56f3<\/h2>\n<p>\u4eca\u56de\u4f5c\u308b\u30b7\u30b9\u30c6\u30e0\u306e\u69cb\u6210\u56f3\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\u3002<\/p>\n<p><figure class=\"figure-image figure-image-fotolife\" title=\"\u30b7\u30b9\u30c6\u30e0\u69cb\u6210\u56f3\"><span itemscope=\"\" itemtype=\"http:\/\/schema.org\/Photograph\"><img decoding=\"async\" src=\"https:\/\/cdn-ak.f.st-hatena.com\/images\/fotolife\/p\/playjp\/20251015\/20251015133904.png\" width=\"780\" height=\"543\" loading=\"lazy\" title=\"\" class=\"hatena-fotolife\" itemprop=\"image\"\/><\/span><figcaption>\u30b7\u30b9\u30c6\u30e0\u69cb\u6210\u56f3<\/figcaption><\/figure>\n<\/p>\n<p>Slack\u30a2\u30d7\u30ea\u3092\u4f7f\u3044\u3001Lambda\u3068\u306e\u9023\u643a\u3092\u884c\u3044\u307e\u3059\u3002\u30d9\u30af\u30c8\u30eb\u30c7\u30fc\u30bf\u30b9\u30c8\u30ec\u30fc\u30b8\u306b\u306fS3 Vectors\u3092\u4f7f\u3044\u307e\u3059\uff082025\u5e747\u6708\u306b\u767a\u8868\u3055\u308c\u305f\u30b5\u30fc\u30d3\u30b9\uff09\u3002OpenSearch Serverless\u3092\u4f7f\u3063\u305f\u69cb\u7bc9\u3082\u53ef\u80fd\u3067\u3059\u304c\u3001\u6599\u91d1\u3092\u6291\u3048\u308b\u76ee\u7684\u304b\u3089S3 Vectors\u3092\u9078\u629e\u3057\u307e\u3057\u305f\uff08\u8a73\u7d30\u306f\u5f8c\u8ff0\uff09\u3002\u691c\u7d22\u306e\u30ec\u30a4\u30c6\u30f3\u30b7\u306b\u95a2\u3057\u3066\u3001S3 Vectors\u306f1\u79d2\u672a\u6e80\u3068\u306e\u3053\u3068\u3067\u3059\u306e\u3067\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u3057\u3066\u3082\u554f\u984c\u306a\u3044\u3068\u8003\u3048\u307e\u3057\u305f\u3002\u57f7\u7b46\u6642\u70b9\uff082025\u5e7410\u6708\uff09\u3067\u306f\u30d7\u30ec\u30d3\u30e5\u30fc\u6a5f\u80fd\u3067\u6771\u4eac\u30ea\u30fc\u30b8\u30e7\u30f3\u3067\u306e\u5229\u7528\u306f\u4e0d\u53ef\u3060\u3063\u305f\u305f\u3081\u3001\u4eca\u56de\u306f\u30d0\u30fc\u30b8\u30cb\u30a2\u5317\u90e8\u306b\u69cb\u7bc9\u3057\u307e\u3057\u305f\u3002<\/p>\n<p>\u30ec\u30a4\u30c6\u30f3\u30b7\u306b\u3064\u3044\u3066\u306e\u8a73\u7d30\u306f\u4e0b\u8a18\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p><a target=\"_blank\" href=\"https:\/\/aws.amazon.com\/blogs\/aws\/introducing-amazon-s3-vectors-first-cloud-storage-with-native-vector-support-at-scale\/\">https:\/\/aws.amazon.com\/blogs\/aws\/introducing-amazon-s3-vectors-first-cloud-storage-with-native-vector-support-at-scale\/<\/a><\/p>\n<p>\u6700\u7d42\u7684\u306b\u4e0b\u8a18\u306e\u3088\u3046\u306bSlack\u3067\u793e\u5185\u30ca\u30ec\u30c3\u30b8\u306b\u95a2\u3059\u308b\u8cea\u554f\u3092\u884c\u3044\u3001LLM\u304b\u3089\u56de\u7b54\u304c\u5f97\u3089\u308c\u308c\u3070\u30b4\u30fc\u30eb\u3067\u3059\u3002<\/p>\n<p><figure class=\"figure-image figure-image-fotolife\" title=\"\u30b4\u30fc\u30eb\"><span itemscope=\"\" itemtype=\"http:\/\/schema.org\/Photograph\"><img decoding=\"async\" src=\"https:\/\/cdn-ak.f.st-hatena.com\/images\/fotolife\/p\/playjp\/20251015\/20251015133827.png\" width=\"1200\" height=\"204\" loading=\"lazy\" title=\"\" class=\"hatena-fotolife\" itemprop=\"image\"\/><\/span><figcaption>\u30b4\u30fc\u30eb<\/figcaption><\/figure>\n<\/p>\n<h3 id=\"\u6599\u91d1\u306b\u3064\u3044\u3066\">\u6599\u91d1\u306b\u3064\u3044\u3066<\/h3>\n<p>\u88dc\u8db3\u3068\u3057\u3066\u3001S3 Vectors\u3068OpenSearch Serverless\u306e\u6599\u91d1\u306b\u3064\u3044\u3066\u8a18\u8f09\u3057\u307e\u3059\u3002\u30ea\u30fc\u30b8\u30e7\u30f3\u306f\u30d0\u30fc\u30b8\u30cb\u30a2\u5317\u90e8\u3067\u306e\u5024\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<details>\n<summary> \u6599\u91d1\u306b\u3064\u3044\u3066\uff08\u30af\u30ea\u30c3\u30af\u3067\u5c55\u958b\uff09<\/summary>\n<\/details>\n<h4 id=\"S3-Vectors\">S3 Vectors<\/h4>\n<ul>\n<li>\u30b9\u30c8\u30ec\u30fc\u30b8\u6599\u91d1 : 0.06 USD \/ GB<\/li>\n<li>PUT\u30ea\u30af\u30a8\u30b9\u30c8 : 0.20 USD \/ GB<\/li>\n<li>GET,LIST,\u305d\u306e\u4ed6\u5168\u3066\u306e\u30ea\u30af\u30a8\u30b9\u30c8 : 0.055 USD \/ 1000 \u30ea\u30af\u30a8\u30b9\u30c8<\/li>\n<li>\u30af\u30a8\u30ea\u30ea\u30af\u30a8\u30b9\u30c8 : 0.0025 USD \/ 1000 \u30ea\u30af\u30a8\u30b9\u30c8<\/li>\n<li>\u30af\u30a8\u30ea\u3067\u51e6\u7406\u3059\u308b\u30d9\u30af\u30bf\u30fc\u30c7\u30fc\u30bf\n<ul>\n<li>\u6700\u521d\u306e10\u4e07\u30d9\u30af\u30bf\u30fc : 0.0040 USD \/ TB<\/li>\n<li>10\u4e07\u30d9\u30af\u30bf\u30fc\u4ee5\u964d : 0.0020 USD \/ TB<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u6599\u91d1\u4f8b\uff08\u516c\u5f0f\u3088\u308a\u629c\u7c8b\uff09<\/p>\n<blockquote>\n<p>Pricing example 1:<\/p>\n<p>You are building a RAG workflow to provide accurate and relevant text responses to customers. You have 10 million vectors, each consisting of 4 KB vector data, 1 KB of filterable metadata, 1 KB of non-filterable metadata, and a key (0.17 KB each), totaling 6.17KB per vector. The 10 million vectors are split into 40 indexes for each of your customers, consisting of 250,000 vectors each. You update the vectors in your vector index every six months, removing old vectors and uploading new ones. This results in PUT of ~16.7% of your data per month. This example uses pricing for the US East (N. Virginia) AWS Region.<\/p>\n<\/blockquote>\n<p>\u5408\u8a08: $11.38\uff08\u6708\u3042\u305f\u308a\uff09<\/p>\n<p>\u8a73\u7d30\u306f\u4e0b\u8a18\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u8a00\u8a9e\u8a2d\u5b9a\u300cEnglish\u300d\u304b\u3089\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002<\/p>\n<p><iframe src=\"https:\/\/hatenablog-parts.com\/embed?url=https%3A%2F%2Faws.amazon.com%2Fs3%2Fpricing%2F%3Fnc1%3Dh_ls\" title=\"S3 Pricing\" class=\"embed-card embed-webcard\" scrolling=\"no\" frameborder=\"0\" style=\"display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;\" loading=\"lazy\"><\/iframe><cite class=\"hatena-citation\"><a target=\"_blank\" href=\"https:\/\/aws.amazon.com\/s3\/pricing\/?nc1=h_ls\">aws.amazon.com<\/a><\/cite><\/p>\n<h4 id=\"OpenSearch-Serverless\">OpenSearch Serverless<\/h4>\n<p>OpenSearch Serverless\u306e\u5834\u5408\u3001\u6599\u91d1\u4f53\u7cfb\u306f\u3084\u3084\u8907\u96d1\u306a\u3068\u3053\u308d\u304c\u3042\u308a\u307e\u3059\u306e\u3067\u3001\u8a73\u7d30\u306f\u7701\u304d\u307e\u3059\u304c\u3001\u5229\u7528\u6642\u306f\u6700\u5c0f\u69cb\u6210\u3067\u3082$170\uff08\u6708\u3042\u305f\u308a\uff09\u7a0b\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>\u8a73\u7d30\u306f\u4e0b\u8a18\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p><iframe src=\"https:\/\/hatenablog-parts.com\/embed?url=https%3A%2F%2Faws.amazon.com%2Fjp%2Fblogs%2Fnews%2Famazon-opensearch-serverless-cost-effective-search-capabilities-at-any-scale%2F\" title=\"Amazon OpenSearch Serverless \u306b\u3088\u308b\u3042\u3089\u3086\u308b\u898f\u6a21\u306b\u304a\u3051\u308b\u8cbb\u7528\u5bfe\u52b9\u679c\u306e\u9ad8\u3044\u691c\u7d22\u6a5f\u80fd | Amazon Web Services\" class=\"embed-card embed-webcard\" scrolling=\"no\" frameborder=\"0\" style=\"display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;\" loading=\"lazy\"><\/iframe><cite class=\"hatena-citation\"><a target=\"_blank\" href=\"https:\/\/aws.amazon.com\/jp\/blogs\/news\/amazon-opensearch-serverless-cost-effective-search-capabilities-at-any-scale\/\">aws.amazon.com<\/a><\/cite><\/p>\n<p><iframe src=\"https:\/\/hatenablog-parts.com\/embed?url=https%3A%2F%2Faws.amazon.com%2Fjp%2Fopensearch-service%2Fpricing%2F\" title=\"\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u691c\u7d22\u30a8\u30f3\u30b8\u30f3 - Amazon OpenSearch Service \u306e\u6599\u91d1 - AWS\" class=\"embed-card embed-webcard\" scrolling=\"no\" frameborder=\"0\" style=\"display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;\" loading=\"lazy\"><\/iframe><cite class=\"hatena-citation\"><a target=\"_blank\" href=\"https:\/\/aws.amazon.com\/jp\/opensearch-service\/pricing\/\">aws.amazon.com<\/a><\/cite><\/p>\n<h4 id=\"\u6bd4\u8f03\">\u6bd4\u8f03<\/h4>\n<p>\u6599\u91d1\u3092\u6bd4\u8f03\u3059\u308b\u3068\u3001\u6708\u3042\u305f\u308aS3 Vectors\u304c\u300c$11.38\u300d\u3001OpenSearch Serverless\u304c\u300c$170\u300d\u3067\u3001S3 Vectors\u3092\u4f7f\u3046\u3068\u304b\u306a\u308a\u8cbb\u7528\u304c\u6291\u3048\u3089\u308c\u308b\u3053\u3068\u304c\u5206\u304b\u308a\u307e\u3059\u3002\u3042\u304f\u307e\u3067\u524d\u8ff0\u306e\u69cb\u6210\u306b\u304a\u3051\u308b\u8cbb\u7528\u306b\u306a\u308a\u307e\u3059\u306e\u3067\u3001\u672c\u756a\u5229\u7528\u306e\u969b\u306f\u5fc5\u305a\u3054\u81ea\u8eab\u3067\u8cbb\u7528\u306b\u3064\u3044\u3066\u306f\u8a08\u7b97\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<h2 id=\"\u69cb\u7bc9\">\u69cb\u7bc9<\/h2>\n<p>\u30b7\u30b9\u30c6\u30e0\u69cb\u7bc9\u306b\u3042\u305f\u308a\u3001\u4eca\u56de\u3084\u308b\u3053\u3068\u306e\u5927\u307e\u304b\u306a\u6d41\u308c\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\u3002<\/p>\n<ul>\n<li>\u30ca\u30ec\u30c3\u30b8\u30d9\u30fc\u30b9\u3092\u4f5c\u6210<\/li>\n<li>Lambda \u95a2\u6570\u3092\u4f5c\u6210<\/li>\n<li>Slack\u30a2\u30d7\u30ea\u3092\u4f5c\u6210<\/li>\n<\/ul>\n<h3 id=\"\u30ca\u30ec\u30c3\u30b8\u30d9\u30fc\u30b9\u3092\u4f5c\u6210\">\u30ca\u30ec\u30c3\u30b8\u30d9\u30fc\u30b9\u3092\u4f5c\u6210<\/h3>\n<p>\u307e\u305a\u306f\u3001\u793e\u5185\u30ca\u30ec\u30c3\u30b8\u7528S3\u30d0\u30b1\u30c3\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u30ea\u30fc\u30b8\u30e7\u30f3\u306f\u300c\u30d0\u30fc\u30b8\u30cb\u30a2\u5317\u90e8 (us-east-1)\u300d\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u3053\u306btxt\u3084pdf\u306a\u3069\u306e\u30d5\u30a1\u30a4\u30eb\u5f62\u5f0f\u306e\u793e\u5185\u30ca\u30ec\u30c3\u30b8\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u307e\u3059\u3002<\/p>\n<p>\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u30d5\u30a1\u30a4\u30eb\u5f62\u5f0f\u306e\u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u4e0b\u8a18\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p><iframe src=\"https:\/\/hatenablog-parts.com\/embed?url=https%3A%2F%2Fdocs.aws.amazon.com%2Fja_jp%2Fbedrock%2Flatest%2Fuserguide%2Fknowledge-base-ds.html\" title=\"Amazon Bedrock \u30ca\u30ec\u30c3\u30b8\u30d9\u30fc\u30b9\u30c7\u30fc\u30bf\u306e\u524d\u63d0\u6761\u4ef6 - Amazon Bedrock\" class=\"embed-card embed-webcard\" scrolling=\"no\" frameborder=\"0\" style=\"display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;\" loading=\"lazy\"><\/iframe><cite class=\"hatena-citation\"><a target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/ja_jp\/bedrock\/latest\/userguide\/knowledge-base-ds.html\">docs.aws.amazon.com<\/a><\/cite><\/p>\n<p>\u6b21\u306b\u3001Bedrock\u306e\u30b3\u30f3\u30bd\u30fc\u30eb\u753b\u9762\u306b\u3066\u30e2\u30c7\u30eb\u30a2\u30af\u30bb\u30b9\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u884c\u3044\u3001\u30e2\u30c7\u30eb\u3092\u6709\u52b9\u5316\u3057\u307e\u3059\u3002\u4eca\u56de\u306f\u30b3\u30b9\u30c8\u9762\u3092\u8003\u616e\u3057\u300cAmazon Nova Micro\u300d\u3092\u4f7f\u3044\u307e\u3059\u3002<\/p>\n<p><figure class=\"figure-image figure-image-fotolife\" title=\"\u30e2\u30c7\u30eb\u30a2\u30af\u30bb\u30b9\u3092\u30ea\u30af\u30a8\u30b9\u30c8\"><span itemscope=\"\" itemtype=\"http:\/\/schema.org\/Photograph\"><img decoding=\"async\" src=\"https:\/\/cdn-ak.f.st-hatena.com\/images\/fotolife\/p\/playjp\/20251015\/20251015133857.png\" width=\"1200\" height=\"354\" loading=\"lazy\" title=\"\" class=\"hatena-fotolife\" itemprop=\"image\"\/><\/span><figcaption>\u30e2\u30c7\u30eb\u30a2\u30af\u30bb\u30b9\u3092\u30ea\u30af\u30a8\u30b9\u30c8<\/figcaption><\/figure>\n<\/p>\n<p>\u30e2\u30c7\u30eb\u306e\u6709\u52b9\u5316\u304c\u3067\u304d\u305f\u3089\u3001\u30ca\u30ec\u30c3\u30b8\u30d9\u30fc\u30b9\u306e\u4f5c\u6210\u306b\u79fb\u308a\u307e\u3059\u3002<\/p>\n<p>\u4eca\u56de\u306f\u3001S3 Vectors\u3092\u4f7f\u3046\u306e\u3067\u300c\u30d9\u30af\u30c8\u30eb\u30b9\u30c8\u30a2\u3092\u542b\u3080\u30ca\u30ec\u30c3\u30b8\u30d9\u30fc\u30b9\u300d\u3092\u9078\u629e\u3057\u307e\u3059\u3002<\/p>\n<p><figure class=\"figure-image figure-image-fotolife\" title=\"\u30ca\u30ec\u30c3\u30b8\u30d9\u30fc\u30b9\u3092\u4f5c\u6210\u3092\u62bc\u4e0b\"><span itemscope=\"\" itemtype=\"http:\/\/schema.org\/Photograph\"><img decoding=\"async\" src=\"https:\/\/cdn-ak.f.st-hatena.com\/images\/fotolife\/p\/playjp\/20251015\/20251015133811.png\" width=\"1200\" height=\"548\" loading=\"lazy\" title=\"\" class=\"hatena-fotolife\" itemprop=\"image\"\/><\/span><figcaption>\u30ca\u30ec\u30c3\u30b8\u30d9\u30fc\u30b9\u3092\u4f5c\u6210\u3092\u62bc\u4e0b<\/figcaption><\/figure>\n<\/p>\n<p>\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306b\u306f\u524d\u8ff0\u306eS3\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002<\/p>\n<p><figure class=\"figure-image figure-image-fotolife\" title=\"\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306b\u306fS3\u3092\u9078\u629e\"><span itemscope=\"\" itemtype=\"http:\/\/schema.org\/Photograph\"><img decoding=\"async\" src=\"https:\/\/cdn-ak.f.st-hatena.com\/images\/fotolife\/p\/playjp\/20251015\/20251015133815.png\" width=\"1200\" height=\"637\" loading=\"lazy\" title=\"\" class=\"hatena-fotolife\" itemprop=\"image\"\/><\/span><figcaption>\u30c7\u30fc<br \/>\n\u30bf\u30bd\u30fc\u30b9\u306b\u306fS3\u3092\u9078\u629e<\/figcaption><\/figure>\n<\/p>\n<p>\u57cb\u3081\u8fbc\u307f\u30e2\u30c7\u30eb\u306b\u306f\u300cTitan Text Embeddings V2\u300d\u3092\u9078\u629e\u3057\u307e\u3059\u3002<\/p>\n<p><figure class=\"figure-image figure-image-fotolife\" title=\"\u30e2\u30c7\u30eb\u3092\u9078\u629e\"><span itemscope=\"\" itemtype=\"http:\/\/schema.org\/Photograph\"><img decoding=\"async\" src=\"https:\/\/cdn-ak.f.st-hatena.com\/images\/fotolife\/p\/playjp\/20251015\/20251015133819.png\" width=\"1200\" height=\"1017\" loading=\"lazy\" title=\"\" class=\"hatena-fotolife\" itemprop=\"image\"\/><\/span><figcaption>\u30e2\u30c7\u30eb\u3092\u9078\u629e<\/figcaption><\/figure>\n<\/p>\n<p>\u30d9\u30af\u30c8\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u306f\u300cAmazon S3 Vectors\u300d\u3092\u9078\u629e\u3057\u307e\u3059\u3002<\/p>\n<p><figure class=\"figure-image figure-image-fotolife\" title=\"\u30d9\u30af\u30c8\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u306fS3 Vectors\u3092\u9078\u629e\"><span itemscope=\"\" itemtype=\"http:\/\/schema.org\/Photograph\"><img decoding=\"async\" src=\"https:\/\/cdn-ak.f.st-hatena.com\/images\/fotolife\/p\/playjp\/20251015\/20251015133854.png\" width=\"1200\" height=\"247\" loading=\"lazy\" title=\"\" class=\"hatena-fotolife\" itemprop=\"image\"\/><\/span><figcaption>\u30d9\u30af\u30c8\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u306fS3 Vectors\u3092\u9078\u629e<\/figcaption><\/figure>\n<\/p>\n<p>\u30ca\u30ec\u30c3\u30b8\u30d9\u30fc\u30b9\u306e\u4f5c\u6210\u304c\u3067\u304d\u305f\u3089\u3001\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e\u540c\u671f\u3092\u884c\u3044\u307e\u3059\u3002\u3053\u308c\u3067\u793e\u5185\u30ca\u30ec\u30c3\u30b8\u304c\u30d9\u30af\u30c8\u30eb\u30c7\u30fc\u30bf\u5316\u3055\u308c\u3001\u30d9\u30af\u30c8\u30eb\u30b9\u30c8\u30ec\u30fc\u30b8\u306b\u4fdd\u5b58\u3055\u308c\u307e\u3059\u3002\u540c\u671f\u306f\u793e\u5185\u30ca\u30ec\u30c3\u30b8\u3092S3\u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\u3054\u3068\u306b\u5fc5\u8981\u3067\u3059\u3002<\/p>\n<p><figure class=\"figure-image figure-image-fotolife\" title=\"\u30c7\u30fc\u30bf\u306e\u540c\u671f\"><span itemscope=\"\" itemtype=\"http:\/\/schema.org\/Photograph\"><img decoding=\"async\" src=\"https:\/\/cdn-ak.f.st-hatena.com\/images\/fotolife\/p\/playjp\/20251015\/20251015133901.png\" width=\"1200\" height=\"426\" loading=\"lazy\" title=\"\" class=\"hatena-fotolife\" itemprop=\"image\"\/><\/span><figcaption>\u30c7\u30fc\u30bf\u306e\u540c\u671f<\/figcaption><\/figure>\n<\/p>\n<p>\u4ee5\u4e0a\u3067\u3001\u30ca\u30ec\u30c3\u30b8\u30d9\u30fc\u30b9\u306e\u4f5c\u6210\u306f\u5b8c\u4e86\u3067\u3059\u3002<\/p>\n<h3 id=\"Lambda\u95a2\u6570\u306e\u4f5c\u6210\">Lambda\u95a2\u6570\u306e\u4f5c\u6210<\/h3>\n<p>\u30ca\u30ec\u30c3\u30b8\u30d9\u30fc\u30b9\u306e\u4f5c\u6210\u304c\u3067\u304d\u305f\u3089\u3001\u6b21\u306f Lambda \u95a2\u6570\u306e\u4f5c\u6210\u3092\u884c\u3044\u307e\u3059\u3002<\/p>\n<p>Lambda \u95a2\u6570\u306e\u5f79\u5272\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\u3002<\/p>\n<ul>\n<li>Slack\u304b\u3089\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u53d6\u5f97<\/li>\n<li>\u30e1\u30c3\u30bb\u30fc\u30b8\u3092LLM\u3078\u9001\u4fe1<\/li>\n<li>LLM\u304b\u3089\u306e\u56de\u7b54\u3092Slack\u3078\u6295\u7a3f<\/li>\n<\/ul>\n<p>\u30e9\u30f3\u30bf\u30a4\u30e0\u306b\u306f\u300cNode.js 22.x\u300d\u3001\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306b\u306f\u300cx86_64\u300d\u3092\u9078\u629e\u3057\u307e\u3059\u3002<\/p>\n<p><figure class=\"figure-image figure-image-fotolife\" title=\"\u30e9\u30e0\u30c0\u3092\u4f5c\u6210\"><span itemscope=\"\" itemtype=\"http:\/\/schema.org\/Photograph\"><img decoding=\"async\" src=\"https:\/\/cdn-ak.f.st-hatena.com\/images\/fotolife\/p\/playjp\/20251015\/20251015133823.png\" width=\"1200\" height=\"527\" loading=\"lazy\" title=\"\" class=\"hatena-fotolife\" itemprop=\"image\"\/><\/span><figcaption>\u30e9\u30e0\u30c0\u3092\u4f5c\u6210<\/figcaption><\/figure>\n<\/p>\n<p>\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u6642\u9593\u306f3\u5206\u306b\u5909\u66f4\u3057\u307e\u3059\u3002<\/p>\n<p><figure class=\"figure-image figure-image-fotolife\" title=\"\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u6642\u9593\u3092\u5909\u66f4\"><span itemscope=\"\" itemtype=\"http:\/\/schema.org\/Photograph\"><img decoding=\"async\" src=\"https:\/\/cdn-ak.f.st-hatena.com\/images\/fotolife\/p\/playjp\/20251015\/20251015133831.png\" width=\"1200\" height=\"227\" loading=\"lazy\" title=\"\" class=\"hatena-fotolife\" itemprop=\"image\"\/><\/span><figcaption>\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u6642\u9593\u3092\u5909\u66f4<\/figcaption><\/figure>\n<\/p>\n<p>Lambda \u95a2\u6570\u306e\u5b9f\u884c\u30ed\u30fc\u30eb\u306b\u6a29\u9650\u3092\u4ed8\u4e0e\u3057\u307e\u3059\u3002\u4eca\u56de\u306f\u300cAmazonBedrockFullAccess\u300d\u3092\u4ed8\u4e0e\u3057\u307e\u3059\u3002\u672c\u756a\u5229\u7528\u306e\u969b\u306f\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u6a29\u9650\u306f\u6700\u5c0f\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>Slack\u30a2\u30d7\u30ea\u7528\u306b\u95a2\u6570URL\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u4eca\u56de\u306f\u69cb\u6210\u3092\u30b7\u30f3\u30d7\u30eb\u306b\u3059\u308b\u305f\u3081\u306b\u8a8d\u8a3c\u30bf\u30a4\u30d7\u306b\u306f\u300cNONE\u300d\u3092\u9078\u629e\u3057\u307e\u3059\u3002\u305f\u3060\u3057\u3001URL\u3092\u77e5\u3063\u3066\u3044\u308b\u4eba\u306a\u3089\u8ab0\u3067\u3082\u5b9f\u884c\u3067\u304d\u307e\u3059\u306e\u3067\u53d6\u308a\u6271\u3044\u306b\u306f\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p><figure class=\"figure-image figure-image-fotolife\" title=\"\u95a2\u6570URL\u3092\u4f5c\u6210\"><span itemscope=\"\" itemtype=\"http:\/\/schema.org\/Photograph\"><img decoding=\"async\" src=\"https:\/\/cdn-ak.f.st-hatena.com\/images\/fotolife\/p\/playjp\/20251015\/20251015133847.png\" width=\"1200\" height=\"396\" loading=\"lazy\" title=\"\" class=\"hatena-fotolife\" itemprop=\"image\"\/><\/span><figcaption>\u95a2\u6570URL\u3092\u4f5c\u6210<\/figcaption><\/figure>\n<\/p>\n<p>\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059<\/p>\n<details>\n<summary> \u30b3\u30fc\u30c9\uff08\u30af\u30ea\u30c3\u30af\u3067\u5c55\u958b\uff09<\/summary>\n<\/details>\n<pre class=\"code lang-javascript\" data-lang=\"javascript\" data-unlink=\"\">\n<span class=\"synPreProc\">import<\/span> <span class=\"synSpecial\">{<\/span> WebClient <span class=\"synSpecial\">}<\/span> <span class=\"synPreProc\">from<\/span> <span class=\"synConstant\">'@slack\/web-api'<\/span><span class=\"synStatement\">;<\/span>\n<span class=\"synPreProc\">import<\/span> <span class=\"synStatement\">*<\/span> <span class=\"synPreProc\">as<\/span> AgentRuntime <span class=\"synPreProc\">from<\/span> <span class=\"synConstant\">'@aws-sdk\/client-bedrock-agent-runtime'<\/span><span class=\"synStatement\">;<\/span>\n\n<span class=\"synType\">const<\/span> BedrockAgentRuntimeClient <span class=\"synStatement\">=<\/span> AgentRuntime<span class=\"synStatement\">.<\/span>BedrockAgentRuntimeClient<span class=\"synStatement\">;<\/span>\n<span class=\"synType\">const<\/span> RetrieveAndGenerateCommand <span class=\"synStatement\">=<\/span> AgentRuntime<span class=\"synStatement\">.<\/span>RetrieveAndGenerateCommand<span class=\"synStatement\">;<\/span>\n<span class=\"synType\">const<\/span> AWS_REGION <span class=\"synStatement\">=<\/span> <span class=\"synConstant\">\"us-east-1\"<\/span><span class=\"synStatement\">;<\/span>\n<span class=\"synType\">const<\/span> MODEL_ID <span class=\"synStatement\">=<\/span> <span class=\"synConstant\">\"amazon.nova-micro-v1:0\"<\/span><span class=\"synStatement\">;<\/span>\n<span class=\"synType\">const<\/span> KNOWLEDGE_BASE_ID <span class=\"synStatement\">=<\/span> process<span class=\"synStatement\">.<\/span>env<span class=\"synStatement\">.<\/span>KNOWLEDGE_BASE_ID<span class=\"synStatement\">;<\/span>\n<span class=\"synType\">const<\/span> agentClient <span class=\"synStatement\">=<\/span> <span class=\"synStatement\">new<\/span> <span class=\"synIdentifier\">BedrockAgentRuntimeClient<\/span><span class=\"synSpecial\">({<\/span> <span class=\"synIdentifier\">region<\/span><span class=\"synStatement\">:<\/span> AWS_REGION <span class=\"synSpecial\">})<\/span><span class=\"synStatement\">;<\/span>\n<span class=\"synType\">const<\/span> TOKEN <span class=\"synStatement\">=<\/span> process<span class=\"synStatement\">.<\/span>env<span class=\"synStatement\">.<\/span>OAUTH_TOKEN<span class=\"synStatement\">;<\/span>\n<span class=\"synType\">const<\/span> TARGET_CHANNEL <span class=\"synStatement\">=<\/span> process<span class=\"synStatement\">.<\/span>env<span class=\"synStatement\">.<\/span>TARGET_CHANNEL<span class=\"synStatement\">;<\/span>\n\n\n<span class=\"synType\">const<\/span> retrieveAndGenerate <span class=\"synStatement\">=<\/span> <span class=\"synStatement\">async<\/span> <span class=\"synSpecial\">(<\/span>prompt<span class=\"synSpecial\">)<\/span> <span class=\"synStatement\">=&gt;<\/span> <span class=\"synSpecial\">{<\/span>\n    <span class=\"synType\">const<\/span> command <span class=\"synStatement\">=<\/span> <span class=\"synStatement\">new<\/span> <span class=\"synIdentifier\">RetrieveAndGenerateCommand<\/span><span class=\"synSpecial\">({<\/span>\n        <span class=\"synIdentifier\">input<\/span><span class=\"synStatement\">:<\/span> <span class=\"synSpecial\">{<\/span>\n            <span class=\"synIdentifier\">text<\/span><span class=\"synStatement\">:<\/span> prompt\n        <span class=\"synSpecial\">}<\/span><span class=\"synStatement\">,<\/span>\n        <span class=\"synIdentifier\">retrieveAndGenerateConfiguration<\/span><span class=\"synStatement\">:<\/span> <span class=\"synSpecial\">{<\/span>\n            <span class=\"synIdentifier\">type<\/span><span class=\"synStatement\">:<\/span> <span class=\"synConstant\">\"KNOWLEDGE_BASE\"<\/span><span class=\"synStatement\">,<\/span>\n            <span class=\"synIdentifier\">knowledgeBaseConfiguration<\/span><span class=\"synStatement\">:<\/span> <span class=\"synSpecial\">{<\/span>\n                <span class=\"synIdentifier\">knowledgeBaseId<\/span><span class=\"synStatement\">:<\/span> KNOWLEDGE_BASE_ID<span class=\"synStatement\">,<\/span>\n                <span class=\"synIdentifier\">modelArn<\/span><span class=\"synStatement\">:<\/span> MODEL_ID\n            <span class=\"synSpecial\">}<\/span>\n        <span class=\"synSpecial\">}<\/span>\n    <span class=\"synSpecial\">})<\/span><span class=\"synStatement\">;<\/span>\n\n    <span class=\"synType\">const<\/span> response <span class=\"synStatement\">=<\/span> <span class=\"synStatement\">await<\/span> agentClient<span class=\"synStatement\">.<\/span><span class=\"synIdentifier\">send<\/span><span class=\"synSpecial\">(<\/span>command<span class=\"synSpecial\">)<\/span><span class=\"synStatement\">;<\/span>\n    <span class=\"synType\">const<\/span> output <span class=\"synStatement\">=<\/span> response<span class=\"synStatement\">.<\/span>output<span class=\"synStatement\">;<\/span>\n    <span class=\"synType\">const<\/span> text <span class=\"synStatement\">=<\/span> output<span class=\"synStatement\">.<\/span>text<span class=\"synStatement\">;<\/span>\n    <span class=\"synConstant\">console<\/span><span class=\"synStatement\">.<\/span><span class=\"synIdentifier\">log<\/span><span class=\"synSpecial\">(<\/span><span class=\"synConstant\">\"\u63a8\u8ad6\u7d50\u679c: \"<\/span><span class=\"synStatement\">,<\/span> text<span class=\"synSpecial\">)<\/span><span class=\"synStatement\">;<\/span>\n    <span class=\"synStatement\">return<\/span> text<span class=\"synStatement\">;<\/span>\n<span class=\"synSpecial\">}<\/span><span class=\"synStatement\">;<\/span>\n\n\n<span class=\"synType\">const<\/span> sendMessage <span class=\"synStatement\">=<\/span> <span class=\"synStatement\">async<\/span> <span class=\"synSpecial\">(<\/span>text<span class=\"synSpecial\">)<\/span> <span class=\"synStatement\">=&gt;<\/span> <span class=\"synSpecial\">{<\/span>\n    <span class=\"synStatement\">if<\/span> <span class=\"synSpecial\">(<\/span><span class=\"synStatement\">!<\/span>TOKEN <span class=\"synStatement\">||<\/span> <span class=\"synStatement\">!<\/span>TARGET_CHANNEL<span class=\"synSpecial\">)<\/span> <span class=\"synSpecial\">{<\/span>\n        <span class=\"synConstant\">console<\/span><span class=\"synStatement\">.<\/span><span class=\"synIdentifier\">log<\/span><span class=\"synSpecial\">(<\/span><span class=\"synConstant\">\"OAUTH_TOKEN \u307e\u305f\u306f TARGET_CHANNEL \u304c\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\"<\/span><span class=\"synSpecial\">)<\/span><span class=\"synStatement\">;<\/span>\n        <span class=\"synStatement\">return;<\/span>\n    <span class=\"synSpecial\">}<\/span>\n\n    <span class=\"synType\">const<\/span> message <span class=\"synStatement\">=<\/span> <span class=\"synSpecial\">{<\/span> <span class=\"synIdentifier\">channel<\/span><span class=\"synStatement\">:<\/span> TARGET_CHANNEL<span class=\"synStatement\">,<\/span> <span class=\"synIdentifier\">text<\/span><span class=\"synStatement\">:<\/span> text <span class=\"synSpecial\">}<\/span><span class=\"synStatement\">;<\/span>\n    <span class=\"synType\">const<\/span> slack <span class=\"synStatement\">=<\/span> <span class=\"synStatement\">new<\/span> <span class=\"synIdentifier\">WebClient<\/span><span class=\"synSpecial\">(<\/span>TOKEN<span class=\"synSpecial\">)<\/span><span class=\"synStatement\">;<\/span>\n    <span class=\"synStatement\">await<\/span> slack<span class=\"synStatement\">.<\/span>chat<span class=\"synStatement\">.<\/span><span class=\"synIdentifier\">postMessage<\/span><span class=\"synSpecial\">(<\/span>message<span class=\"synSpecial\">)<\/span><span class=\"synStatement\">;<\/span>\n<span class=\"synSpecial\">}<\/span>\n\n\n<span class=\"synPreProc\">export<\/span> <span class=\"synType\">const<\/span> handler <span class=\"synStatement\">=<\/span> <span class=\"synStatement\">async<\/span> <span class=\"synSpecial\">(<\/span>event<span class=\"synSpecial\">)<\/span> <span class=\"synStatement\">=&gt;<\/span> <span class=\"synSpecial\">{<\/span>\n    <span class=\"synStatement\">try<\/span> <span class=\"synSpecial\">{<\/span>\n        <span class=\"synConstant\">console<\/span><span class=\"synStatement\">.<\/span><span class=\"synIdentifier\">log<\/span><span class=\"synSpecial\">(<\/span><span class=\"synConstant\">\"event: \"<\/span><span class=\"synStatement\">,<\/span> event<span class=\"synSpecial\">)<\/span><span class=\"synStatement\">;<\/span>\n\n        \n        \n        <span class=\"synType\">const<\/span> headers <span class=\"synStatement\">=<\/span> event<span class=\"synStatement\">.<\/span>headers <span class=\"synStatement\">||<\/span> <span class=\"synSpecial\">{}<\/span><span class=\"synStatement\">;<\/span>\n        <span class=\"synType\">const<\/span> retryNum <span class=\"synStatement\">=<\/span> headers<span class=\"synSpecial\">[<\/span><span class=\"synConstant\">'x-slack-retry-num'<\/span><span class=\"synSpecial\">]<\/span><span class=\"synStatement\">;<\/span> \n        <span class=\"synType\">const<\/span> retryReason <span class=\"synStatement\">=<\/span> headers<span class=\"synSpecial\">[<\/span><span class=\"synConstant\">'x-slack-retry-reason'<\/span><span class=\"synSpecial\">]<\/span><span class=\"synStatement\">;<\/span> \n        <span class=\"synStatement\">if<\/span> <span class=\"synSpecial\">(<\/span>retryNum <span class=\"synStatement\">!<\/span>== <span class=\"synConstant\">undefined<\/span> <span class=\"synStatement\">||<\/span> retryReason <span class=\"synStatement\">===<\/span> <span class=\"synConstant\">'http_timeout'<\/span><span class=\"synSpecial\">)<\/span> <span class=\"synSpecial\">{<\/span>\n            <span class=\"synConstant\">console<\/span><span class=\"synStatement\">.<\/span><span class=\"synIdentifier\">warn<\/span><span class=\"synSpecial\">(<\/span><span class=\"synConstant\">`Slack\u30ea\u30c8\u30e9\u30a4\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u53d7\u4fe1 (Num: <\/span><span class=\"synSpecial\">${<\/span>retryNum<span class=\"synSpecial\">}<\/span><span class=\"synConstant\">, Reason: <\/span><span class=\"synSpecial\">${<\/span>retryReason<span class=\"synSpecial\">}<\/span><span class=\"synConstant\">)\u3002\u51e6\u7406\u3092\u30b9\u30ad\u30c3\u30d7\u3057\u307e\u3059\u3002`<\/span><span class=\"synSpecial\">)<\/span><span class=\"synStatement\">;<\/span>\n            <span class=\"synStatement\">return<\/span> <span class=\"synSpecial\">{<\/span> <span class=\"synIdentifier\">statusCode<\/span><span class=\"synStatement\">:<\/span> <span class=\"synConstant\">200<\/span><span class=\"synStatement\">,<\/span> <span class=\"synIdentifier\">body<\/span><span class=\"synStatement\">:<\/span> <span class=\"synType\">JSON<\/span><span class=\"synStatement\">.<\/span><span class=\"synIdentifier\">stringify<\/span><span class=\"synSpecial\">({})<\/span><span class=\"synStatement\">,<\/span><span class=\"synSpecial\">}<\/span><span class=\"synStatement\">;<\/span>\n        <span class=\"synSpecial\">}<\/span>\n    \n        <span class=\"synType\">let<\/span> body <span class=\"synStatement\">=<\/span> <span class=\"synConstant\">null<\/span><span class=\"synStatement\">;<\/span>\n        <span class=\"synStatement\">try<\/span> <span class=\"synSpecial\">{<\/span>\n            body <span class=\"synStatement\">=<\/span> <span class=\"synType\">JSON<\/span><span class=\"synStatement\">.<\/span><span class=\"synIdentifier\">parse<\/span><span class=\"synSpecial\">(<\/span>event<span class=\"synStatement\">.<\/span>body<span class=\"synSpecial\">)<\/span><span class=\"synStatement\">;<\/span>\n        <span class=\"synSpecial\">}<\/span> <span class=\"synStatement\">catch<\/span> <span class=\"synSpecial\">(<\/span>e<span class=\"synSpecial\">)<\/span> <span class=\"synSpecial\">{<\/span>\n            <span class=\"synConstant\">console<\/span><span class=\"synStatement\">.<\/span><span class=\"synIdentifier\">log<\/span><span class=\"synSpecial\">(<\/span><span class=\"synConstant\">'Invalid JSON format'<\/span><span class=\"synSpecial\">)<\/span>\n            <span class=\"synStatement\">return<\/span> <span class=\"synSpecial\">{<\/span> <span class=\"synIdentifier\">statusCode<\/span><span class=\"synStatement\">:<\/span> <span class=\"synConstant\">400<\/span><span class=\"synStatement\">,<\/span> <span class=\"synIdentifier\">body<\/span><span class=\"synStatement\">:<\/span> <span class=\"synType\">JSON<\/span><span class=\"synStatement\">.<\/span><span class=\"synIdentifier\">stringify<\/span><span class=\"synSpecial\">({<\/span> <span class=\"synIdentifier\">error<\/span><span class=\"synStatement\">:<\/span> <span class=\"synConstant\">\"Invalid JSON format\"<\/span> <span class=\"synSpecial\">})<\/span> <span class=\"synSpecial\">}<\/span><span class=\"synStatement\">;<\/span>\n        <span class=\"synSpecial\">}<\/span>\n\n        \n        <span class=\"synStatement\">if<\/span> <span class=\"synSpecial\">(<\/span>body<span class=\"synStatement\">.<\/span>challenge<span class=\"synSpecial\">)<\/span> <span class=\"synSpecial\">{<\/span>\n            <span class=\"synStatement\">return<\/span> <span class=\"synSpecial\">{<\/span>\n                <span class=\"synIdentifier\">statusCode<\/span><span class=\"synStatement\">:<\/span> <span class=\"synConstant\">200<\/span><span class=\"synStatement\">,<\/span> <span class=\"synIdentifier\">body<\/span><span class=\"synStatement\">:<\/span> <span class=\"synType\">JSON<\/span><span class=\"synStatement\">.<\/span><span class=\"synIdentifier\">stringify<\/span><span class=\"synSpecial\">({<\/span> <span class=\"synIdentifier\">challenge<\/span><span class=\"synStatement\">:<\/span> body<span class=\"synStatement\">.<\/span>challenge <span class=\"synSpecial\">})<\/span>\n            <span class=\"synSpecial\">}<\/span><span class=\"synStatement\">;<\/span>\n        <span class=\"synSpecial\">}<\/span>\n\n        \n        <span class=\"synType\">let<\/span> question <span class=\"synStatement\">=<\/span> body<span class=\"synStatement\">.<\/span>event<span class=\"synStatement\">.<\/span>text<span class=\"synStatement\">;<\/span>\n\n        \n        <span class=\"synType\">const<\/span> userId <span class=\"synStatement\">=<\/span> body<span class=\"synStatement\">.<\/span>authorizations<span class=\"synSpecial\">[<\/span><span class=\"synConstant\">0<\/span><span class=\"synSpecial\">]<\/span><span class=\"synStatement\">.<\/span>user_id<span class=\"synStatement\">;<\/span>\n        <span class=\"synType\">const<\/span> mention <span class=\"synStatement\">=<\/span> <span class=\"synConstant\">`<span class=\"synSpecial\">${<\/span>userId<span class=\"synSpecial\">}<\/span><span class=\"synConstant\">&gt;`<\/span><span class=\"synStatement\">;<\/span>\n        <span class=\"synStatement\">if<\/span> <span class=\"synSpecial\">(<\/span>question<span class=\"synStatement\">.<\/span><span class=\"synIdentifier\">startsWith<\/span><span class=\"synSpecial\">(<\/span>mention<span class=\"synSpecial\">))<\/span> <span class=\"synSpecial\">{<\/span>\n            question <span class=\"synStatement\">=<\/span> question<span class=\"synStatement\">.<\/span><span class=\"synIdentifier\">substring<\/span><span class=\"synSpecial\">(<\/span>mention<span class=\"synStatement\">.<\/span>length<span class=\"synSpecial\">)<\/span><span class=\"synStatement\">.<\/span><span class=\"synIdentifier\">trim<\/span><span class=\"synSpecial\">()<\/span><span class=\"synStatement\">;<\/span>\n        <span class=\"synSpecial\">}<\/span>\n\n        <span class=\"synConstant\">console<\/span><span class=\"synStatement\">.<\/span><span class=\"synIdentifier\">log<\/span><span class=\"synSpecial\">(<\/span><span class=\"synConstant\">'\u30e6\u30fc\u30b6\u30fc\u304b\u3089\u306e\u8cea\u554f:'<\/span><span class=\"synStatement\">,<\/span> question<span class=\"synSpecial\">)<\/span><span class=\"synStatement\">;<\/span>\n        <span class=\"synStatement\">if<\/span> <span class=\"synSpecial\">(<\/span><span class=\"synStatement\">!<\/span>question<span class=\"synSpecial\">)<\/span> <span class=\"synSpecial\">{<\/span>\n            <span class=\"synConstant\">console<\/span><span class=\"synStatement\">.<\/span><span class=\"synIdentifier\">log<\/span><span class=\"synSpecial\">(<\/span><span class=\"synConstant\">\"\u8cea\u554f\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\"<\/span><span class=\"synSpecial\">)<\/span>\n            <span class=\"synStatement\">return<\/span> <span class=\"synSpecial\">{<\/span> <span class=\"synIdentifier\">statusCode<\/span><span class=\"synStatement\">:<\/span> <span class=\"synConstant\">400<\/span><span class=\"synStatement\">,<\/span> <span class=\"synIdentifier\">body<\/span><span class=\"synStatement\">:<\/span> <span class=\"synType\">JSON<\/span><span class=\"synStatement\">.<\/span><span class=\"synIdentifier\">stringify<\/span><span class=\"synSpecial\">({<\/span> <span class=\"synIdentifier\">message<\/span><span class=\"synStatement\">:<\/span> <span class=\"synConstant\">\"\u8cea\u554f\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\"<\/span> <span class=\"synSpecial\">})<\/span><span class=\"synStatement\">,<\/span> <span class=\"synSpecial\">}<\/span><span class=\"synStatement\">;<\/span>\n        <span class=\"synSpecial\">}<\/span>\n\n        \n        <span class=\"synType\">const<\/span> prompt <span class=\"synStatement\">=<\/span> <span class=\"synConstant\">`\u30e6\u30fc\u30b6\u30fc\u304b\u3089\u306e\u8cea\u554f: <\/span><span class=\"synSpecial\">${<\/span>question<span class=\"synSpecial\">}<\/span><span class=\"synConstant\">\\n\\n\u56de\u7b54\u306f\u65e5\u672c\u8a9e\u3067\u884c\u306a\u3063\u3066\u304f\u3060\u3055\u3044\u3002`<\/span><span class=\"synStatement\">;<\/span>\n        <span class=\"synType\">const<\/span> answer <span class=\"synStatement\">=<\/span> <span class=\"synStatement\">await<\/span> <span class=\"synIdentifier\">retrieveAndGenerate<\/span><span class=\"synSpecial\">(<\/span>prompt<span class=\"synSpecial\">)<\/span><span class=\"synStatement\">;<\/span>\n        <span class=\"synType\">const<\/span> replayMessage <span class=\"synStatement\">=<\/span> answer <span class=\"synStatement\">?<\/span> answer <span class=\"synStatement\">:<\/span> <span class=\"synConstant\">\"\u63a8\u8ad6\u7d50\u679c\u304c\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\"<\/span><span class=\"synStatement\">;<\/span>\n\n        \n        <span class=\"synStatement\">if<\/span> <span class=\"synSpecial\">(<\/span>answer<span class=\"synSpecial\">)<\/span> <span class=\"synStatement\">await<\/span> <span class=\"synIdentifier\">sendMessage<\/span><span class=\"synSpecial\">(<\/span>replayMessage<span class=\"synSpecial\">)<\/span><span class=\"synStatement\">;<\/span>\n\n        <span class=\"synStatement\">return<\/span> <span class=\"synSpecial\">{<\/span> <span class=\"synIdentifier\">statusCode<\/span><span class=\"synStatement\">:<\/span> <span class=\"synConstant\">200<\/span><span class=\"synStatement\">,<\/span> <span class=\"synIdentifier\">body<\/span><span class=\"synStatement\">:<\/span> <span class=\"synType\">JSON<\/span><span class=\"synStatement\">.<\/span><span class=\"synIdentifier\">stringify<\/span><span class=\"synSpecial\">({<\/span> answer <span class=\"synSpecial\">})<\/span> <span class=\"synSpecial\">}<\/span><span class=\"synStatement\">;<\/span>\n    <span class=\"synSpecial\">}<\/span> <span class=\"synStatement\">catch<\/span> <span class=\"synSpecial\">(<\/span>error<span class=\"synSpecial\">)<\/span> <span class=\"synSpecial\">{<\/span>\n        <span class=\"synConstant\">console<\/span><span class=\"synStatement\">.<\/span><span class=\"synIdentifier\">log<\/span><span class=\"synSpecial\">(<\/span><span class=\"synConstant\">\"\u4f8b\u5916\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\"<\/span><span class=\"synStatement\">,<\/span> error<span class=\"synSpecial\">)<\/span><span class=\"synStatement\">;<\/span>\n        <span class=\"synStatement\">return<\/span> <span class=\"synSpecial\">{<\/span> <span class=\"synIdentifier\">statusCode<\/span><span class=\"synStatement\">:<\/span> <span class=\"synConstant\">500<\/span><span class=\"synStatement\">,<\/span> <span class=\"synIdentifier\">body<\/span><span class=\"synStatement\">:<\/span> <span class=\"synType\">JSON<\/span><span class=\"synStatement\">.<\/span><span class=\"synIdentifier\">stringify<\/span><span class=\"synSpecial\">({<\/span> <span class=\"synIdentifier\">message<\/span><span class=\"synStatement\">:<\/span> <span class=\"synConstant\">\"\u4f8b\u5916\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\"<\/span> <span class=\"synSpecial\">})}<\/span><span class=\"synStatement\">;<\/span>\n    <span class=\"synSpecial\">}<\/span>\n<span class=\"synSpecial\">}<\/span><span class=\"synStatement\">;<\/span>\n<\/span><\/pre>\n<h3 id=\"Slack\u30a2\u30d7\u30ea\u306e\u4f5c\u6210\">Slack\u30a2\u30d7\u30ea\u306e\u4f5c\u6210<\/h3>\n<p>\u6700\u5f8c\u306bSlack\u30a2\u30d7\u30ea\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u300cFrom scratch\u300d\u3092\u9078\u629e\u3057\u307e\u3059\u3002<\/p>\n<p><figure class=\"figure-image figure-image-fotolife\" title=\"Slack\u30a2\u30d7\u30ea\u3092\u4f5c\u6210\"><span itemscope=\"\" itemtype=\"http:\/\/schema.org\/Photograph\"><img decoding=\"async\" src=\"https:\/\/cdn-ak.f.st-hatena.com\/images\/fotolife\/p\/playjp\/20251015\/20251015133833.png\" width=\"1014\" height=\"664\" loading=\"lazy\" title=\"\" class=\"hatena-fotolife\" itemprop=\"image\"\/><\/span><figcaption>Slack\u30a2\u30d7\u30ea\u3092\u4f5c\u6210<\/figcaption><\/figure>\n<\/p>\n<p>\u300cSubscribe to bot events\u300d\u306b\u300capp_mention\u300d\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002Request URL\u306b\u306f\u524d\u9805\u3067\u4f5c\u6210\u3057\u305f Lambda \u95a2\u6570\u306e\u95a2\u6570URL\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u6307\u5b9a\u3059\u308b\u3068\u30c1\u30e3\u30ec\u30f3\u30b8\u8a8d\u8a3c\u304c\u884c\u308f\u308c\u3001\u8a8d\u8a3c\u306b\u6210\u529f\u3059\u308b\u3068\u300cVerified\u300d\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002<\/p>\n<p><figure class=\"figure-image figure-image-fotolife\" title=\"\u30a4\u30d9\u30f3\u30c8\u30b5\u30d6\u30b9\u30af\u30ea\u30d7\u30b7\u30e7\u30f3\u3092\u8ffd\u52a0\"><span itemscope=\"\" itemtype=\"http:\/\/schema.org\/Photograph\"><img decoding=\"async\" src=\"https:\/\/cdn-ak.f.st-hatena.com\/images\/fotolife\/p\/playjp\/20251015\/20251015133849.png\" width=\"1200\" height=\"793\" loading=\"lazy\" title=\"\" class=\"hatena-fotolife\" itemprop=\"image\"\/><\/span><figcaption>\u30a4\u30d9\u30f3\u30c8\u30b5\u30d6\u30b9\u30af\u30ea\u30d7\u30b7\u30e7\u30f3\u3092\u8ffd\u52a0<\/figcaption><\/figure>\n<\/p>\n<p>\u3053\u308c\u3067\u672c\u30a2\u30d7\u30ea\u306b\u30e1\u30f3\u30b7\u30e7\u30f3\u3092\u3064\u3051\u3066\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u6295\u7a3f\u3059\u308b\u3068\u3001Lambda \u95a2\u6570\u306b\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u9001\u4fe1\u3055\u308c\u307e\u3059\u3002<\/p>\n<p>\u6b21\u306b\u300cOAuth&amp;Permissions\u300d\u3088\u308aSlack\u30a2\u30d7\u30ea\u306e\u6a29\u9650\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002Slack\u30a2\u30d7\u30ea\u306b\u5bfe\u3057\u3066\u30e1\u30f3\u30b7\u30e7\u30f3\u3092\u3064\u3051\u3066\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u6295\u7a3f\u3059\u308b\u3068\u3001Lambda\u3092\u547c\u3073\u51fa\u3059\u3088\u3046\u306b\u3057\u305f\u3044\u305f\u3081\u3001\u300capp_mentions:read\u300d\u3092\u4ed8\u4e0e\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p><figure class=\"figure-image figure-image-fotolife\" title=\"Slack\u30a2\u30d7\u30ea\u306e\u6a29\u9650\u8a2d\u5b9a\"><span itemscope=\"\" itemtype=\"http:\/\/schema.org\/Photograph\"><img decoding=\"async\" src=\"https:\/\/cdn-ak.f.st-hatena.com\/images\/fotolife\/p\/playjp\/20251015\/20251015133837.png\" width=\"1200\" height=\"1132\" loading=\"lazy\" title=\"\" class=\"hatena-fotolife\" itemprop=\"image\"\/><\/span><figcaption>Slack\u30a2\u30d7\u30ea\u306e\u6a29\u9650\u8a2d\u5b9a<\/figcaption><\/figure>\n<\/p>\n<p>\u6700\u5f8c\u306b\u672c\u30a2\u30d7\u30ea\u3092\u767b\u9332\u3057\u305f\u3044Slack\u30c1\u30e3\u30f3\u30cd\u30eb\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002<\/p>\n<p><figure class=\"figure-image figure-image-fotolife\" title=\"Slack\u30a2\u30d7\u30ea\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\"><span itemscope=\"\" itemtype=\"http:\/\/schema.org\/Photograph\"><img decoding=\"async\" src=\"https:\/\/cdn-ak.f.st-hatena.com\/images\/fotolife\/p\/playjp\/20251015\/20251015133842.png\" width=\"1127\" height=\"1200\" loading=\"lazy\" title=\"\" class=\"hatena-fotolife\" itemprop=\"image\"\/><\/span><figcaption>Slack\u30a2\u30d7\u30ea\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/figcaption><\/figure>\n<\/p>\n<h2 id=\"\u8cea\u554f\u3057\u3066\u307f\u307e\u3057\u3087\u3046\">\u8cea\u554f\u3057\u3066\u307f\u307e\u3057\u3087\u3046<\/h2>\n<p>\u5b9f\u969b\u306b\u793e\u5185\u30ca\u30ec\u30c3\u30b8\u306b\u95a2\u3059\u308b\u8cea\u554f\u3092\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<p>\u307e\u305a\u306f\u6bd4\u8f03\u306e\u305f\u3081\u3001\u5b66\u7fd2\u3055\u305b\u3066\u3044\u306a\u3044\u72b6\u614b\u3067\u8cea\u554f\u3092\u884c\u306a\u3063\u3066\u307f\u307e\u3059\u3002<\/p>\n<p><figure class=\"figure-image figure-image-fotolife\" title=\"\u5b66\u7fd2\u524d\u306b\u8cea\u554f\"><span itemscope=\"\" itemtype=\"http:\/\/schema.org\/Photograph\"><img decoding=\"async\" src=\"https:\/\/cdn-ak.f.st-hatena.com\/images\/fotolife\/p\/playjp\/20251015\/20251015133907.png\" width=\"1200\" height=\"160\" loading=\"lazy\" title=\"\" class=\"hatena-fotolife\" itemprop=\"image\"\/><\/span><figcaption>\u5b66\u7fd2\u524d\u306b\u8cea\u554f<\/figcaption><\/figure>\n<\/p>\n<p>\u5f53\u7136\u3001\u56de\u7b54\u306f\u5f97\u3089\u308c\u307e\u305b\u3093\u3002\u4eca\u5ea6\u306f\u3001\u8cea\u554f\u4e8b\u9805\u306b\u3064\u3044\u3066\u5b66\u7fd2\u3055\u305b\u307e\u3059\u3002\u5b66\u7fd2\u3055\u305b\u305f\u3044\u30c7\u30fc\u30bf\u3092PDF\u5316\u3057\u3001\u793e\u5185\u30ca\u30ec\u30c3\u30b8\u7528S3\u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u3001\u30ca\u30ec\u30c3\u30b8\u30d9\u30fc\u30b9\u306e\u30c7\u30fc\u30bf\u540c\u671f\u3092\u884c\u3044\u307e\u3059\u3002\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3054\u3068\u306b\u30c7\u30fc\u30bf\u540c\u671f\u306f\u5fc5\u8981\u3067\u3059\u306e\u3067\u5fd8\u308c\u306a\u3044\u3088\u3046\u306b\u3057\u3066\u304f\u3060\u3055\u3044\uff08\u5927\u4e8b\u306a\u3053\u3068\u306a\u306e\u3067\u518d\u63b2\uff09\u3002<\/p>\n<p><figure class=\"figure-image figure-image-fotolife\" title=\"\u30ca\u30ec\u30c3\u30b8\u30c7\u30fc\u30bf\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\"><span itemscope=\"\" itemtype=\"http:\/\/schema.org\/Photograph\"><img decoding=\"async\" src=\"https:\/\/cdn-ak.f.st-hatena.com\/images\/fotolife\/p\/playjp\/20251015\/20251015133909.png\" width=\"1200\" height=\"266\" loading=\"lazy\" title=\"\" class=\"hatena-fotolife\" itemprop=\"image\"\/><\/span><figcaption>\u30ca\u30ec\u30c3\u30b8\u30c7\u30fc\u30bf\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9<\/figcaption><\/figure>\n<\/p>\n<p>\u4eca\u56de\u306f\u6642\u4e8b\u30cd\u30bf\u3068\u3057\u3066\u3001\u5168\u65e5\u672c\u30c6\u30cb\u30b9\u9078\u624b\u6a29\u306b\u3064\u3044\u3066\u5b66\u7fd2\u3055\u305b\u307e\u3057\u305f\u3002\u672c\u756a\u5229\u7528\u306e\u969b\u306f\u793e\u5185\u30ca\u30ec\u30c3\u30b8\u3092\u5b66\u7fd2\u3055\u305b\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p><iframe src=\"https:\/\/hatenablog-parts.com\/embed?url=https%3A%2F%2Fwww.jta-tennis.or.jp%2Falljapan%2Ftabid%2F434%2FDefault.aspx%3Fitemid%3D3120%26dispmid%3D1797\" title=\"\u5927\u4f1a\u8a18\u4e8b\" class=\"embed-card embed-webcard\" scrolling=\"no\" frameborder=\"0\" style=\"display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;\" loading=\"lazy\"><\/iframe><cite class=\"hatena-citation\"><a target=\"_blank\" href=\"https:\/\/www.jta-tennis.or.jp\/alljapan\/tabid\/434\/Default.aspx?itemid=3120&amp;dispmid=1797\">www.jta-tennis.or.jp<\/a><\/cite><\/p>\n<p>\u305d\u308c\u3067\u306f\u3001\u518d\u5ea6\u8cea\u554f\u3092\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<p><figure class=\"figure-image figure-image-fotolife\" title=\"\u5b66\u7fd2\u5f8c\u306b\u8cea\u554f\"><span itemscope=\"\" itemtype=\"http:\/\/schema.org\/Photograph\"><img decoding=\"async\" src=\"https:\/\/cdn-ak.f.st-hatena.com\/images\/fotolife\/p\/playjp\/20251015\/20251015133913.png\" width=\"1200\" height=\"158\" loading=\"lazy\" title=\"\" class=\"hatena-fotolife\" itemprop=\"image\"\/><\/span><figcaption>\u5b66\u7fd2\u5f8c\u306b\u8cea\u554f<\/figcaption><\/figure>\n<\/p>\n<p>\u7121\u4e8b\u3001\u5b66\u7fd2\u30c7\u30fc\u30bf\u306b\u95a2\u3059\u308b\u56de\u7b54\u304c\u5f97\u3089\u308c\u3066\u3044\u307e\u3059\u306d\uff01<\/p>\n<h2 id=\"\u304a\u308f\u308a\u306b\">\u304a\u308f\u308a\u306b<\/h2>\n<p>\u4eca\u56de\u3001Bedrock\u3092\u4f7f\u3063\u305f\u30ca\u30ec\u30c3\u30b8\u30d9\u30fc\u30b9\u306e\u4f5c\u6210\u3092\u884c\u3044\u307e\u3057\u305f\u3002Bedrock\u306e\u30ca\u30ec\u30c3\u30b8\u30d9\u30fc\u30b9\u6a5f\u80fd\u3092\u4f7f\u3046\u3053\u3068\u3067\u3001\u30ca\u30ec\u30c3\u30b8\u30c7\u30fc\u30bf\u306e\u30d9\u30af\u30c8\u30eb\u5316\u3084LLM\u3068\u30ca\u30ec\u30c3\u30b8\u30d9\u30fc\u30b9\u306e\u63a5\u7d9a\u306a\u3069\u3084\u3084\u3053\u3057\u3044\u8a2d\u5b9a\u306fAWS\u5074\u304c\u884c\u3063\u3066\u304f\u308c\u308b\u305f\u3081\u3001\u304b\u306a\u308a\u5bb9\u6613\u306b\u30b7\u30b9\u30c6\u30e0\u3092\u69cb\u7bc9\u3067\u304d\u305f\u306e\u3067\u306f\u306a\u3044\u3067\u3057\u3087\u3046\u304b\u3002\u6599\u91d1\u9762\u306b\u304a\u3044\u3066\u3082\u3001S3 Vectors\u306e\u5229\u7528\u306b\u3088\u308a\u8cbb\u7528\u3092\u304b\u306a\u308a\u6291\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u3066\u304a\u308a\u3001\u5b9f\u904b\u7528\u306b\u304a\u3051\u308b\u30cf\u30fc\u30c9\u30eb\u304c\u4e0b\u304c\u3063\u3066\u3044\u308b\u304b\u3068\u601d\u3044\u307e\u3059\u3002\u4eca\u56de\u7d39\u4ecb\u3057\u305f\u30b7\u30b9\u30c6\u30e0\u3092\u6d3b\u7528\u3057\u3001\u793e\u5185\u30ca\u30ec\u30c3\u30b8\u7ba1\u7406\u306e\u6539\u5584\u306b\u305c\u3072\u5f79\u7acb\u3066\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<\/div>\n\n<br \/><a href=\"https:\/\/developers.play.jp\/entry\/2025\/10\/15\/133808\">\u5143\u306e\u8a18\u4e8b\u3092\u78ba\u8a8d\u3059\u308b <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\u307f\u306a\u3055\u3093\u3001\u3053\u3093\u306b\u3061\u306f\u30024\u6708\u306b\u5165\u793e\u3057\u307e\u3057\u305f\u3001\u30e1\u30c7\u30a3\u30a2\u30b5\u30d7\u30e9\u30a4\u30c1\u30a7\u30fc\u30f3\u6280\u8853\u90e8\u958b\u767a\u7b2c2\u30b0\u30eb\u30fc\u30d7\u306e\u5c71\u672c\u3067\u3059\u3002\u666e\u6bb5\u306e\u958b\u767a\u3084\u30d3\u30b8\u30cd\u30b9\u306e\u696d\u52d9\u306b\u304a\u3044\u3066\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u5834\u9762\u306b\u906d\u9047\u3057\u305f\u3053\u3068\u306f\u306a\u3044\u3067\u3057\u3087\u3046\u304b\uff1f \u300c\u3042\u306e\u30d5\u30a1\u30a4\u30eb\u3001\u3069\u3053\u306b\u3042\u3063\u305f\u3063\u3051& [&hellip;]","protected":false},"author":1,"featured_media":9555,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[4],"tags":[],"class_list":["post-9554","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-company-tec"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Amazon Bedrock\u3092\u4f7f\u3063\u3066\u30ca\u30ec\u30c3\u30b8\u30d9\u30fc\u30b9\u3092\u4f5c\u3063\u3066\u307f\u3088\u3046 - PLAY DEVELOPERS BLOG - \u30dd\u30b1\u30b3\u30f3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/developers.play.jp\/entry\/2025\/10\/15\/133808\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Amazon Bedrock\u3092\u4f7f\u3063\u3066\u30ca\u30ec\u30c3\u30b8\u30d9\u30fc\u30b9\u3092\u4f5c\u3063\u3066\u307f\u3088\u3046 - PLAY DEVELOPERS BLOG - \u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"og:description\" content=\"\u307f\u306a\u3055\u3093\u3001\u3053\u3093\u306b\u3061\u306f\u30024\u6708\u306b\u5165\u793e\u3057\u307e\u3057\u305f\u3001\u30e1\u30c7\u30a3\u30a2\u30b5\u30d7\u30e9\u30a4\u30c1\u30a7\u30fc\u30f3\u6280\u8853\u90e8\u958b\u767a\u7b2c2\u30b0\u30eb\u30fc\u30d7\u306e\u5c71\u672c\u3067\u3059\u3002\u666e\u6bb5\u306e\u958b\u767a\u3084\u30d3\u30b8\u30cd\u30b9\u306e\u696d\u52d9\u306b\u304a\u3044\u3066\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u5834\u9762\u306b\u906d\u9047\u3057\u305f\u3053\u3068\u306f\u306a\u3044\u3067\u3057\u3087\u3046\u304b\uff1f \u300c\u3042\u306e\u30d5\u30a1\u30a4\u30eb\u3001\u3069\u3053\u306b\u3042\u3063\u305f\u3063\u3051&amp; [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/developers.play.jp\/entry\/2025\/10\/15\/133808\" \/>\n<meta property=\"og:site_name\" content=\"\u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-15T05:49:49+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/https3A2F2Fcdn-ak.f.st-hatena.com2Fimages2Ffotolife2Fp2Fplayjp2F202510152F20251015133916.jp.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1300\" \/>\n\t<meta property=\"og:image:height\" content=\"683\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"info@pokecon.jp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"info@pokecon.jp\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"3\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/developers.play.jp\\\/entry\\\/2025\\\/10\\\/15\\\/133808#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/9554\\\/\"},\"author\":{\"name\":\"info@pokecon.jp\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"headline\":\"Amazon Bedrock\u3092\u4f7f\u3063\u3066\u30ca\u30ec\u30c3\u30b8\u30d9\u30fc\u30b9\u3092\u4f5c\u3063\u3066\u307f\u3088\u3046 &#8211; PLAY DEVELOPERS BLOG\",\"datePublished\":\"2025-10-15T05:49:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/9554\\\/\"},\"wordCount\":255,\"image\":{\"@id\":\"https:\\\/\\\/developers.play.jp\\\/entry\\\/2025\\\/10\\\/15\\\/133808#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/https3A2F2Fcdn-ak.f.st-hatena.com2Fimages2Ffotolife2Fp2Fplayjp2F202510152F20251015133916.jp.jpeg\",\"articleSection\":[\"\u4f01\u696d\u30c6\u30c3\u30af\"],\"inLanguage\":\"ja\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/9554\\\/\",\"url\":\"https:\\\/\\\/developers.play.jp\\\/entry\\\/2025\\\/10\\\/15\\\/133808\",\"name\":\"Amazon Bedrock\u3092\u4f7f\u3063\u3066\u30ca\u30ec\u30c3\u30b8\u30d9\u30fc\u30b9\u3092\u4f5c\u3063\u3066\u307f\u3088\u3046 - PLAY DEVELOPERS BLOG - \u30dd\u30b1\u30b3\u30f3\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/developers.play.jp\\\/entry\\\/2025\\\/10\\\/15\\\/133808#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/developers.play.jp\\\/entry\\\/2025\\\/10\\\/15\\\/133808#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/https3A2F2Fcdn-ak.f.st-hatena.com2Fimages2Ffotolife2Fp2Fplayjp2F202510152F20251015133916.jp.jpeg\",\"datePublished\":\"2025-10-15T05:49:49+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/developers.play.jp\\\/entry\\\/2025\\\/10\\\/15\\\/133808#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/developers.play.jp\\\/entry\\\/2025\\\/10\\\/15\\\/133808\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/developers.play.jp\\\/entry\\\/2025\\\/10\\\/15\\\/133808#primaryimage\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/https3A2F2Fcdn-ak.f.st-hatena.com2Fimages2Ffotolife2Fp2Fplayjp2F202510152F20251015133916.jp.jpeg\",\"contentUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/https3A2F2Fcdn-ak.f.st-hatena.com2Fimages2Ffotolife2Fp2Fplayjp2F202510152F20251015133916.jp.jpeg\",\"width\":1300,\"height\":683},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/developers.play.jp\\\/entry\\\/2025\\\/10\\\/15\\\/133808#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u30db\u30fc\u30e0\",\"item\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Amazon Bedrock\u3092\u4f7f\u3063\u3066\u30ca\u30ec\u30c3\u30b8\u30d9\u30fc\u30b9\u3092\u4f5c\u3063\u3066\u307f\u3088\u3046 &#8211; PLAY DEVELOPERS BLOG\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\",\"name\":\"\u30dd\u30b1\u30b3\u30f3\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ja\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\",\"name\":\"info@pokecon.jp\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"caption\":\"info@pokecon.jp\"},\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/author\\\/infopokecon-jp\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Amazon Bedrock\u3092\u4f7f\u3063\u3066\u30ca\u30ec\u30c3\u30b8\u30d9\u30fc\u30b9\u3092\u4f5c\u3063\u3066\u307f\u3088\u3046 - PLAY DEVELOPERS BLOG - \u30dd\u30b1\u30b3\u30f3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/developers.play.jp\/entry\/2025\/10\/15\/133808","og_locale":"ja_JP","og_type":"article","og_title":"Amazon Bedrock\u3092\u4f7f\u3063\u3066\u30ca\u30ec\u30c3\u30b8\u30d9\u30fc\u30b9\u3092\u4f5c\u3063\u3066\u307f\u3088\u3046 - PLAY DEVELOPERS BLOG - \u30dd\u30b1\u30b3\u30f3","og_description":"\u307f\u306a\u3055\u3093\u3001\u3053\u3093\u306b\u3061\u306f\u30024\u6708\u306b\u5165\u793e\u3057\u307e\u3057\u305f\u3001\u30e1\u30c7\u30a3\u30a2\u30b5\u30d7\u30e9\u30a4\u30c1\u30a7\u30fc\u30f3\u6280\u8853\u90e8\u958b\u767a\u7b2c2\u30b0\u30eb\u30fc\u30d7\u306e\u5c71\u672c\u3067\u3059\u3002\u666e\u6bb5\u306e\u958b\u767a\u3084\u30d3\u30b8\u30cd\u30b9\u306e\u696d\u52d9\u306b\u304a\u3044\u3066\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u5834\u9762\u306b\u906d\u9047\u3057\u305f\u3053\u3068\u306f\u306a\u3044\u3067\u3057\u3087\u3046\u304b\uff1f \u300c\u3042\u306e\u30d5\u30a1\u30a4\u30eb\u3001\u3069\u3053\u306b\u3042\u3063\u305f\u3063\u3051& [&hellip;]","og_url":"https:\/\/developers.play.jp\/entry\/2025\/10\/15\/133808","og_site_name":"\u30dd\u30b1\u30b3\u30f3","article_published_time":"2025-10-15T05:49:49+00:00","og_image":[{"width":1300,"height":683,"url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/https3A2F2Fcdn-ak.f.st-hatena.com2Fimages2Ffotolife2Fp2Fplayjp2F202510152F20251015133916.jp.jpeg","type":"image\/jpeg"}],"author":"info@pokecon.jp","twitter_card":"summary_large_image","twitter_misc":{"\u57f7\u7b46\u8005":"info@pokecon.jp","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"3\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/developers.play.jp\/entry\/2025\/10\/15\/133808#article","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/9554\/"},"author":{"name":"info@pokecon.jp","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"headline":"Amazon Bedrock\u3092\u4f7f\u3063\u3066\u30ca\u30ec\u30c3\u30b8\u30d9\u30fc\u30b9\u3092\u4f5c\u3063\u3066\u307f\u3088\u3046 &#8211; PLAY DEVELOPERS BLOG","datePublished":"2025-10-15T05:49:49+00:00","mainEntityOfPage":{"@id":"https:\/\/pokecon.jp\/job\/9554\/"},"wordCount":255,"image":{"@id":"https:\/\/developers.play.jp\/entry\/2025\/10\/15\/133808#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/https3A2F2Fcdn-ak.f.st-hatena.com2Fimages2Ffotolife2Fp2Fplayjp2F202510152F20251015133916.jp.jpeg","articleSection":["\u4f01\u696d\u30c6\u30c3\u30af"],"inLanguage":"ja"},{"@type":"WebPage","@id":"https:\/\/pokecon.jp\/job\/9554\/","url":"https:\/\/developers.play.jp\/entry\/2025\/10\/15\/133808","name":"Amazon Bedrock\u3092\u4f7f\u3063\u3066\u30ca\u30ec\u30c3\u30b8\u30d9\u30fc\u30b9\u3092\u4f5c\u3063\u3066\u307f\u3088\u3046 - PLAY DEVELOPERS BLOG - \u30dd\u30b1\u30b3\u30f3","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/#website"},"primaryImageOfPage":{"@id":"https:\/\/developers.play.jp\/entry\/2025\/10\/15\/133808#primaryimage"},"image":{"@id":"https:\/\/developers.play.jp\/entry\/2025\/10\/15\/133808#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/https3A2F2Fcdn-ak.f.st-hatena.com2Fimages2Ffotolife2Fp2Fplayjp2F202510152F20251015133916.jp.jpeg","datePublished":"2025-10-15T05:49:49+00:00","author":{"@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"breadcrumb":{"@id":"https:\/\/developers.play.jp\/entry\/2025\/10\/15\/133808#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/developers.play.jp\/entry\/2025\/10\/15\/133808"]}]},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/developers.play.jp\/entry\/2025\/10\/15\/133808#primaryimage","url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/https3A2F2Fcdn-ak.f.st-hatena.com2Fimages2Ffotolife2Fp2Fplayjp2F202510152F20251015133916.jp.jpeg","contentUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/https3A2F2Fcdn-ak.f.st-hatena.com2Fimages2Ffotolife2Fp2Fplayjp2F202510152F20251015133916.jp.jpeg","width":1300,"height":683},{"@type":"BreadcrumbList","@id":"https:\/\/developers.play.jp\/entry\/2025\/10\/15\/133808#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u30db\u30fc\u30e0","item":"https:\/\/pokecon.jp\/job\/"},{"@type":"ListItem","position":2,"name":"Amazon Bedrock\u3092\u4f7f\u3063\u3066\u30ca\u30ec\u30c3\u30b8\u30d9\u30fc\u30b9\u3092\u4f5c\u3063\u3066\u307f\u3088\u3046 &#8211; PLAY DEVELOPERS BLOG"}]},{"@type":"WebSite","@id":"https:\/\/pokecon.jp\/job\/#website","url":"https:\/\/pokecon.jp\/job\/","name":"\u30dd\u30b1\u30b3\u30f3","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/pokecon.jp\/job\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ja"},{"@type":"Person","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997","name":"info@pokecon.jp","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","caption":"info@pokecon.jp"},"url":"https:\/\/pokecon.jp\/job\/author\/infopokecon-jp\/"}]}},"_links":{"self":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/9554","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/comments?post=9554"}],"version-history":[{"count":1,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/9554\/revisions"}],"predecessor-version":[{"id":9556,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/9554\/revisions\/9556"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media\/9555"}],"wp:attachment":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media?parent=9554"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/categories?post=9554"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/tags?post=9554"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}