{"id":2255,"date":"2025-03-24T08:47:52","date_gmt":"2025-03-23T23:47:52","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=2255"},"modified":"2025-03-24T08:48:16","modified_gmt":"2025-03-23T23:48:16","slug":"aws-sdk-for-java%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%89%ef%bc%9a%e3%82%bb%e3%83%83%e3%83%88%e3%82%a2%e3%83%83%e3%83%97%e3%81%8b%e3%82%89%e5%ae%9f%e8%b7%b5%e7%9a%84%e3%81%aa%e5%ae%9f%e8%a3%85","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=2255","title":{"rendered":"AWS SDK for Java\u5b8c\u5168\u30ac\u30a4\u30c9\uff1a\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u304b\u3089\u5b9f\u8df5\u7684\u306a\u5b9f\u88c5\u4f8b\u307e\u30677\u3064\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u89e3\u8aac"},"content":{"rendered":"\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">AWS SDK for Java \u306e\u6982\u8981\u3068\u7279\u5fb4<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">AWS SDK for Java \u3068\u306f\u4f55\u304b\uff1a\u4e3b\u8981\u306a\u6a5f\u80fd\u3068\u7279\u5fb4<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-4\">\u6700\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3 2.x \u3068 1.x \u306e\u9055\u3044\u3068\u9078\u629e\u57fa\u6e96<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-9\">\u958b\u767a\u74b0\u5883\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u624b\u9806<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-10\">Maven\/Gradle \u3067\u306e\u4f9d\u5b58\u95a2\u4fc2\u306e\u8ffd\u52a0\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-14\">\u5fc5\u8981\u306a\u8a8d\u8a3c\u60c5\u5831\u306e\u8a2d\u5b9a\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-19\">\u57fa\u672c\u7684\u306a\u4f7f\u7528\u65b9\u6cd5\u3068\u30b3\u30fc\u30c9\u4f8b<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-20\">\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u521d\u671f\u5316\u3068\u8a2d\u5b9a\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-23\">\u975e\u540c\u671f\u51e6\u7406\u306e\u5b9f\u88c5\u65b9\u6cd5\u3068\u6ce8\u610f\u70b9<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-27\">\u4e3b\u8981\u306aAWS\u30b5\u30fc\u30d3\u30b9\u3068\u306e\u9023\u643a\u5b9f\u88c5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-28\">S3\u30aa\u30da\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5\u4f8b\u3068\u52b9\u7387\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u7ba1\u7406<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-30\">DynamoDB\u3068\u306e\u9023\u643a\u306b\u3088\u308b\u30c7\u30fc\u30bf\u30aa\u30da\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-33\">\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u3068\u30c7\u30d0\u30c3\u30b0<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-34\">\u4e00\u822c\u7684\u306a\u30a8\u30e9\u30fc\u30d1\u30bf\u30fc\u30f3\u3068\u89e3\u6c7a\u7b56<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-37\">\u52b9\u679c\u7684\u306a\u30ed\u30b0\u51fa\u529b\u3068\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-40\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-41\">\u63a5\u7d9a\u30d7\u30fc\u30eb\u306e\u8a2d\u5b9a\u3068\u6700\u9069\u5316\u624b\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-43\">\u30ea\u30af\u30a8\u30b9\u30c8\u518d\u8a66\u884c\u306e\u8a2d\u5b9a\u3068\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u7ba1\u7406<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-47\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u3068\u904b\u7528\u7ba1\u7406<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-48\">\u8a8d\u8a3c\u60c5\u5831\u306e\u5b89\u5168\u306a\u7ba1\u7406\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-50\">\u6697\u53f7\u5316\u3068\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>    <\/ul>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">AWS SDK for Java \u306e\u6982\u8981\u3068\u7279\u5fb4<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">AWS SDK for Java \u3068\u306f\u4f55\u304b\uff1a\u4e3b\u8981\u306a\u6a5f\u80fd\u3068\u7279\u5fb4<\/h3>\n\n\n\n<p>AWS SDK for Java\u306f\u3001Java\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304b\u3089AWS\u30b5\u30fc\u30d3\u30b9\u3092\u7c21\u5358\u306b\u5229\u7528\u3059\u308b\u305f\u3081\u306e\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u958b\u767a\u30ad\u30c3\u30c8\u3067\u3059\u3002\u3053\u306eSDK\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u958b\u767a\u8005\u306f\u4f4e\u30ec\u30d9\u30eb\u306e\u8a73\u7d30\u3092\u6c17\u306b\u3059\u308b\u3053\u3068\u306a\u304f\u3001AWS\u306e\u69d8\u3005\u306a\u30b5\u30fc\u30d3\u30b9\u3068\u30b7\u30fc\u30e0\u30ec\u30b9\u306b\u9023\u643a\u3059\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-2\">\u4e3b\u8981\u306a\u6a5f\u80fd<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5305\u62ec\u7684\u306aAWS\u30b5\u30fc\u30d3\u30b9\u30b5\u30dd\u30fc\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>200\u4ee5\u4e0a\u306eAWS\u30b5\u30fc\u30d3\u30b9\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u30b5\u30dd\u30fc\u30c8<\/li>\n\n\n\n<li>\u5404\u30b5\u30fc\u30d3\u30b9\u306b\u6700\u9069\u5316\u3055\u308c\u305fAPI\u30af\u30e9\u30a4\u30a2\u30f3\u30c8<\/li>\n\n\n\n<li>\u30b5\u30fc\u30d3\u30b9\u56fa\u6709\u306e\u4f8b\u5916\u51e6\u7406\u3068\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u52b9\u7387\u7684\u306a\u975e\u540c\u671f\u51e6\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   \/\/ \u975e\u540c\u671f\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u4f5c\u6210\u4f8b\n   S3AsyncClient s3Client = S3AsyncClient.builder()\n       .region(Region.US_WEST_2)\n       .build();\n\n   \/\/ \u975e\u540c\u671f\u64cd\u4f5c\u306e\u5b9f\u884c\n   CompletableFuture&lt;ListBucketsResponse&gt; futureResponse = \n       s3Client.listBuckets();<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u81ea\u52d5\u30ea\u30c8\u30e9\u30a4\u30e1\u30ab\u30cb\u30ba\u30e0<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30a8\u30e9\u30fc\u306e\u81ea\u52d5\u691c\u51fa\u3068\u518d\u8a66\u884c<\/li>\n\n\n\n<li>\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u53ef\u80fd\u306a\u30ea\u30c8\u30e9\u30a4\u30dd\u30ea\u30b7\u30fc<\/li>\n\n\n\n<li>\u6307\u6570\u30d0\u30c3\u30af\u30aa\u30d5\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5b9f\u88c5<\/li>\n<\/ul>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u5f37\u529b\u306a\u8a8d\u8a3c\u30b5\u30dd\u30fc\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   \/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u8a8d\u8a3c\u60c5\u5831\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u30c1\u30a7\u30fc\u30f3\u306e\u4f7f\u7528\n   S3Client s3 = S3Client.builder()\n       .credentialsProvider(DefaultCredentialsProvider.create())\n       .build();<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-3\">\u6280\u8853\u7684\u7279\u5fb4<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e2\u30b8\u30e5\u30e9\u30fc\u8a2d\u8a08<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5fc5\u8981\u306a\u30b5\u30fc\u30d3\u30b9\u306e\u307f\u3092\u4f9d\u5b58\u95a2\u4fc2\u3068\u3057\u3066\u8ffd\u52a0\u53ef\u80fd<\/li>\n\n\n\n<li>\u6700\u5c0f\u9650\u306e\u30e1\u30e2\u30ea\u30d5\u30c3\u30c8\u30d7\u30ea\u30f3\u30c8<\/li>\n\n\n\n<li>\u52b9\u7387\u7684\u306a\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>HTTP\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u67d4\u8edf\u306a\u9078\u629e<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   \/\/ Apache HTTP Client\u306e\u4f7f\u7528\u4f8b\n   S3Client s3 = S3Client.builder()\n       .httpClientBuilder(ApacheHttpClient.builder())\n       .build();<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u5f37\u529b\u306a\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u6a5f\u80fd<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u51e6\u7406\u306e\u30b5\u30dd\u30fc\u30c8<\/li>\n\n\n\n<li>\u81ea\u52d5\u7684\u306aXML\/JSON\u5909\u63db<\/li>\n\n\n\n<li>\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u51e6\u7406\u306e\u7c21\u7565\u5316<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-4\">\u6700\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3 2.x \u3068 1.x \u306e\u9055\u3044\u3068\u9078\u629e\u57fa\u6e96<\/h3>\n\n\n\n<p>AWS SDK for Java\u306b\u306f\u3001\u73fe\u57282\u3064\u306e\u4e3b\u8981\u306a\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u5b58\u5728\u3057\u307e\u3059\u3002\u4ee5\u4e0b\u3067\u5404\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u7279\u5fb4\u3068\u9078\u629e\u57fa\u6e96\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-5\">\u30d0\u30fc\u30b8\u30e7\u30f32.x\uff08\u6700\u65b0\u7248\uff09\u306e\u7279\u5fb4<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u975e\u540c\u671f\u51e6\u7406\u306e\u5f37\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CompletableFuture\u30d9\u30fc\u30b9\u306e\u975e\u540c\u671f\u64cd\u4f5c<\/li>\n\n\n\n<li>\u52b9\u7387\u7684\u306a\u30ea\u30bd\u30fc\u30b9\u5229\u7528<\/li>\n\n\n\n<li>\u6539\u5584\u3055\u308c\u305f\u30b9\u30ec\u30c3\u30c9\u7ba1\u7406<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   \/\/ \u6700\u9069\u5316\u3055\u308c\u305f\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u8a2d\u5b9a\n   S3Client s3 = S3Client.builder()\n       .httpClientBuilder(UrlConnectionHttpClient.builder()\n           .maxConnections(100)\n           .connectionTimeout(Duration.ofSeconds(5)))\n       .build();<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30e2\u30c0\u30f3\u306a\u6a5f\u80fd<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30cd\u30a4\u30c6\u30a3\u30d6\u306eHTTP\/2\u30b5\u30dd\u30fc\u30c8<\/li>\n\n\n\n<li>\u6539\u5584\u3055\u308c\u305f\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0<\/li>\n\n\n\n<li>\u304d\u3081\u7d30\u304b\u306a\u8a2d\u5b9a\u30aa\u30d7\u30b7\u30e7\u30f3<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-6\">\u30d0\u30fc\u30b8\u30e7\u30f31.x \u306e\u7279\u5fb4<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ec\u30ac\u30b7\u30fc\u30b7\u30b9\u30c6\u30e0\u3068\u306e\u4e92\u63db\u6027<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Java 6\u4ee5\u4e0a\u3092\u30b5\u30dd\u30fc\u30c8<\/li>\n\n\n\n<li>\u5f93\u6765\u306eAWS\u30b5\u30fc\u30d3\u30b9\u3068\u306e\u9ad8\u3044\u4e92\u63db\u6027<\/li>\n\n\n\n<li>\u5b89\u5b9a\u3057\u305f\u52d5\u4f5c\u5b9f\u7e3e<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b7\u30f3\u30d7\u30eb\u306aAPI\u8a2d\u8a08<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   \/\/ \u30d0\u30fc\u30b8\u30e7\u30f31.x\u3067\u306e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u4f5c\u6210\n   AmazonS3 s3Client = AmazonS3ClientBuilder\n       .standard()\n       .withRegion(Regions.US_WEST_2)\n       .build();<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-7\">\u30d0\u30fc\u30b8\u30e7\u30f3\u9078\u629e\u306e\u5224\u65ad\u57fa\u6e96<\/h4>\n\n\n<div id=\"id-83fe4a36-ed76-45c3-8d42-3ad321355e79\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u5224\u65ad\u57fa\u6e96<\/th><th>\u30d0\u30fc\u30b8\u30e7\u30f32.x<\/th><th>\u30d0\u30fc\u30b8\u30e7\u30f31.x<\/th><\/tr><\/thead><tbody><tr><td>\u65b0\u898f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/td><td>\u2705 \u63a8\u5968<\/td><td>\u975e\u63a8\u5968<\/td><\/tr><tr><td>\u30ec\u30ac\u30b7\u30fc\u30b7\u30b9\u30c6\u30e0<\/td><td>\u8981\u691c\u8a0e<\/td><td>\u2705 \u9069\u5207<\/td><\/tr><tr><td>\u975e\u540c\u671f\u51e6\u7406\u91cd\u8996<\/td><td>\u2705 \u6700\u9069<\/td><td>\u9650\u5b9a\u7684<\/td><\/tr><tr><td>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u8981\u4ef6<\/td><td>\u2705 \u512a\u308c\u3066\u3044\u308b<\/td><td>\u6a19\u6e96\u7684<\/td><\/tr><tr><td>\u5b66\u7fd2\u66f2\u7dda<\/td><td>\u3084\u3084\u6025<\/td><td>\u7de9\u3084\u304b<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-8\">\u79fb\u884c\u306b\u95a2\u3059\u308b\u8003\u616e\u4e8b\u9805<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b3\u30fc\u30c9\u4e92\u63db\u6027<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>2.x\u3067\u306fAPI\u306e\u7834\u58ca\u7684\u5909\u66f4\u3042\u308a<\/li>\n\n\n\n<li>\u6bb5\u968e\u7684\u306a\u79fb\u884c\u304c\u63a8\u5968<\/li>\n\n\n\n<li>\u4e21\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u5171\u5b58\u3082\u53ef\u80fd<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u79fb\u884c\u306e\u30bf\u30a4\u30df\u30f3\u30b0<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b7\u30b9\u30c6\u30e0\u306e\u5b89\u5b9a\u671f\u306b\u5b9f\u65bd<\/li>\n\n\n\n<li>\u5341\u5206\u306a\u30c6\u30b9\u30c8\u671f\u9593\u306e\u78ba\u4fdd<\/li>\n\n\n\n<li>\u30e2\u30b8\u30e5\u30fc\u30eb\u5358\u4f4d\u3067\u306e\u6bb5\u968e\u7684\u79fb\u884c\u3092\u63a8\u5968<\/li>\n<\/ul>\n\n\n\n<p>\u4ee5\u4e0a\u304cAWS SDK for Java\u306e\u6982\u8981\u3068\u7279\u5fb4\u3001\u304a\u3088\u3073\u30d0\u30fc\u30b8\u30e7\u30f3\u9078\u629e\u306e\u57fa\u6e96\u3068\u306a\u308a\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u5b9f\u969b\u306e\u958b\u767a\u74b0\u5883\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u624b\u9806\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-9\">\u958b\u767a\u74b0\u5883\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u624b\u9806<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-10\">Maven\/Gradle \u3067\u306e\u4f9d\u5b58\u95a2\u4fc2\u306e\u8ffd\u52a0\u65b9\u6cd5<\/h3>\n\n\n\n<p>AWS SDK for Java\u3092\u958b\u767a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5c0e\u5165\u3059\u308b\u969b\u306e\u3001\u8a73\u7d30\u306a\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u624b\u9806\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-11\">Maven\u3067\u306e\u8a2d\u5b9a<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>pom.xml\u3078\u306e\u4f9d\u5b58\u95a2\u4fc2\u8ffd\u52a0<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;dependencyManagement&gt;\n    &lt;dependencies&gt;\n        &lt;dependency&gt;\n            &lt;groupId&gt;software.amazon.awssdk&lt;\/groupId&gt;\n            &lt;artifactId&gt;bom&lt;\/artifactId&gt;\n            &lt;version&gt;2.X.X&lt;\/version&gt;\n            &lt;type&gt;pom&lt;\/type&gt;\n            &lt;scope&gt;import&lt;\/scope&gt;\n        &lt;\/dependency&gt;\n    &lt;\/dependencies&gt;\n&lt;\/dependencyManagement&gt;\n\n&lt;dependencies&gt;\n    &lt;!-- \u5fc5\u8981\u306aAWS\u30b5\u30fc\u30d3\u30b9\u306e\u4f9d\u5b58\u95a2\u4fc2\u3092\u8ffd\u52a0 --&gt;\n    &lt;dependency&gt;\n        &lt;groupId&gt;software.amazon.awssdk&lt;\/groupId&gt;\n        &lt;artifactId&gt;s3&lt;\/artifactId&gt;\n    &lt;\/dependency&gt;\n    &lt;dependency&gt;\n        &lt;groupId&gt;software.amazon.awssdk&lt;\/groupId&gt;\n        &lt;artifactId&gt;dynamodb&lt;\/artifactId&gt;\n    &lt;\/dependency&gt;\n&lt;\/dependencies&gt;<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-12\">Gradle\u3067\u306e\u8a2d\u5b9a<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>build.gradle\u306e\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">dependencies {\n    implementation platform('software.amazon.awssdk:bom:2.X.X')\n    implementation 'software.amazon.awssdk:s3'\n    implementation 'software.amazon.awssdk:dynamodb'\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-13\">\u30e2\u30b8\u30e5\u30fc\u30eb\u9078\u629e\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h4>\n\n\n<div id=\"id-8b11627e-9e9f-46bd-9e7c-bbece546543b\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30b5\u30fc\u30d3\u30b9<\/th><th>\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8ID<\/th><th>\u7528\u9014<\/th><\/tr><\/thead><tbody><tr><td>S3<\/td><td>s3<\/td><td>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30b9\u30c8\u30ec\u30fc\u30b8\u64cd\u4f5c<\/td><\/tr><tr><td>DynamoDB<\/td><td>dynamodb<\/td><td>NoSQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c<\/td><\/tr><tr><td>Lambda<\/td><td>lambda<\/td><td>\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u95a2\u6570\u7ba1\u7406<\/td><\/tr><tr><td>SQS<\/td><td>sqs<\/td><td>\u30e1\u30c3\u30bb\u30fc\u30b8\u30ad\u30e5\u30fc\u64cd\u4f5c<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"i-14\">\u5fc5\u8981\u306a\u8a8d\u8a3c\u60c5\u5831\u306e\u8a2d\u5b9a\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-15\">\u8a8d\u8a3c\u60c5\u5831\u306e\u8a2d\u5b9a\u65b9\u6cd5<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30af\u30ec\u30c7\u30f3\u30b7\u30e3\u30eb\u30d5\u30a1\u30a4\u30eb\u306e\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># ~\/.aws\/credentials<\/pre>\n\n\n[default]\n\n\n\n<p>aws_access_key_id = YOUR_ACCESS_KEY aws_secret_access_key = YOUR_SECRET_KEY # ~\/.aws\/config<\/p>\n\n\n[default]\n\n\n\n<p>region = ap-northeast-1 output = json<\/p>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u74b0\u5883\u5909\u6570\u3067\u306e\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">export AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY\nexport AWS_SECRET_ACCESS_KEY=YOUR_SECRET_KEY\nexport AWS_REGION=ap-northeast-1<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30d7\u30ed\u30b0\u30e9\u30e0\u3067\u306e\u8a8d\u8a3c\u60c5\u5831\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u30d9\u30fc\u30b9\u306e\u8a8d\u8a3c\nS3Client s3 = S3Client.builder()\n    .credentialsProvider(ProfileCredentialsProvider.create(\"custom-profile\"))\n    .region(Region.AP_NORTHEAST_1)\n    .build();\n\n\/\/ \u74b0\u5883\u5909\u6570\u30d9\u30fc\u30b9\u306e\u8a8d\u8a3c\nS3Client s3 = S3Client.builder()\n    .credentialsProvider(EnvironmentVariableCredentialsProvider.create())\n    .region(Region.AP_NORTHEAST_1)\n    .build();<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-16\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8a8d\u8a3c\u60c5\u5831\u306e\u7ba1\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a2\u30af\u30bb\u30b9\u30ad\u30fc\u3092\u76f4\u63a5\u30b3\u30fc\u30c9\u306b\u30cf\u30fc\u30c9\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3057\u306a\u3044<\/li>\n\n\n\n<li>\u5b9a\u671f\u7684\u306a\u30ad\u30fc\u30ed\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u65bd<\/li>\n\n\n\n<li>\u6700\u5c0f\u6a29\u9650\u306e\u539f\u5247\u306b\u5f93\u3063\u305fIAM\u30dd\u30ea\u30b7\u30fc\u306e\u4f7f\u7528<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u74b0\u5883\u5225\u306e\u8a2d\u5b9a\u7ba1\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u958b\u767a\/\u30c6\u30b9\u30c8\/\u672c\u756a\u74b0\u5883\u3067\u7570\u306a\u308b\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u7528<\/li>\n\n\n\n<li>\u74b0\u5883\u5909\u6570\u306b\u3088\u308b\u52d5\u7684\u306a\u8a2d\u5b9a\u5207\u308a\u66ff\u3048<\/li>\n\n\n\n<li>\u30bb\u30ad\u30e5\u30a2\u306a\u8a8d\u8a3c\u60c5\u5831\u7ba1\u7406\u30b5\u30fc\u30d3\u30b9\u306e\u6d3b\u7528<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-17\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/h4>\n\n\n\n<p>\u3088\u304f\u3042\u308b\u554f\u984c\u3068\u89e3\u6c7a\u7b56\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8a8d\u8a3c\u30a8\u30e9\u30fc<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30c7\u30d0\u30c3\u30b0\u30ed\u30b0\u306e\u6709\u52b9\u5316\nSystem.setProperty(\"org.slf4j.simpleLogger.defaultLogLevel\", \"DEBUG\");\n\n\/\/ \u8a8d\u8a3c\u60c5\u5831\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u30c1\u30a7\u30fc\u30f3\u306e\u78ba\u8a8d\nS3Client s3 = S3Client.builder()\n    .credentialsProvider(DefaultCredentialsProvider.create())\n    .region(Region.AP_NORTHEAST_1)\n    .build();<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u63a5\u7d9a\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u8a2d\u5b9a\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\nS3Client s3 = S3Client.builder()\n    .httpClientBuilder(UrlConnectionHttpClient.builder()\n        .connectionTimeout(Duration.ofSeconds(30)))\n    .region(Region.AP_NORTHEAST_1)\n    .build();<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-18\">\u958b\u767a\u74b0\u5883\u69cb\u7bc9\u306e\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>[ ] JDK\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u78ba\u8a8d\uff08Java 8\u4ee5\u4e0a\uff09<\/li>\n\n\n\n<li>[ ] \u30d3\u30eb\u30c9\u30c4\u30fc\u30eb\uff08Maven\/Gradle\uff09\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/li>\n\n\n\n<li>[ ] AWS CLI\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3068\u8a2d\u5b9a<\/li>\n\n\n\n<li>[ ] \u8a8d\u8a3c\u60c5\u5831\u306e\u9069\u5207\u306a\u8a2d\u5b9a<\/li>\n\n\n\n<li>[ ] \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u63a5\u7d9a\u306e\u78ba\u8a8d<\/li>\n\n\n\n<li>[ ] \u30d7\u30ed\u30ad\u30b7\u8a2d\u5b9a\uff08\u5fc5\u8981\u306a\u5834\u5408\uff09<\/li>\n\n\n\n<li>[ ] \u30ed\u30b0\u8a2d\u5b9a\u306e\u78ba\u8a8d<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u624b\u9806\u306b\u5f93\u3046\u3053\u3068\u3067\u3001AWS SDK for Java\u3092\u4f7f\u7528\u3057\u305f\u958b\u767a\u3092\u8fc5\u901f\u306b\u958b\u59cb\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u57fa\u672c\u7684\u306a\u4f7f\u7528\u65b9\u6cd5\u3068\u30b3\u30fc\u30c9\u4f8b\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-19\">\u57fa\u672c\u7684\u306a\u4f7f\u7528\u65b9\u6cd5\u3068\u30b3\u30fc\u30c9\u4f8b<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-20\">\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u521d\u671f\u5316\u3068\u8a2d\u5b9a\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n\n\n\n<p>AWS SDK for Java\u3092\u52b9\u7387\u7684\u306b\u4f7f\u7528\u3059\u308b\u305f\u3081\u306e\u57fa\u672c\u7684\u306a\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u521d\u671f\u5316\u3068\u8a2d\u5b9a\u65b9\u6cd5\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-21\">\u57fa\u672c\u7684\u306a\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u521d\u671f\u5316<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b7\u30f3\u30d7\u30eb\u306a\u521d\u671f\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u57fa\u672c\u7684\u306aS3\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u521d\u671f\u5316\nS3Client s3Client = S3Client.builder()\n    .region(Region.AP_NORTHEAST_1)\n    .build();\n\n\/\/ DynamoDB\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u521d\u671f\u5316\nDynamoDbClient dynamoDbClient = DynamoDbClient.builder()\n    .region(Region.AP_NORTHEAST_1)\n    .build();<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30ab\u30b9\u30bf\u30e0\u8a2d\u5b9a\u3092\u542b\u3080\u521d\u671f\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ HTTP\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u8a2d\u5b9a\u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\nS3Client s3Client = S3Client.builder()\n    .region(Region.AP_NORTHEAST_1)\n    .httpClientBuilder(UrlConnectionHttpClient.builder()\n        .connectionTimeout(Duration.ofSeconds(10))\n        .socketTimeout(Duration.ofSeconds(30))\n        .maxConnections(100))\n    .credentialsProvider(DefaultCredentialsProvider.create())\n    .overrideConfiguration(ClientOverrideConfiguration.builder()\n        .retryPolicy(RetryPolicy.builder().numRetries(3).build())\n        .build())\n    .build();<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-22\">\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u8a2d\u5b9a\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ try-with-resources\u3092\u4f7f\u7528\u3057\u305f\u9069\u5207\u306a\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406\ntry (S3Client s3Client = S3Client.builder()\n        .region(Region.AP_NORTHEAST_1)\n        .build()) {\n\n    ListBucketsResponse response = s3Client.listBuckets();\n    response.buckets().forEach(bucket -&gt; \n        System.out.println(bucket.name()));\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30b0\u30ed\u30fc\u30d0\u30eb\u8a2d\u5b9a\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30b0\u30ed\u30fc\u30d0\u30eb\u306a\u8a2d\u5b9a\u306e\u9069\u7528\nsoftware.amazon.awssdk.core.client.config.ClientOverrideConfiguration globalConfig = \n    ClientOverrideConfiguration.builder()\n        .apiCallTimeout(Duration.ofSeconds(30))\n        .apiCallAttemptTimeout(Duration.ofSeconds(20))\n        .retryPolicy(RetryPolicy.defaultRetryPolicy())\n        .build();\n\n\/\/ \u8907\u6570\u306e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3067\u540c\u3058\u8a2d\u5b9a\u3092\u4f7f\u7528\nS3Client s3Client = S3Client.builder()\n    .overrideConfiguration(globalConfig)\n    .build();\n\nDynamoDbClient dynamoDbClient = DynamoDbClient.builder()\n    .overrideConfiguration(globalConfig)\n    .build();<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-23\">\u975e\u540c\u671f\u51e6\u7406\u306e\u5b9f\u88c5\u65b9\u6cd5\u3068\u6ce8\u610f\u70b9<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-24\">\u57fa\u672c\u7684\u306a\u975e\u540c\u671f\u51e6\u7406<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u975e\u540c\u671f\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u521d\u671f\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u975e\u540c\u671fS3\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u4f5c\u6210\nS3AsyncClient s3AsyncClient = S3AsyncClient.builder()\n    .region(Region.AP_NORTHEAST_1)\n    .build();\n\n\/\/ \u975e\u540c\u671fDynamoDB\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u4f5c\u6210\nDynamoDbAsyncClient dynamoDbAsyncClient = DynamoDbAsyncClient.builder()\n    .region(Region.AP_NORTHEAST_1)\n    .build();<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>CompletableFuture\u3092\u4f7f\u7528\u3057\u305f\u975e\u540c\u671f\u64cd\u4f5c<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u975e\u540c\u671f\u3067\u306e\u30d0\u30b1\u30c3\u30c8\u4e00\u89a7\u53d6\u5f97\nCompletableFuture&lt;ListBucketsResponse&gt; futureResponse = \n    s3AsyncClient.listBuckets();\n\n\/\/ \u975e\u540c\u671f\u51e6\u7406\u306e\u7d50\u679c\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\nfutureResponse\n    .thenAccept(response -&gt; {\n        System.out.println(\"\u30d0\u30b1\u30c3\u30c8\u4e00\u89a7:\");\n        response.buckets().forEach(bucket -&gt; \n            System.out.println(bucket.name()));\n    })\n    .exceptionally(error -&gt; {\n        System.err.println(\"\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: \" + error.getMessage());\n        return null;\n    });<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-25\">\u9ad8\u5ea6\u306a\u975e\u540c\u671f\u30d1\u30bf\u30fc\u30f3<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8907\u6570\u306e\u975e\u540c\u671f\u64cd\u4f5c\u306e\u7d44\u307f\u5408\u308f\u305b<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u8907\u6570\u306e\u30d0\u30b1\u30c3\u30c8\u306e\u5185\u5bb9\u3092\u4e26\u884c\u3057\u3066\u53d6\u5f97\nList&lt;CompletableFuture&lt;ListObjectsV2Response&gt;&gt; futures = \n    bucketNames.stream()\n        .map(bucketName -&gt; s3AsyncClient.listObjectsV2(\n            ListObjectsV2Request.builder()\n                .bucket(bucketName)\n                .build()))\n        .collect(Collectors.toList());\n\n\/\/ \u3059\u3079\u3066\u306e\u7d50\u679c\u3092\u5f85\u6a5f\nCompletableFuture.allOf(futures.toArray(new CompletableFuture[0]))\n    .thenRun(() -&gt; {\n        futures.forEach(future -&gt; {\n            try {\n                ListObjectsV2Response response = future.get();\n                System.out.println(\"Objects: \" + response.contents().size());\n            } catch (Exception e) {\n                System.err.println(\"\u30a8\u30e9\u30fc: \" + e.getMessage());\n            }\n        });\n    });<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u975e\u540c\u671f\u30b9\u30c8\u30ea\u30fc\u30e0\u51e6\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5927\u304d\u306a\u30d5\u30a1\u30a4\u30eb\u306e\u975e\u540c\u671f\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\nPath filePath = Paths.get(\"large-file.zip\");\nAsyncRequestBody requestBody = AsyncRequestBody.fromFile(filePath);\n\nCompletableFuture&lt;PutObjectResponse&gt; future = s3AsyncClient.putObject(\n    PutObjectRequest.builder()\n        .bucket(\"my-bucket\")\n        .key(\"large-file.zip\")\n        .build(),\n    requestBody);\n\nfuture.whenComplete((response, error) -&gt; {\n    if (error != null) {\n        System.err.println(\"\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u30a8\u30e9\u30fc: \" + error.getMessage());\n    } else {\n        System.out.println(\"\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u5b8c\u4e86: \" + response.eTag());\n    }\n});<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-26\">\u5b9f\u88c5\u6642\u306e\u6ce8\u610f\u70b9<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u975e\u540c\u671f\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306f\u660e\u793a\u7684\u306b\u30af\u30ed\u30fc\u30ba\u3059\u308b<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u3092\u9632\u3050\u305f\u3081\u306e\u30ea\u30bd\u30fc\u30b9\u89e3\u653e<\/li>\n\n\n\n<li>\u9069\u5207\u306a\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u306e\u5b9f\u88c5<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u8003\u616e\u4e8b\u9805<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b9\u30ec\u30c3\u30c9\u30d7\u30fc\u30eb\u306e\u30b5\u30a4\u30ba\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u8a2d\u5b9a\u306e\u9069\u5207\u306a\u8abf\u6574<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u76e3\u8996<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5305\u62ec\u7684\u306a\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\nCompletableFuture&lt;GetObjectResponse&gt; future = s3AsyncClient\n    .getObject(request, AsyncResponseTransformer.toBytes())\n    .whenComplete((response, error) -&gt; {\n        if (error != null) {\n            if (error instanceof S3Exception) {\n                S3Exception s3Error = (S3Exception) error;\n                System.err.println(\"S3\u30a8\u30e9\u30fc: \" + s3Error.awsErrorDetails().errorMessage());\n            } else {\n                System.err.println(\"\u4e00\u822c\u30a8\u30e9\u30fc: \" + error.getMessage());\n            }\n        }\n    });<\/pre>\n\n\n\n<p>\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u7d39\u4ecb\u3057\u305f\u57fa\u672c\u7684\u306a\u4f7f\u7528\u65b9\u6cd5\u3068\u30b3\u30fc\u30c9\u4f8b\u3092\u7406\u89e3\u3059\u308b\u3053\u3068\u3067\u3001AWS SDK for Java\u3092\u4f7f\u7528\u3057\u305f\u52b9\u7387\u7684\u306a\u958b\u767a\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u5177\u4f53\u7684\u306aAWS\u30b5\u30fc\u30d3\u30b9\u3068\u306e\u9023\u643a\u5b9f\u88c5\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-27\">\u4e3b\u8981\u306aAWS\u30b5\u30fc\u30d3\u30b9\u3068\u306e\u9023\u643a\u5b9f\u88c5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-28\">S3\u30aa\u30da\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5\u4f8b\u3068\u52b9\u7387\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u7ba1\u7406<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-29\">\u57fa\u672c\u7684\u306aS3\u64cd\u4f5c<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d0\u30b1\u30c3\u30c8\u64cd\u4f5c<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class S3BucketOperations {\n    private final S3Client s3Client;\n\n    public S3BucketOperations(Region region) {\n        this.s3Client = S3Client.builder()\n            .region(region)\n            .build();\n    }\n\n    \/\/ \u30d0\u30b1\u30c3\u30c8\u4f5c\u6210\n    public void createBucket(String bucketName) {\n        CreateBucketRequest request = CreateBucketRequest.builder()\n            .bucket(bucketName)\n            .createBucketConfiguration(\n                CreateBucketConfiguration.builder()\n                    .locationConstraint(s3Client.config().region().toString())\n                    .build())\n            .build();\n\n        s3Client.createBucket(request);\n    }\n\n    \/\/ \u30d0\u30b1\u30c3\u30c8\u4e00\u89a7\u53d6\u5f97\n    public List&lt;String&gt; listBuckets() {\n        ListBucketsResponse response = s3Client.listBuckets();\n        return response.buckets().stream()\n            .map(Bucket::name)\n            .collect(Collectors.toList());\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30d5\u30a1\u30a4\u30eb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class S3FileUploader {\n    private final S3Client s3Client;\n\n    \/\/ \u30de\u30eb\u30c1\u30d1\u30fc\u30c8\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u306e\u95be\u5024\n    private static final long MULTIPART_THRESHOLD = 5 * 1024 * 1024; \/\/ 5MB\n\n    public S3FileUploader(Region region) {\n        this.s3Client = S3Client.builder()\n            .region(region)\n            .build();\n    }\n\n    \/\/ \u5358\u4e00\u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\n    public void uploadFile(String bucketName, String key, Path filePath) {\n        try {\n            PutObjectRequest request = PutObjectRequest.builder()\n                .bucket(bucketName)\n                .key(key)\n                .build();\n\n            s3Client.putObject(request, \n                RequestBody.fromFile(filePath));\n        } catch (S3Exception e) {\n            throw new RuntimeException(\"\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u5931\u6557: \" + e.getMessage(), e);\n        }\n    }\n\n    \/\/ \u30de\u30eb\u30c1\u30d1\u30fc\u30c8\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\n    public void uploadLargeFile(String bucketName, String key, Path filePath) {\n        try {\n            CreateMultipartUploadRequest createRequest = \n                CreateMultipartUploadRequest.builder()\n                    .bucket(bucketName)\n                    .key(key)\n                    .build();\n\n            CreateMultipartUploadResponse response = \n                s3Client.createMultipartUpload(createRequest);\n            String uploadId = response.uploadId();\n\n            \/\/ \u30d1\u30fc\u30c8\u5206\u5272\u3068\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\n            List&lt;CompletedPart&gt; completedParts = new ArrayList&lt;&gt;();\n            long contentLength = Files.size(filePath);\n            long partSize = 5 * 1024 * 1024; \/\/ 5MB\n            long filePosition = 0;\n            int partNumber = 1;\n\n            while (filePosition &lt; contentLength) {\n                long partLength = Math.min(partSize, contentLength - filePosition);\n\n                UploadPartRequest uploadRequest = UploadPartRequest.builder()\n                    .bucket(bucketName)\n                    .key(key)\n                    .uploadId(uploadId)\n                    .partNumber(partNumber)\n                    .build();\n\n                String etag = s3Client.uploadPart(uploadRequest, \n                    RequestBody.fromFile(filePath.toFile())).eTag();\n\n                completedParts.add(CompletedPart.builder()\n                    .partNumber(partNumber)\n                    .eTag(etag)\n                    .build());\n\n                filePosition += partLength;\n                partNumber++;\n            }\n\n            \/\/ \u30de\u30eb\u30c1\u30d1\u30fc\u30c8\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u306e\u5b8c\u4e86\n            CompletedMultipartUpload completedMultipartUpload = \n                CompletedMultipartUpload.builder()\n                    .parts(completedParts)\n                    .build();\n\n            CompleteMultipartUploadRequest completeRequest = \n                CompleteMultipartUploadRequest.builder()\n                    .bucket(bucketName)\n                    .key(key)\n                    .uploadId(uploadId)\n                    .multipartUpload(completedMultipartUpload)\n                    .build();\n\n            s3Client.completeMultipartUpload(completeRequest);\n        } catch (Exception e) {\n            throw new RuntimeException(\"\u30de\u30eb\u30c1\u30d1\u30fc\u30c8\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u5931\u6557: \" + e.getMessage(), e);\n        }\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-30\">DynamoDB\u3068\u306e\u9023\u643a\u306b\u3088\u308b\u30c7\u30fc\u30bf\u30aa\u30da\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-31\">\u30c6\u30fc\u30d6\u30eb\u64cd\u4f5c\u3068CRUD\u5b9f\u88c5<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c6\u30fc\u30d6\u30eb\u64cd\u4f5c\u306e\u57fa\u672c\u5b9f\u88c5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class DynamoDBTableOperations {\n    private final DynamoDbClient dynamoDbClient;\n\n    public DynamoDBTableOperations(Region region) {\n        this.dynamoDbClient = DynamoDbClient.builder()\n            .region(region)\n            .build();\n    }\n\n    \/\/ \u30c6\u30fc\u30d6\u30eb\u4f5c\u6210\n    public void createTable(String tableName, String hashKey) {\n        CreateTableRequest request = CreateTableRequest.builder()\n            .attributeDefinitions(\n                AttributeDefinition.builder()\n                    .attributeName(hashKey)\n                    .attributeType(ScalarAttributeType.S)\n                    .build())\n            .keySchema(\n                KeySchemaElement.builder()\n                    .attributeName(hashKey)\n                    .keyType(KeyType.HASH)\n                    .build())\n            .provisionedThroughput(\n                ProvisionedThroughput.builder()\n                    .readCapacityUnits(5L)\n                    .writeCapacityUnits(5L)\n                    .build())\n            .tableName(tableName)\n            .build();\n\n        try {\n            dynamoDbClient.createTable(request);\n            dynamoDbClient.waiter().waitUntilTableExists(\n                DescribeTableRequest.builder()\n                    .tableName(tableName)\n                    .build());\n        } catch (DynamoDbException e) {\n            throw new RuntimeException(\"\u30c6\u30fc\u30d6\u30eb\u4f5c\u6210\u5931\u6557: \" + e.getMessage(), e);\n        }\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>CRUD\u64cd\u4f5c\u306e\u5b9f\u88c5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class DynamoDBCrudOperations {\n    private final DynamoDbClient dynamoDbClient;\n\n    public DynamoDBCrudOperations(Region region) {\n        this.dynamoDbClient = DynamoDbClient.builder()\n            .region(region)\n            .build();\n    }\n\n    \/\/ \u30a2\u30a4\u30c6\u30e0\u4f5c\u6210\n    public void createItem(String tableName, Map&lt;String, AttributeValue&gt; item) {\n        PutItemRequest request = PutItemRequest.builder()\n            .tableName(tableName)\n            .item(item)\n            .build();\n\n        try {\n            dynamoDbClient.putItem(request);\n        } catch (DynamoDbException e) {\n            throw new RuntimeException(\"\u30a2\u30a4\u30c6\u30e0\u4f5c\u6210\u5931\u6557: \" + e.getMessage(), e);\n        }\n    }\n\n    \/\/ \u30a2\u30a4\u30c6\u30e0\u53d6\u5f97\n    public Map&lt;String, AttributeValue&gt; getItem(\n            String tableName, \n            String keyName, \n            String keyValue) {\n\n        Map&lt;String, AttributeValue&gt; key = new HashMap&lt;&gt;();\n        key.put(keyName, AttributeValue.builder().s(keyValue).build());\n\n        GetItemRequest request = GetItemRequest.builder()\n            .tableName(tableName)\n            .key(key)\n            .build();\n\n        try {\n            GetItemResponse response = dynamoDbClient.getItem(request);\n            return response.item();\n        } catch (DynamoDbException e) {\n            throw new RuntimeException(\"\u30a2\u30a4\u30c6\u30e0\u53d6\u5f97\u5931\u6557: \" + e.getMessage(), e);\n        }\n    }\n\n    \/\/ \u30a2\u30a4\u30c6\u30e0\u66f4\u65b0\n    public void updateItem(\n            String tableName, \n            String keyName, \n            String keyValue,\n            Map&lt;String, AttributeValue&gt; updates) {\n\n        Map&lt;String, AttributeValue&gt; key = new HashMap&lt;&gt;();\n        key.put(keyName, AttributeValue.builder().s(keyValue).build());\n\n        Map&lt;String, AttributeValueUpdate&gt; updateAttributes = new HashMap&lt;&gt;();\n        updates.forEach((k, v) -&gt; \n            updateAttributes.put(k, \n                AttributeValueUpdate.builder()\n                    .value(v)\n                    .action(AttributeAction.PUT)\n                    .build()));\n\n        UpdateItemRequest request = UpdateItemRequest.builder()\n            .tableName(tableName)\n            .key(key)\n            .attributeUpdates(updateAttributes)\n            .build();\n\n        try {\n            dynamoDbClient.updateItem(request);\n        } catch (DynamoDbException e) {\n            throw new RuntimeException(\"\u30a2\u30a4\u30c6\u30e0\u66f4\u65b0\u5931\u6557: \" + e.getMessage(), e);\n        }\n    }\n\n    \/\/ \u30a2\u30a4\u30c6\u30e0\u524a\u9664\n    public void deleteItem(\n            String tableName, \n            String keyName, \n            String keyValue) {\n\n        Map&lt;String, AttributeValue&gt; key = new HashMap&lt;&gt;();\n        key.put(keyName, AttributeValue.builder().s(keyValue).build());\n\n        DeleteItemRequest request = DeleteItemRequest.builder()\n            .tableName(tableName)\n            .key(key)\n            .build();\n\n        try {\n            dynamoDbClient.deleteItem(request);\n        } catch (DynamoDbException e) {\n            throw new RuntimeException(\"\u30a2\u30a4\u30c6\u30e0\u524a\u9664\u5931\u6557: \" + e.getMessage(), e);\n        }\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-32\">\u30d0\u30c3\u30c1\u64cd\u4f5c\u3068\u52b9\u7387\u7684\u306a\u30c7\u30fc\u30bf\u51e6\u7406<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d0\u30c3\u30c1\u66f8\u304d\u8fbc\u307f\u5b9f\u88c5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class DynamoDBBatchOperations {\n    private final DynamoDbClient dynamoDbClient;\n    private static final int BATCH_SIZE = 25; \/\/ DynamoDB\u306e\u5236\u9650\n\n    public DynamoDBBatchOperations(Region region) {\n        this.dynamoDbClient = DynamoDbClient.builder()\n            .region(region)\n            .build();\n    }\n\n    \/\/ \u30d0\u30c3\u30c1\u66f8\u304d\u8fbc\u307f\n    public void batchWriteItems(\n            String tableName, \n            List&lt;Map&lt;String, AttributeValue&gt;&gt; items) {\n\n        \/\/ \u30d0\u30c3\u30c1\u30b5\u30a4\u30ba\u3054\u3068\u306b\u5206\u5272\n        for (int i = 0; i &lt; items.size(); i += BATCH_SIZE) {\n            int end = Math.min(i + BATCH_SIZE, items.size());\n            List&lt;Map&lt;String, AttributeValue&gt;&gt; batch = \n                items.subList(i, end);\n\n            List&lt;WriteRequest&gt; writeRequests = batch.stream()\n                .map(item -&gt; WriteRequest.builder()\n                    .putRequest(\n                        PutRequest.builder()\n                            .item(item)\n                            .build())\n                    .build())\n                .collect(Collectors.toList());\n\n            Map&lt;String, List&lt;WriteRequest&gt;&gt; requestItems = \n                new HashMap&lt;&gt;();\n            requestItems.put(tableName, writeRequests);\n\n            BatchWriteItemRequest batchWriteItemRequest = \n                BatchWriteItemRequest.builder()\n                    .requestItems(requestItems)\n                    .build();\n\n            try {\n                BatchWriteItemResponse response = \n                    dynamoDbClient.batchWriteItem(batchWriteItemRequest);\n\n                \/\/ \u672a\u51e6\u7406\u9805\u76ee\u306e\u518d\u8a66\u884c\n                Map&lt;String, List&lt;WriteRequest&gt;&gt; unprocessed = \n                    response.unprocessedItems();\n                while (!unprocessed.isEmpty()) {\n                    BatchWriteItemRequest retryRequest = \n                        BatchWriteItemRequest.builder()\n                            .requestItems(unprocessed)\n                            .build();\n\n                    response = dynamoDbClient.batchWriteItem(retryRequest);\n                    unprocessed = response.unprocessedItems();\n\n                    if (!unprocessed.isEmpty()) {\n                        Thread.sleep(1000); \/\/ \u30d0\u30c3\u30af\u30aa\u30d5\n                    }\n                }\n            } catch (Exception e) {\n                throw new RuntimeException(\n                    \"\u30d0\u30c3\u30c1\u66f8\u304d\u8fbc\u307f\u5931\u6557: \" + e.getMessage(), e);\n            }\n        }\n    }\n}<\/pre>\n\n\n\n<p>\u4ee5\u4e0a\u304c\u4e3b\u8981\u306aAWS\u30b5\u30fc\u30d3\u30b9\u3068\u306e\u9023\u643a\u5b9f\u88c5\u4f8b\u3067\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u3068\u30c7\u30d0\u30c3\u30b0\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-33\">\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u3068\u30c7\u30d0\u30c3\u30b0<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-34\">\u4e00\u822c\u7684\u306a\u30a8\u30e9\u30fc\u30d1\u30bf\u30fc\u30f3\u3068\u89e3\u6c7a\u7b56<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-35\">AWS SDK\u306e\u4e3b\u8981\u306a\u30a8\u30e9\u30fc\u30bf\u30a4\u30d7<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b5\u30fc\u30d3\u30b9\u56fa\u6709\u306e\u30a8\u30e9\u30fc\u51e6\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class AWSErrorHandler {\n    \/\/ \u30b5\u30fc\u30d3\u30b9\u56fa\u6709\u306e\u4f8b\u5916\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\n    public void handleServiceException(String bucketName, String key) {\n        try {\n            s3Client.getObject(GetObjectRequest.builder()\n                .bucket(bucketName)\n                .key(key)\n                .build());\n        } catch (NoSuchBucketException e) {\n            \/\/ \u30d0\u30b1\u30c3\u30c8\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u306e\u51e6\u7406\n            logger.error(\"\u30d0\u30b1\u30c3\u30c8\u304c\u5b58\u5728\u3057\u307e\u305b\u3093: {}\", bucketName, e);\n            throw new CustomException(\"\u6307\u5b9a\u3055\u308c\u305f\u30d0\u30b1\u30c3\u30c8\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\", e);\n        } catch (NoSuchKeyException e) {\n            \/\/ \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u306e\u51e6\u7406\n            logger.error(\"\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304c\u5b58\u5728\u3057\u307e\u305b\u3093: {}\", key, e);\n            throw new CustomException(\"\u6307\u5b9a\u3055\u308c\u305f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\", e);\n        } catch (S3Exception e) {\n            \/\/ \u305d\u306e\u4ed6\u306eS3\u56fa\u6709\u306e\u30a8\u30e9\u30fc\u51e6\u7406\n            logger.error(\"S3\u64cd\u4f5c\u30a8\u30e9\u30fc: {}\", e.getMessage(), e);\n            throw new CustomException(\"S3\u64cd\u4f5c\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\", e);\n        }\n    }\n\n    \/\/ \u30ea\u30c8\u30e9\u30a4\u53ef\u80fd\u306a\u30a8\u30e9\u30fc\u306e\u51e6\u7406\n    public void handleRetryableError(Runnable operation) {\n        RetryPolicy retryPolicy = RetryPolicy.builder()\n            .numRetries(3)\n            .backoffStrategy(BackoffStrategy.defaultStrategy())\n            .throttlingBackoffStrategy(BackoffStrategy.defaultThrottlingStrategy())\n            .build();\n\n        try {\n            operation.run();\n        } catch (SdkServiceException e) {\n            if (e.isRetryable()) {\n                \/\/ \u30ea\u30c8\u30e9\u30a4\u53ef\u80fd\u306a\u30a8\u30e9\u30fc\u306e\u51e6\u7406\n                handleRetry(operation, retryPolicy);\n            } else {\n                throw e;\n            }\n        }\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30a8\u30e9\u30fc\u306e\u51e6\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class NetworkErrorHandler {\n    private static final int MAX_RETRIES = 3;\n    private static final Duration TIMEOUT = Duration.ofSeconds(10);\n\n    public void configureNetworkHandling(S3ClientBuilder builder) {\n        builder.httpClientBuilder(UrlConnectionHttpClient.builder()\n            .connectionTimeout(TIMEOUT)\n            .socketTimeout(TIMEOUT))\n            .overrideConfiguration(ClientOverrideConfiguration.builder()\n                .retryPolicy(RetryPolicy.builder()\n                    .numRetries(MAX_RETRIES)\n                    .retryCondition(RetryCondition.defaultRetryCondition())\n                    .backoffStrategy(BackoffStrategy.defaultStrategy())\n                    .build())\n                .build());\n    }\n\n    \/\/ \u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u51e6\u7406\n    public void handleTimeout(Runnable operation) {\n        try {\n            operation.run();\n        } catch (SdkClientException e) {\n            if (e.getCause() instanceof SocketTimeoutException) {\n                logger.error(\"\u64cd\u4f5c\u304c\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u3057\u307e\u3057\u305f\", e);\n                throw new CustomException(\"\u64cd\u4f5c\u304c\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u3057\u307e\u3057\u305f\", e);\n            }\n            throw e;\n        }\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-36\">\u30b0\u30ed\u30fc\u30d0\u30eb\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30e9\u30fc\u306e\u5b9f\u88c5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class GlobalErrorHandler {\n    private static final Logger logger = LoggerFactory.getLogger(GlobalErrorHandler.class);\n\n    public void handleAWSError(Throwable error) {\n        if (error instanceof SdkServiceException) {\n            SdkServiceException serviceException = (SdkServiceException) error;\n            logger.error(\"AWS Service Error: {}\", serviceException.getMessage());\n            logger.error(\"Error Code: {}\", serviceException.awsErrorDetails().errorCode());\n            logger.error(\"Service Name: {}\", serviceException.awsErrorDetails().serviceName());\n            logger.error(\"Request ID: {}\", serviceException.requestId());\n        } else if (error instanceof SdkClientException) {\n            logger.error(\"AWS Client Error: {}\", error.getMessage());\n        } else {\n            logger.error(\"Unexpected Error: {}\", error.getMessage());\n        }\n    }\n\n    \/\/ \u30ab\u30b9\u30bf\u30e0\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\n    public &lt;T&gt; T executeWithErrorHandling(Supplier&lt;T&gt; operation) {\n        try {\n            return operation.get();\n        } catch (Exception e) {\n            handleAWSError(e);\n            throw new CustomException(\"AWS\u64cd\u4f5c\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\", e);\n        }\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-37\">\u52b9\u679c\u7684\u306a\u30ed\u30b0\u51fa\u529b\u3068\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-38\">\u30ed\u30b0\u8a2d\u5b9a\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>SLF4J\u3092\u4f7f\u7528\u3057\u305f\u30ed\u30b0\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class LogConfiguration {\n    public static void configureLogging() {\n        \/\/ SDK\u5168\u4f53\u306e\u30ed\u30b0\u30ec\u30d9\u30eb\u8a2d\u5b9a\n        System.setProperty(\"org.slf4j.simpleLogger.defaultLogLevel\", \"DEBUG\");\n\n        \/\/ Wire logging\u306e\u6709\u52b9\u5316\uff08HTTP\u30ea\u30af\u30a8\u30b9\u30c8\/\u30ec\u30b9\u30dd\u30f3\u30b9\u306e\u8a73\u7d30\u30ed\u30b0\uff09\n        System.setProperty(\"org.slf4j.simpleLogger.log.software.amazon.awssdk.request\", \"DEBUG\");\n        System.setProperty(\"org.slf4j.simpleLogger.log.software.amazon.awssdk.requestId\", \"DEBUG\");\n    }\n\n    \/\/ \u30ab\u30b9\u30bf\u30e0\u30ed\u30b0\u30d5\u30a9\u30fc\u30de\u30c3\u30bf\n    public static String formatRequestLog(SdkRequest request) {\n        return String.format(\"Request: %s, Parameters: %s\",\n            request.getClass().getSimpleName(),\n            request.toString());\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30e1\u30c8\u30ea\u30af\u30b9\u53ce\u96c6<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class MetricsCollector {\n    private final MetricRegistry metrics = new MetricRegistry();\n    private final Timer requestTimer;\n\n    public MetricsCollector() {\n        this.requestTimer = metrics.timer(\"aws-request-timer\");\n    }\n\n    \/\/ \u30ea\u30af\u30a8\u30b9\u30c8\u5b9f\u884c\u6642\u9593\u306e\u8a08\u6e2c\n    public &lt;T&gt; T measureRequestTime(Supplier&lt;T&gt; operation) {\n        Timer.Context context = requestTimer.time();\n        try {\n            return operation.get();\n        } finally {\n            context.stop();\n        }\n    }\n\n    \/\/ \u30e1\u30c8\u30ea\u30af\u30b9\u30ec\u30dd\u30fc\u30c8\u306e\u751f\u6210\n    public void reportMetrics() {\n        ConsoleReporter reporter = ConsoleReporter.forRegistry(metrics)\n            .convertRatesTo(TimeUnit.SECONDS)\n            .convertDurationsTo(TimeUnit.MILLISECONDS)\n            .build();\n        reporter.report();\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-39\">\u30c7\u30d0\u30c3\u30b0\u3068\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30d0\u30c3\u30b0\u30e2\u30fc\u30c9\u306e\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class DebugConfiguration {\n    public static void enableDebugMode(S3ClientBuilder builder) {\n        builder.overrideConfiguration(ClientOverrideConfiguration.builder()\n            .addExecutionInterceptor(new TracingInterceptor())\n            .build());\n    }\n\n    \/\/ \u30ab\u30b9\u30bf\u30e0\u30a4\u30f3\u30bf\u30fc\u30bb\u30d7\u30bf\u30fc\n    public static class TracingInterceptor implements ExecutionInterceptor {\n        @Override\n        public void beforeExecution(Context.BeforeExecution context) {\n            SdkRequest request = context.request();\n            logger.debug(\"\u30ea\u30af\u30a8\u30b9\u30c8\u958b\u59cb: {}\", request.getClass().getSimpleName());\n        }\n\n        @Override\n        public void afterExecution(Context.AfterExecution context) {\n            SdkResponse response = context.response();\n            logger.debug(\"\u30ea\u30af\u30a8\u30b9\u30c8\u5b8c\u4e86: {}\", response.getClass().getSimpleName());\n        }\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u30ac\u30a4\u30c9<\/strong><\/li>\n<\/ol>\n\n\n\n<p>\u4e00\u822c\u7684\u306a\u554f\u984c\u3068\u89e3\u6c7a\u65b9\u6cd5\uff1a<\/p>\n\n\n<div id=\"id-98f63ea4-7c0f-41f3-8a26-2ecf32fe42d6\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u554f\u984c<\/th><th>\u78ba\u8a8d\u9805\u76ee<\/th><th>\u89e3\u6c7a\u7b56<\/th><\/tr><\/thead><tbody><tr><td>\u8a8d\u8a3c\u30a8\u30e9\u30fc<\/td><td>\u8a8d\u8a3c\u60c5\u5831\u306e\u8a2d\u5b9a<\/td><td>\u74b0\u5883\u5909\u6570\u3068\u30af\u30ec\u30c7\u30f3\u30b7\u30e3\u30eb\u30d5\u30a1\u30a4\u30eb\u306e\u78ba\u8a8d<\/td><\/tr><tr><td>\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8<\/td><td>\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u63a5\u7d9a<\/td><td>\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u8a2d\u5b9a\u306e\u8abf\u6574\u3068\u30ea\u30c8\u30e9\u30a4\u30dd\u30ea\u30b7\u30fc\u306e\u8a2d\u5b9a<\/td><\/tr><tr><td>\u30b9\u30ed\u30c3\u30c8\u30ea\u30f3\u30b0<\/td><td>API\u5236\u9650<\/td><td>\u30d0\u30c3\u30af\u30aa\u30d5\u6226\u7565\u306e\u5b9f\u88c5\u3068\u30ea\u30af\u30a8\u30b9\u30c8\u5236\u9650\u306e\u78ba\u8a8d<\/td><\/tr><tr><td>\u30e1\u30e2\u30ea\u4e0d\u8db3<\/td><td>\u30d2\u30fc\u30d7\u30b5\u30a4\u30ba<\/td><td>JVM\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u8abf\u6574\u3068\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u306e\u78ba\u8a8d<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u5206\u6790<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class PerformanceAnalyzer {\n    private final MetricsCollector metricsCollector;\n\n    public PerformanceAnalyzer() {\n        this.metricsCollector = new MetricsCollector();\n    }\n\n    \/\/ \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u5206\u6790\u306e\u5b9f\u884c\n    public void analyzePerformance(String bucketName, String key) {\n        Timer.Context context = metricsCollector.startTimer(\"s3-operation\");\n        try {\n            \/\/ S3\u64cd\u4f5c\u306e\u5b9f\u884c\n            s3Client.getObject(GetObjectRequest.builder()\n                .bucket(bucketName)\n                .key(key)\n                .build());\n        } finally {\n            context.stop();\n            \/\/ \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30e1\u30c8\u30ea\u30af\u30b9\u306e\u51fa\u529b\n            metricsCollector.reportMetrics();\n        }\n    }\n}<\/pre>\n\n\n\n<p>\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u8aac\u660e\u3057\u305f\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u3068\u30c7\u30d0\u30c3\u30b0\u624b\u6cd5\u3092\u9069\u5207\u306b\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u5b89\u5b9a\u3057\u305fAWS SDK for Java\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-40\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-41\">\u63a5\u7d9a\u30d7\u30fc\u30eb\u306e\u8a2d\u5b9a\u3068\u6700\u9069\u5316\u624b\u6cd5<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-42\">HTTP\u63a5\u7d9a\u30d7\u30fc\u30eb\u306e\u6700\u9069\u5316<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u63a5\u7d9a\u30d7\u30fc\u30eb\u8a2d\u5b9a\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class ConnectionPoolOptimizer {\n    public S3Client createOptimizedClient() {\n        \/\/ HTTP\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u6700\u9069\u5316\u8a2d\u5b9a\n        SdkHttpClient httpClient = ApacheHttpClient.builder()\n            .maxConnections(100) \/\/ \u540c\u6642\u63a5\u7d9a\u6570\u306e\u8a2d\u5b9a\n            .connectionTimeout(Duration.ofSeconds(5))\n            .connectionAcquisitionTimeout(Duration.ofSeconds(10))\n            .connectionMaxIdleTime(Duration.ofMinutes(5))\n            .useIdleConnectionReaper(true) \/\/ \u30a2\u30a4\u30c9\u30eb\u63a5\u7d9a\u306e\u81ea\u52d5\u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7\n            .build();\n\n        return S3Client.builder()\n            .httpClient(httpClient)\n            .build();\n    }\n\n    \/\/ \u975e\u540c\u671f\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u6700\u9069\u5316\u8a2d\u5b9a\n    public S3AsyncClient createOptimizedAsyncClient() {\n        NettyNioAsyncHttpClient.Builder httpClientBuilder = \n            NettyNioAsyncHttpClient.builder()\n                .maxConcurrency(100)\n                .maxPendingConnectionAcquires(10000)\n                .connectionTimeout(Duration.ofSeconds(5))\n                .readTimeout(Duration.ofSeconds(30));\n\n        return S3AsyncClient.builder()\n            .httpClientBuilder(httpClientBuilder)\n            .build();\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u63a5\u7d9a\u30d7\u30fc\u30eb\u306e\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class ConnectionPoolMonitor {\n    private final MetricRegistry metrics = new MetricRegistry();\n    private final Counter activeConnections;\n    private final Counter pendingRequests;\n\n    public ConnectionPoolMonitor() {\n        this.activeConnections = metrics.counter(\"active-connections\");\n        this.pendingRequests = metrics.counter(\"pending-requests\");\n    }\n\n    \/\/ \u63a5\u7d9a\u72b6\u614b\u306e\u76e3\u8996\n    public void monitorConnections(SdkHttpClient httpClient) {\n        if (httpClient instanceof ApacheHttpClient) {\n            ApacheHttpClient apacheClient = (ApacheHttpClient) httpClient;\n            \/\/ \u63a5\u7d9a\u30d7\u30fc\u30eb\u306e\u72b6\u614b\u3092\u5b9a\u671f\u7684\u306b\u8a18\u9332\n            ScheduledExecutorService executor = \n                Executors.newSingleThreadScheduledExecutor();\n\n            executor.scheduleAtFixedRate(() -&gt; {\n                activeConnections.inc(apacheClient.getActiveConnections());\n                pendingRequests.inc(apacheClient.getPendingRequests());\n\n                logger.info(\"\u63a5\u7d9a\u30d7\u30fc\u30eb\u72b6\u614b - \u30a2\u30af\u30c6\u30a3\u30d6\u63a5\u7d9a: {}, \u4fdd\u7559\u4e2d\u30ea\u30af\u30a8\u30b9\u30c8: {}\",\n                    activeConnections.getCount(),\n                    pendingRequests.getCount());\n            }, 0, 1, TimeUnit.MINUTES);\n        }\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-43\">\u30ea\u30af\u30a8\u30b9\u30c8\u518d\u8a66\u884c\u306e\u8a2d\u5b9a\u3068\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u7ba1\u7406<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-44\">\u518d\u8a66\u884c\u30dd\u30ea\u30b7\u30fc\u306e\u6700\u9069\u5316<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ab\u30b9\u30bf\u30e0\u518d\u8a66\u884c\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class RetryPolicyOptimizer {\n    \/\/ \u518d\u8a66\u884c\u30dd\u30ea\u30b7\u30fc\u306e\u6700\u9069\u5316\u8a2d\u5b9a\n    public ClientOverrideConfiguration createOptimizedRetryPolicy() {\n        return ClientOverrideConfiguration.builder()\n            .retryPolicy(RetryPolicy.builder()\n                .numRetries(3)\n                .retryCondition(RetryCondition.builder()\n                    .orRetryCondition(RetryCondition.defaultRetryCondition())\n                    .orRetryCondition(this::isCustomRetryableException)\n                    .build())\n                .backoffStrategy(BackoffStrategy.builder()\n                    .defaultBackoffStrategy(BackoffStrategy.defaultStrategy())\n                    .throttlingBackoffStrategy(BackoffStrategy.defaultThrottlingStrategy())\n                    .build())\n                .build())\n            .build();\n    }\n\n    \/\/ \u30ab\u30b9\u30bf\u30e0\u518d\u8a66\u884c\u6761\u4ef6\n    private boolean isCustomRetryableException(SdkException e) {\n        return e instanceof SdkClientException &amp;&amp;\n            e.getCause() instanceof SocketTimeoutException;\n    }\n\n    \/\/ \u6307\u6570\u30d0\u30c3\u30af\u30aa\u30d5\u3092\u4f7f\u7528\u3057\u305f\u518d\u8a66\u884c\u30cf\u30f3\u30c9\u30e9\u30fc\n    public &lt;T&gt; T executeWithRetry(Supplier&lt;T&gt; operation, int maxRetries) {\n        int attempt = 0;\n        while (true) {\n            try {\n                return operation.get();\n            } catch (Exception e) {\n                if (++attempt &gt; maxRetries || !isRetryableException(e)) {\n                    throw e;\n                }\n                long delayMillis = calculateExponentialDelay(attempt);\n                try {\n                    Thread.sleep(delayMillis);\n                } catch (InterruptedException ie) {\n                    Thread.currentThread().interrupt();\n                    throw new RuntimeException(ie);\n                }\n            }\n        }\n    }\n\n    \/\/ \u6307\u6570\u30d0\u30c3\u30af\u30aa\u30d5\u306e\u9045\u5ef6\u8a08\u7b97\n    private long calculateExponentialDelay(int attempt) {\n        return Math.min(1000L * (long) Math.pow(2, attempt - 1), 30000L);\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u7ba1\u7406\u306e\u5b9f\u88c5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class TimeoutManager {\n    \/\/ \u30b5\u30fc\u30d3\u30b9\u5225\u306e\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u8a2d\u5b9a\n    public void configureTimeouts(S3ClientBuilder builder) {\n        builder.overrideConfiguration(ClientOverrideConfiguration.builder()\n            .apiCallTimeout(Duration.ofSeconds(30))\n            .apiCallAttemptTimeout(Duration.ofSeconds(10))\n            .build());\n    }\n\n    \/\/ \u64cd\u4f5c\u5225\u306e\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u8a2d\u5b9a\n    public void configureOperationTimeouts(GetObjectRequest.Builder requestBuilder) {\n        requestBuilder\n            .overrideConfiguration(config -&gt; config\n                .apiCallTimeout(Duration.ofMinutes(5))\n                .apiCallAttemptTimeout(Duration.ofSeconds(30)));\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-45\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u518d\u5229\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class ClientManager {\n    private static final S3Client s3Client;\n    private static final DynamoDbClient dynamoDbClient;\n\n    static {\n        \/\/ \u30b7\u30f3\u30b0\u30eb\u30c8\u30f3\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u521d\u671f\u5316\n        s3Client = S3Client.builder()\n            .region(Region.AP_NORTHEAST_1)\n            .httpClient(createOptimizedHttpClient())\n            .overrideConfiguration(createOptimizedConfig())\n            .build();\n\n        dynamoDbClient = DynamoDbClient.builder()\n            .region(Region.AP_NORTHEAST_1)\n            .httpClient(createOptimizedHttpClient())\n            .overrideConfiguration(createOptimizedConfig())\n            .build();\n    }\n\n    private static SdkHttpClient createOptimizedHttpClient() {\n        return ApacheHttpClient.builder()\n            .maxConnections(100)\n            .expectContinueEnabled(true)\n            .connectionTimeout(Duration.ofSeconds(5))\n            .socketTimeout(Duration.ofSeconds(30))\n            .build();\n    }\n\n    private static ClientOverrideConfiguration createOptimizedConfig() {\n        return ClientOverrideConfiguration.builder()\n            .retryPolicy(RetryPolicy.defaultRetryPolicy())\n            .apiCallTimeout(Duration.ofSeconds(60))\n            .apiCallAttemptTimeout(Duration.ofSeconds(30))\n            .build();\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30d0\u30c3\u30c1\u51e6\u7406\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class BatchOperationOptimizer {\n    private static final int BATCH_SIZE = 25;\n    private final ExecutorService executor = \n        Executors.newFixedThreadPool(10);\n\n    \/\/ \u4e26\u5217\u30d0\u30c3\u30c1\u51e6\u7406\u306e\u5b9f\u88c5\n    public &lt;T&gt; void processBatch(List&lt;T&gt; items, Consumer&lt;List&lt;T&gt;&gt; batchOperation) {\n        List&lt;List&lt;T&gt;&gt; batches = new ArrayList&lt;&gt;();\n        for (int i = 0; i &lt; items.size(); i += BATCH_SIZE) {\n            batches.add(items.subList(i, \n                Math.min(i + BATCH_SIZE, items.size())));\n        }\n\n        List&lt;CompletableFuture&lt;Void&gt;&gt; futures = batches.stream()\n            .map(batch -&gt; CompletableFuture.runAsync(() -&gt; \n                batchOperation.accept(batch), executor))\n            .collect(Collectors.toList());\n\n        CompletableFuture.allOf(\n            futures.toArray(new CompletableFuture[0]))\n            .join();\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-46\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u306e\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u51e6\u7406\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u9069\u5207\u306a\u30d0\u30c3\u30d5\u30a1\u30b5\u30a4\u30ba\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u306e\u9632\u6b62<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b9\u30eb\u30fc\u30d7\u30c3\u30c8\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4e26\u5217\u51e6\u7406\u306e\u9069\u5207\u306a\u4f7f\u7528<\/li>\n\n\n\n<li>\u30d0\u30c3\u30c1\u51e6\u7406\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u63a5\u7d9a\u30d7\u30fc\u30eb\u306e\u6700\u9069\u5316<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ec\u30a4\u30c6\u30f3\u30b7\u30fc\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30ea\u30fc\u30b8\u30e7\u30f3\u9078\u629e\u306e\u6700\u9069\u5316<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30f3\u30b0\u6226\u7565\u306e\u5b9f\u88c5<\/li>\n\n\n\n<li>\u975e\u540c\u671f\u51e6\u7406\u306e\u6d3b\u7528<\/li>\n<\/ul>\n\n\n<div id=\"id-e33ef4a5-09ec-4cbb-80ed-5094955e8932\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u6700\u9069\u5316\u9805\u76ee<\/th><th>\u63a8\u5968\u8a2d\u5b9a<\/th><th>\u6ce8\u610f\u70b9<\/th><\/tr><\/thead><tbody><tr><td>\u6700\u5927\u63a5\u7d9a\u6570<\/td><td>50-100<\/td><td>\u30b7\u30b9\u30c6\u30e0\u30ea\u30bd\u30fc\u30b9\u3092\u8003\u616e<\/td><\/tr><tr><td>\u30ea\u30c8\u30e9\u30a4\u56de\u6570<\/td><td>3-5<\/td><td>\u30d0\u30c3\u30af\u30aa\u30d5\u6226\u7565\u3092\u9069\u7528<\/td><\/tr><tr><td>\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8<\/td><td>30-60\u79d2<\/td><td>\u64cd\u4f5c\u306e\u6027\u8cea\u306b\u5fdc\u3058\u3066\u8abf\u6574<\/td><\/tr><tr><td>\u30d0\u30c3\u30c1\u30b5\u30a4\u30ba<\/td><td>25<\/td><td>\u30b5\u30fc\u30d3\u30b9\u5236\u9650\u3092\u8003\u616e<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u4ee5\u4e0a\u304c\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306e\u89e3\u8aac\u3067\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u3068\u904b\u7528\u7ba1\u7406\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u8aac\u660e\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-47\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u3068\u904b\u7528\u7ba1\u7406<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-48\">\u8a8d\u8a3c\u60c5\u5831\u306e\u5b89\u5168\u306a\u7ba1\u7406\u65b9\u6cd5<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-49\">\u8a8d\u8a3c\u60c5\u5831\u7ba1\u7406\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30bb\u30ad\u30e5\u30a2\u306a\u8a8d\u8a3c\u60c5\u5831\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306e\u5b9f\u88c5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class SecureCredentialsProvider {\n    \/\/ \u74b0\u5883\u5909\u6570\u30d9\u30fc\u30b9\u306e\u8a8d\u8a3c\u60c5\u5831\u7ba1\u7406\n    public AwsCredentialsProvider createEnvironmentCredentials() {\n        return EnvironmentVariableCredentialsProvider.create();\n    }\n\n    \/\/ AWS Secrets Manager\u3092\u4f7f\u7528\u3057\u305f\u8a8d\u8a3c\u60c5\u5831\u7ba1\u7406\n    public AwsCredentialsProvider createSecretsManagerCredentials() {\n        SecretsManagerClient secretsClient = SecretsManagerClient.builder()\n            .region(Region.AP_NORTHEAST_1)\n            .build();\n\n        String secretValue = secretsClient.getSecretValue(request -&gt; request\n            .secretId(\"aws-credentials-secret\"))\n            .secretString();\n\n        \/\/ JSON\u5f62\u5f0f\u306e\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u5024\u3092\u30d1\u30fc\u30b9\n        JsonObject secret = JsonParser.parseString(secretValue)\n            .getAsJsonObject();\n\n        return StaticCredentialsProvider.create(\n            AwsBasicCredentials.create(\n                secret.get(\"access_key_id\").getAsString(),\n                secret.get(\"secret_access_key\").getAsString()\n            )\n        );\n    }\n\n    \/\/ IAM\u30ed\u30fc\u30eb\u30d9\u30fc\u30b9\u306e\u8a8d\u8a3c\n    public AwsCredentialsProvider createRoleBasedCredentials() {\n        return WebIdentityTokenFileCredentialsProvider.builder()\n            .roleArn(\"arn:aws:iam::ACCOUNT_ID:role\/ROLE_NAME\")\n            .build();\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u8a8d\u8a3c\u60c5\u5831\u306e\u30ed\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\u7ba1\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class CredentialRotationManager {\n    private final ScheduledExecutorService scheduler = \n        Executors.newScheduledThreadPool(1);\n    private volatile AwsCredentialsProvider currentProvider;\n\n    \/\/ \u5b9a\u671f\u7684\u306a\u8a8d\u8a3c\u60c5\u5831\u306e\u66f4\u65b0\n    public void scheduleCredentialRotation(\n            Duration rotationInterval,\n            Supplier&lt;AwsCredentialsProvider&gt; providerSupplier) {\n\n        scheduler.scheduleAtFixedRate(\n            () -&gt; rotateCredentials(providerSupplier),\n            0,\n            rotationInterval.toMinutes(),\n            TimeUnit.MINUTES\n        );\n    }\n\n    private void rotateCredentials(\n            Supplier&lt;AwsCredentialsProvider&gt; providerSupplier) {\n        try {\n            AwsCredentialsProvider newProvider = providerSupplier.get();\n            \/\/ \u65b0\u3057\u3044\u8a8d\u8a3c\u60c5\u5831\u306e\u691c\u8a3c\n            newProvider.resolveCredentials();\n            \/\/ \u691c\u8a3c\u6210\u529f\u5f8c\u306b\u8a8d\u8a3c\u60c5\u5831\u3092\u66f4\u65b0\n            this.currentProvider = newProvider;\n            logger.info(\"\u8a8d\u8a3c\u60c5\u5831\u306e\u66f4\u65b0\u304c\u5b8c\u4e86\u3057\u307e\u3057\u305f\");\n        } catch (Exception e) {\n            logger.error(\"\u8a8d\u8a3c\u60c5\u5831\u306e\u66f4\u65b0\u306b\u5931\u6557\u3057\u307e\u3057\u305f\", e);\n        }\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-50\">\u6697\u53f7\u5316\u3068\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-51\">\u30c7\u30fc\u30bf\u6697\u53f7\u5316\u306e\u5b9f\u88c5<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30b5\u30a4\u30c9\u6697\u53f7\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class EncryptionManager {\n    private final KmsClient kmsClient;\n    private final String keyId;\n\n    public EncryptionManager(Region region, String keyId) {\n        this.kmsClient = KmsClient.builder()\n            .region(region)\n            .build();\n        this.keyId = keyId;\n    }\n\n    \/\/ KMS\u3092\u4f7f\u7528\u3057\u305f\u30c7\u30fc\u30bf\u306e\u6697\u53f7\u5316\n    public byte[] encryptData(byte[] data) {\n        GenerateDataKeyRequest dataKeyRequest = GenerateDataKeyRequest.builder()\n            .keyId(keyId)\n            .keySpec(DataKeySpec.AES_256)\n            .build();\n\n        GenerateDataKeyResponse dataKeyResponse = \n            kmsClient.generateDataKey(dataKeyRequest);\n\n        \/\/ \u30c7\u30fc\u30bf\u30ad\u30fc\u3092\u4f7f\u7528\u3057\u3066\u30c7\u30fc\u30bf\u3092\u6697\u53f7\u5316\n        Cipher cipher = Cipher.getInstance(\"AES\/GCM\/NoPadding\");\n        SecretKey secretKey = new SecretKeySpec(\n            dataKeyResponse.plaintext().asByteArray(), \"AES\");\n        cipher.init(Cipher.ENCRYPT_MODE, secretKey);\n\n        byte[] encryptedData = cipher.doFinal(data);\n        byte[] encryptedKey = dataKeyResponse.ciphertextBlob().asByteArray();\n\n        \/\/ \u6697\u53f7\u5316\u3055\u308c\u305f\u30c7\u30fc\u30bf\u3068\u30ad\u30fc\u3092\u7d50\u5408\n        return ByteBuffer.allocate(4 + encryptedKey.length + encryptedData.length)\n            .putInt(encryptedKey.length)\n            .put(encryptedKey)\n            .put(encryptedData)\n            .array();\n    }\n\n    \/\/ KMS\u3092\u4f7f\u7528\u3057\u305f\u30c7\u30fc\u30bf\u306e\u5fa9\u53f7\u5316\n    public byte[] decryptData(byte[] encryptedPackage) {\n        ByteBuffer buffer = ByteBuffer.wrap(encryptedPackage);\n        int keyLength = buffer.getInt();\n        byte[] encryptedKey = new byte[keyLength];\n        buffer.get(encryptedKey);\n        byte[] encryptedData = new byte[buffer.remaining()];\n        buffer.get(encryptedData);\n\n        \/\/ \u30c7\u30fc\u30bf\u30ad\u30fc\u306e\u5fa9\u53f7\u5316\n        DecryptRequest decryptRequest = DecryptRequest.builder()\n            .ciphertextBlob(SdkBytes.fromByteArray(encryptedKey))\n            .build();\n        DecryptResponse decryptResponse = kmsClient.decrypt(decryptRequest);\n\n        \/\/ \u30c7\u30fc\u30bf\u306e\u5fa9\u53f7\u5316\n        Cipher cipher = Cipher.getInstance(\"AES\/GCM\/NoPadding\");\n        SecretKey secretKey = new SecretKeySpec(\n            decryptResponse.plaintext().asByteArray(), \"AES\");\n        cipher.init(Cipher.DECRYPT_MODE, secretKey);\n\n        return cipher.doFinal(encryptedData);\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u8ee2\u9001\u6642\u306e\u6697\u53f7\u5316\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class TransportEncryptionConfig {\n    \/\/ S3\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306eTLS\u8a2d\u5b9a\n    public S3Client createSecureS3Client() {\n        return S3Client.builder()\n            .region(Region.AP_NORTHEAST_1)\n            .overrideConfiguration(config -&gt; config\n                .putHeader(\"x-amz-server-side-encryption\", \"AES256\"))\n            .build();\n    }\n\n    \/\/ HTTPS\u63a5\u7d9a\u306e\u5f37\u5236\n    public ClientOverrideConfiguration createSecureConfig() {\n        return ClientOverrideConfiguration.builder()\n            .putHeader(\"x-amz-server-side-encryption\", \"aws:kms\")\n            .putHeader(\"x-amz-server-side-encryption-aws-kms-key-id\",\n                \"arn:aws:kms:region:account-id:key\/key-id\")\n            .build();\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-52\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8a2d\u5b9a\u306e\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8<\/strong><\/li>\n<\/ol>\n\n\n<div id=\"id-104ee7f0-d23b-42fc-89a9-d7f3bd3904b3\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u8a2d\u5b9a\u9805\u76ee<\/th><th>\u63a8\u5968\u8a2d\u5b9a<\/th><th>\u8aac\u660e<\/th><\/tr><\/thead><tbody><tr><td>TLS\u7248\u6570<\/td><td>1.2\u4ee5\u4e0a<\/td><td>\u6700\u65b0\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30d7\u30ed\u30c8\u30b3\u30eb\u3092\u4f7f\u7528<\/td><\/tr><tr><td>\u8a8d\u8a3c\u65b9\u5f0f<\/td><td>IAM\u30ed\u30fc\u30eb<\/td><td>\u9759\u7684\u30af\u30ec\u30c7\u30f3\u30b7\u30e3\u30eb\u3092\u907f\u3051\u308b<\/td><\/tr><tr><td>\u6697\u53f7\u5316<\/td><td>KMS + AES-256<\/td><td>\u30c7\u30fc\u30bf\u306e\u6697\u53f7\u5316\u306b\u5f37\u529b\u306a\u6697\u53f7\u5316\u3092\u4f7f\u7528<\/td><\/tr><tr><td>\u30a2\u30af\u30bb\u30b9\u5236\u5fa1<\/td><td>\u6700\u5c0f\u6a29\u9650<\/td><td>\u5fc5\u8981\u6700\u5c0f\u9650\u306e\u6a29\u9650\u306e\u307f\u3092\u4ed8\u4e0e<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u76e3\u67fb\u306e\u5b9f\u88c5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class SecurityAuditor {\n    private final CloudTrailClient cloudTrailClient;\n    private final SNSClient snsClient;\n\n    \/\/ \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30a4\u30d9\u30f3\u30c8\u306e\u76e3\u8996\n    public void monitorSecurityEvents() {\n        LookupEventsRequest request = LookupEventsRequest.builder()\n            .lookupAttributes(\n                LookupAttribute.builder()\n                    .attributeKey(\"EventName\")\n                    .attributeValue(\"ConsoleLogin\")\n                    .build())\n            .build();\n\n        cloudTrailClient.lookupEvents(request)\n            .events()\n            .forEach(this::analyzeSecurityEvent);\n    }\n\n    \/\/ \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30a2\u30e9\u30fc\u30c8\u306e\u9001\u4fe1\n    private void sendSecurityAlert(Event event) {\n        PublishRequest request = PublishRequest.builder()\n            .topicArn(\"arn:aws:sns:region:account-id:security-alerts\")\n            .message(formatSecurityAlert(event))\n            .build();\n\n        snsClient.publish(request);\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-53\">\u904b\u7528\u7ba1\u7406\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u306e\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class OperationsMonitor {\n    private final CloudWatchClient cloudWatchClient;\n\n    \/\/ \u30ab\u30b9\u30bf\u30e0\u30e1\u30c8\u30ea\u30af\u30b9\u306e\u8a18\u9332\n    public void recordMetric(String metricName, double value) {\n        PutMetricDataRequest request = PutMetricDataRequest.builder()\n            .namespace(\"CustomSDKMetrics\")\n            .metricData(MetricDatum.builder()\n                .metricName(metricName)\n                .value(value)\n                .unit(StandardUnit.NONE)\n                .timestamp(Instant.now())\n                .build())\n            .build();\n\n        cloudWatchClient.putMetricData(request);\n    }\n\n    \/\/ \u30a2\u30e9\u30fc\u30e0\u306e\u8a2d\u5b9a\n    public void createMetricAlarm(String metricName, double threshold) {\n        PutMetricAlarmRequest request = PutMetricAlarmRequest.builder()\n            .alarmName(metricName + \"-alarm\")\n            .comparisonOperator(ComparisonOperator.GREATER_THAN_THRESHOLD)\n            .evaluationPeriods(1)\n            .metricName(metricName)\n            .namespace(\"CustomSDKMetrics\")\n            .period(300)\n            .statistic(Statistic.AVERAGE)\n            .threshold(threshold)\n            .actionsEnabled(true)\n            .alarmActions(\"arn:aws:sns:region:account-id:alerts\")\n            .build();\n\n        cloudWatchClient.putMetricAlarm(request);\n    }\n}<\/pre>\n\n\n\n<p>\u4ee5\u4e0a\u304cAWS SDK for Java\u306b\u304a\u3051\u308b\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u3068\u904b\u7528\u7ba1\u7406\u306e\u5b9f\u88c5\u65b9\u6cd5\u3067\u3059\u3002\u3053\u308c\u3089\u306e\u5b9f\u88c5\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u5b89\u5168\u3067\u52b9\u7387\u7684\u306aAWS\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u904b\u7528\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Warning: Undefined array key &#8220;is_admin&#8221; in \/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/ &#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":{"0":"post-2255","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-aws","7":"nothumb"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2255","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2255"}],"version-history":[{"count":1,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2255\/revisions"}],"predecessor-version":[{"id":2256,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2255\/revisions\/2256"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2255"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2255"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2255"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}