{"id":2420,"date":"2025-03-24T08:47:28","date_gmt":"2025-03-23T23:47:28","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=2420"},"modified":"2025-03-24T08:47:51","modified_gmt":"2025-03-23T23:47:51","slug":"%e3%80%90%e4%bf%9d%e5%ad%98%e7%89%88%e3%80%91boto3-client%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%89%ef%bc%9a%e5%88%9d%e5%bf%83%e8%80%85%e3%81%a7%e3%82%82","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=2420","title":{"rendered":"\u3010\u4fdd\u5b58\u7248\u3011boto3 client\u306e\u4f7f\u3044\u65b9\u5b8c\u5168\u30ac\u30a4\u30c9\uff1a\u521d\u5fc3\u8005\u3067\u3082\u308f\u304b\u308b7\u3064\u306e\u5b9f\u8df5\u30c6\u30af\u30cb\u30c3\u30af"},"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\">boto3\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3068\u306f\uff1aAWS\u3092Python\u3067\u64cd\u4f5c\u3059\u308b\u57fa\u672c\u6982\u5ff5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">boto3\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304c\u9078\u3070\u308c\u308b3\u3064\u306e\u7406\u7531<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-2\">boto3\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3068\u30ea\u30bd\u30fc\u30b9\u306e\u9055\u3044\u3092\u7406\u89e3\u3057\u3088\u3046<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-3\">boto3\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\uff1a7\u3064\u306e\u5b9f\u8df5\u30c6\u30af\u30cb\u30c3\u30af<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-4\">\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u4f5c\u6210\u65b9\u6cd5\u3068\u8a8d\u8a3c\u8a2d\u5b9a<\/a>      <\/li>      <li>        <a href=\"#i-5\">S3\u30aa\u30da\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u57fa\u672c\u7684\u306a\u30b3\u30fc\u30c9\u4f8b<\/a>      <\/li>      <li>        <a href=\"#i-6\">EC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u5236\u5fa1\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-7\">CloudWatch\u3067\u306e\u30ed\u30b0\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>      <li>        <a href=\"#i-8\">IAM\u30e6\u30fc\u30b6\u30fc\u7ba1\u7406\u306e\u5b9f\u88c5\u4f8b<\/a>      <\/li>      <li>        <a href=\"#i-9\">Lambda\u95a2\u6570\u306e\u64cd\u4f5c\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-10\">DynamoDB\u306eCRUD\u64cd\u4f5c\u5b9f\u88c5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-11\">boto3\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u5b9f\u8df5\u30ac\u30a4\u30c9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-12\">\u3088\u304f\u3042\u308b\u30a8\u30e9\u30fc\u3068\u305d\u306e\u5bfe\u51e6\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-13\">\u4f8b\u5916\u51e6\u7406\u306e\u5b9f\u88c5\u30d1\u30bf\u30fc\u30f3<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-14\">\u30c7\u30d0\u30c3\u30b0\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-15\">boto3\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3092\u4f7f\u7528\u3057\u305f\u5b9f\u8df5\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-16\">\u5927\u91cf\u306eS3\u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u306e\u81ea\u52d5\u5316<\/a>      <\/li>      <li>        <a href=\"#i-17\">\u8907\u6570\u30ea\u30fc\u30b8\u30e7\u30f3\u3067\u306e\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-18\">\u30d0\u30c3\u30c1\u51e6\u7406\u306e\u5b9f\u88c5\u4f8b<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-19\">boto3\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-20\">\u63a5\u7d9a\u30d7\u30fc\u30eb\u306e\u8a2d\u5b9a\u3068\u7ba1\u7406<\/a>      <\/li>      <li>        <a href=\"#i-21\">\u30ea\u30c8\u30e9\u30a4\u6226\u7565\u306e\u5b9f\u88c5\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-22\">\u975e\u540c\u671f\u51e6\u7406\u306e\u6d3b\u7528\u30c6\u30af\u30cb\u30c3\u30af<\/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\">boto3\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3068\u306f\uff1aAWS\u3092Python\u3067\u64cd\u4f5c\u3059\u308b\u57fa\u672c\u6982\u5ff5<\/h2>\n\n\n\n<p>AWS\u306e\u30b5\u30fc\u30d3\u30b9\u3092Python\u304b\u3089\u64cd\u4f5c\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u4e0d\u53ef\u6b20\u306a\u30c4\u30fc\u30eb\u3001\u305d\u308c\u304cboto3\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3067\u3059\u3002boto3\u306f\u3001AWS\u304c\u516c\u5f0f\u306b\u30b5\u30dd\u30fc\u30c8\u3059\u308bPython\u7528SDK\u3067\u3042\u308a\u3001\u305d\u306e\u4e2d\u6838\u3068\u306a\u308b\u306e\u304c\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3067\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">boto3\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304c\u9078\u3070\u308c\u308b3\u3064\u306e\u7406\u7531<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4e00\u8cab\u6027\u306e\u3042\u308b\u76f4\u611f\u7684\u306aAPI\u8a2d\u8a08<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u3059\u3079\u3066\u306eAWS\u30b5\u30fc\u30d3\u30b9\u3067\u7d71\u4e00\u3055\u308c\u305f\u65b9\u6cd5\u3067\u30a2\u30af\u30bb\u30b9\u53ef\u80fd<\/li>\n\n\n\n<li>AWS CLI\u3068\u540c\u3058\u64cd\u4f5c\u540d\u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u5b66\u7fd2\u66f2\u7dda\u304c\u7de9\u3084\u304b<\/li>\n<\/ul>\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=\"\">   # S3\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u4f5c\u6210\u4f8b\n   import boto3\n\n   # \u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u4f5c\u6210\n   s3_client = boto3.client('s3')\n\n   # \u30d0\u30b1\u30c3\u30c8\u4e00\u89a7\u306e\u53d6\u5f97\uff08AWS CLI\u306e aws s3 ls \u3068\u540c\u7b49\uff09\n   response = s3_client.list_buckets()<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u4f4e\u30ec\u30d9\u30eb\u306a\u5236\u5fa1\u304c\u53ef\u80fd<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>AWS API\u306e\u5168\u6a5f\u80fd\u306b\u76f4\u63a5\u30a2\u30af\u30bb\u30b9\u53ef\u80fd<\/li>\n\n\n\n<li>\u304d\u3081\u7d30\u304b\u306a\u64cd\u4f5c\u3084\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u5236\u5fa1\u304c\u53ef\u80fd<\/li>\n<\/ul>\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=\"\">   # EC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u8a73\u7d30\u306a\u8a2d\u5b9a\u4f8b\n   ec2_client = boto3.client('ec2')\n\n   response = ec2_client.run_instances(\n       ImageId='ami-0123456789',\n       InstanceType='t2.micro',\n       MinCount=1,\n       MaxCount=1,\n       KeyName='my-key-pair',\n       SecurityGroupIds=['sg-0123456789'],\n       SubnetId='subnet-0123456789',\n       TagSpecifications=[\n           {\n               'ResourceType': 'instance',\n               'Tags': [\n                   {\n                       'Key': 'Name',\n                       'Value': 'TestInstance'\n                   }\n               ]\n           }\n       ]\n   )<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u9ad8\u3044\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u52b9\u7387\u6027<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6700\u5c0f\u9650\u306e\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9\u3067 AWS API \u3092\u547c\u3073\u51fa\u3057<\/li>\n\n\n\n<li>\u30d0\u30c3\u30c1\u51e6\u7406\u3084\u4e26\u5217\u51e6\u7406\u306b\u9069\u3057\u305f\u8a2d\u8a08<\/li>\n<\/ul>\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=\"\">   # S3\u306e\u4e00\u62ec\u64cd\u4f5c\u4f8b\n   s3_client = boto3.client('s3')\n\n   # \u8907\u6570\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u4e00\u62ec\u524a\u9664\n   response = s3_client.delete_objects(\n       Bucket='my-bucket',\n       Delete={\n           'Objects': [\n               {'Key': 'file1.txt'},\n               {'Key': 'file2.txt'},\n               {'Key': 'file3.txt'}\n           ]\n       }\n   )<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">boto3\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3068\u30ea\u30bd\u30fc\u30b9\u306e\u9055\u3044\u3092\u7406\u89e3\u3057\u3088\u3046<\/h3>\n\n\n\n<p>boto3\u306b\u306f\u300c\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u300d\u3068\u300c\u30ea\u30bd\u30fc\u30b9\u300d\u3068\u3044\u30462\u3064\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u304c\u5b58\u5728\u3057\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u8868\u3067\u4e3b\u306a\u9055\u3044\u3092\u6bd4\u8f03\u3057\u3066\u307f\u307e\u3057\u3087\u3046\uff1a<\/p>\n\n\n<div id=\"id-bc7a683c-b2c8-4af5-8d12-bc526eddbac8\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u7279\u5fb4<\/th><th>\u30af\u30e9\u30a4\u30a2\u30f3\u30c8<\/th><th>\u30ea\u30bd\u30fc\u30b9<\/th><\/tr><\/thead><tbody><tr><td>\u62bd\u8c61\u5316\u30ec\u30d9\u30eb<\/td><td>\u4f4e\u30ec\u30d9\u30eb\uff08API\u76f4\u63a5\u64cd\u4f5c\uff09<\/td><td>\u9ad8\u30ec\u30d9\u30eb\uff08\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\uff09<\/td><\/tr><tr><td>\u6a5f\u80fd\u30ab\u30d0\u30fc\u7387<\/td><td>100%\uff08\u5168API\u5bfe\u5fdc\uff09<\/td><td>\u4e00\u90e8\u306e\u3088\u304f\u4f7f\u3046\u64cd\u4f5c\u306e\u307f<\/td><\/tr><tr><td>\u4f7f\u7528\u4f8b<\/td><td><code>client.get_object()<\/code><\/td><td><code>bucket.Object('key').get()<\/code><\/td><\/tr><tr><td>\u9069\u7528\u30b7\u30fc\u30f3<\/td><td>\u8a73\u7d30\u306a\u5236\u5fa1\u304c\u5fc5\u8981\u306a\u5834\u5408<\/td><td>\u30b7\u30f3\u30d7\u30eb\u306a\u64cd\u4f5c\u306e\u5834\u5408<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u5b9f\u969b\u306e\u30b3\u30fc\u30c9\u3067\u9055\u3044\u3092\u898b\u3066\u307f\u307e\u3057\u3087\u3046\uff1a<\/p>\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\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\ns3_client = boto3.client('s3')\nresponse = s3_client.get_object(\n    Bucket='my-bucket',\n    Key='my-file.txt'\n)\ncontent = response['Body'].read()\n\n# \u30ea\u30bd\u30fc\u30b9\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\ns3_resource = boto3.resource('s3')\ncontent = s3_resource.Object('my-bucket', 'my-file.txt').get()['Body'].read()<\/pre>\n\n\n\n<p>\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306f\u3001\u3088\u308a\u8a73\u7d30\u306a\u5236\u5fa1\u304c\u5fc5\u8981\u306a\u5834\u5408\u3084\u3001\u65b0\u3057\u3044AWS\u6a5f\u80fd\u3092\u4f7f\u7528\u3059\u308b\u969b\u306b\u7279\u306b\u5a01\u529b\u3092\u767a\u63ee\u3057\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001S3\u30d0\u30b1\u30c3\u30c8\u306e\u8907\u96d1\u306a\u30e9\u30a4\u30d5\u30b5\u30a4\u30af\u30eb\u30eb\u30fc\u30eb\u306e\u8a2d\u5b9a\u3084\u3001EC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u8a73\u7d30\u306a\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u8a2d\u5b9a\u306a\u3069\u306b\u306f\u3001\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u304c\u6700\u9069\u3067\u3059\u3002<\/p>\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\u3092\u4f7f\u7528\u3057\u305f\u9ad8\u5ea6\u306a\u8a2d\u5b9a\u4f8b\ns3_client = boto3.client('s3')\n\n# \u30d0\u30b1\u30c3\u30c8\u30e9\u30a4\u30d5\u30b5\u30a4\u30af\u30eb\u30eb\u30fc\u30eb\u306e\u8a2d\u5b9a\nresponse = s3_client.put_bucket_lifecycle_configuration(\n    Bucket='my-bucket',\n    LifecycleConfiguration={\n        'Rules': [\n            {\n                'ID': 'MoveToGlacier',\n                'Status': 'Enabled',\n                'Transitions': [\n                    {\n                        'Days': 90,\n                        'StorageClass': 'GLACIER'\n                    }\n                ]\n            }\n        ]\n    }\n)<\/pre>\n\n\n\n<p>\u3053\u306e\u3088\u3046\u306b\u3001boto3\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306f\u3001AWS\u30b5\u30fc\u30d3\u30b9\u3092\u5b8c\u5168\u306b\u5236\u5fa1\u3059\u308b\u305f\u3081\u306e\u5f37\u529b\u306a\u30c4\u30fc\u30eb\u3068\u3057\u3066\u6a5f\u80fd\u3057\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u306e\u57fa\u790e\u77e5\u8b58\u3092\u6d3b\u304b\u3057\u305f\u5b9f\u8df5\u7684\u306a\u4f7f\u7528\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-3\">boto3\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\uff1a7\u3064\u306e\u5b9f\u8df5\u30c6\u30af\u30cb\u30c3\u30af<\/h2>\n\n\n\n<p>boto3\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3092\u52b9\u679c\u7684\u306b\u6d3b\u7528\u3059\u308b\u305f\u3081\u306e7\u3064\u306e\u5b9f\u8df5\u7684\u306a\u30c6\u30af\u30cb\u30c3\u30af\u3092\u3001\u5177\u4f53\u7684\u306a\u30b3\u30fc\u30c9\u4f8b\u3068\u5171\u306b\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-4\">\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u4f5c\u6210\u65b9\u6cd5\u3068\u8a8d\u8a3c\u8a2d\u5b9a<\/h3>\n\n\n\n<p>boto3\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u521d\u671f\u5316\u3068\u8a8d\u8a3c\u8a2d\u5b9a\u306f\u3001AWS\u64cd\u4f5c\u306e\u57fa\u790e\u3068\u306a\u308b\u91cd\u8981\u306a\u30b9\u30c6\u30c3\u30d7\u3067\u3059\u3002<\/p>\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=\"\">import boto3\nimport json\nfrom botocore.config import Config\n\n# \u30ab\u30b9\u30bf\u30e0\u8a2d\u5b9a\u3067\u306e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u4f5c\u6210\ncustom_config = Config(\n    region_name='ap-northeast-1',  # \u30ea\u30fc\u30b8\u30e7\u30f3\u6307\u5b9a\n    retries = dict(\n        max_attempts = 3           # \u30ea\u30c8\u30e9\u30a4\u56de\u6570\n    ),\n    connect_timeout = 5,           # \u63a5\u7d9a\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\n    read_timeout = 10             # \u8aad\u307f\u53d6\u308a\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\n)\n\n# \u57fa\u672c\u7684\u306a\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u4f5c\u6210\ns3_client = boto3.client(\n    's3',\n    aws_access_key_id='YOUR_ACCESS_KEY',      # \u30a2\u30af\u30bb\u30b9\u30ad\u30fc\n    aws_secret_access_key='YOUR_SECRET_KEY',  # \u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\n    config=custom_config\n)\n\n# \u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u7528\u3057\u305f\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u4f5c\u6210\ndynamodb_client = boto3.Session(profile_name='prod').client('dynamodb')<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">S3\u30aa\u30da\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u57fa\u672c\u7684\u306a\u30b3\u30fc\u30c9\u4f8b<\/h3>\n\n\n\n<p>S3\u306e\u57fa\u672c\u7684\u306a\u64cd\u4f5c\u304b\u3089\u3001\u3088\u308a\u9ad8\u5ea6\u306a\u4f7f\u7528\u65b9\u6cd5\u307e\u3067\u3092\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\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=\"\">import boto3\nfrom botocore.exceptions import ClientError\n\ns3_client = boto3.client('s3')\n\n# \u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\ndef upload_file(file_name, bucket, object_name=None):\n    \"\"\"\n    S3\u30d0\u30b1\u30c3\u30c8\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\n    \"\"\"\n    if object_name is None:\n        object_name = file_name\n\n    try:\n        response = s3_client.upload_file(file_name, bucket, object_name)\n    except ClientError as e:\n        print(f\"\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {e}\")\n        return False\n    return True\n\n# \u30d7\u30ea\u30b5\u30a4\u30f3\u30c9URL\u306e\u751f\u6210\ndef create_presigned_url(bucket_name, object_name, expiration=3600):\n    \"\"\"\n    \u671f\u9650\u4ed8\u304d\u306e\u7f72\u540d\u4ed8\u304dURL\u3092\u751f\u6210\u3059\u308b\n    \"\"\"\n    try:\n        response = s3_client.generate_presigned_url('get_object',\n            Params={\n                'Bucket': bucket_name,\n                'Key': object_name\n            },\n            ExpiresIn=expiration)\n    except ClientError as e:\n        print(f\"\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {e}\")\n        return None\n    return response<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-6\">EC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u5236\u5fa1\u65b9\u6cd5<\/h3>\n\n\n\n<p>EC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u8d77\u52d5\u3001\u505c\u6b62\u3001\u72b6\u614b\u78ba\u8a8d\u306a\u3069\u306e\u57fa\u672c\u64cd\u4f5c\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\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=\"\">ec2_client = boto3.client('ec2')\n\n# \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u8d77\u52d5\ndef launch_ec2_instance():\n    \"\"\"\n    EC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u8d77\u52d5\u3059\u308b\n    \"\"\"\n    try:\n        response = ec2_client.run_instances(\n            ImageId='ami-0c3fd0f5d33134a76',  # Amazon Linux 2\n            InstanceType='t2.micro',\n            MinCount=1,\n            MaxCount=1,\n            SecurityGroupIds=['sg-xxxxxxxx'],\n            SubnetId='subnet-xxxxxxxx',\n            TagSpecifications=[\n                {\n                    'ResourceType': 'instance',\n                    'Tags': [\n                        {\n                            'Key': 'Name',\n                            'Value': 'TestInstance'\n                        }\n                    ]\n                }\n            ]\n        )\n        return response['Instances'][0]['InstanceId']\n    except ClientError as e:\n        print(f\"\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {e}\")\n        return None\n\n# \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u72b6\u614b\u78ba\u8a8d\ndef get_instance_state(instance_id):\n    \"\"\"\n    EC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u72b6\u614b\u3092\u53d6\u5f97\u3059\u308b\n    \"\"\"\n    try:\n        response = ec2_client.describe_instances(\n            InstanceIds=[instance_id]\n        )\n        return response['Reservations'][0]['Instances'][0]['State']['Name']\n    except ClientError as e:\n        print(f\"\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {e}\")\n        return None<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-7\">CloudWatch\u3067\u306e\u30ed\u30b0\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<p>CloudWatch\u3092\u4f7f\u7528\u3057\u305f\u30ed\u30b0\u306e\u53d6\u5f97\u3068\u5206\u6790\u65b9\u6cd5\u3092\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\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=\"\">cloudwatch_client = boto3.client('cloudwatch')\nlogs_client = boto3.client('logs')\n\n# \u30e1\u30c8\u30ea\u30af\u30b9\u306e\u53d6\u5f97\ndef get_metric_statistics(metric_name, namespace):\n    \"\"\"\n    CloudWatch\u30e1\u30c8\u30ea\u30af\u30b9\u3092\u53d6\u5f97\u3059\u308b\n    \"\"\"\n    try:\n        response = cloudwatch_client.get_metric_statistics(\n            Namespace=namespace,\n            MetricName=metric_name,\n            StartTime=datetime.datetime.utcnow() - datetime.timedelta(hours=1),\n            EndTime=datetime.datetime.utcnow(),\n            Period=300,  # 5\u5206\u9593\u9694\n            Statistics=['Average']\n        )\n        return response['Datapoints']\n    except ClientError as e:\n        print(f\"\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {e}\")\n        return None\n\n# \u30ed\u30b0\u30b9\u30c8\u30ea\u30fc\u30e0\u306e\u4f5c\u6210\ndef create_log_stream(log_group_name, log_stream_name):\n    \"\"\"\n    \u65b0\u3057\u3044\u30ed\u30b0\u30b9\u30c8\u30ea\u30fc\u30e0\u3092\u4f5c\u6210\u3059\u308b\n    \"\"\"\n    try:\n        response = logs_client.create_log_stream(\n            logGroupName=log_group_name,\n            logStreamName=log_stream_name\n        )\n        return True\n    except ClientError as e:\n        print(f\"\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {e}\")\n        return False<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-8\">IAM\u30e6\u30fc\u30b6\u30fc\u7ba1\u7406\u306e\u5b9f\u88c5\u4f8b<\/h3>\n\n\n\n<p>IAM\u30e6\u30fc\u30b6\u30fc\u3068\u30dd\u30ea\u30b7\u30fc\u306e\u7ba1\u7406\u65b9\u6cd5\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\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=\"\">iam_client = boto3.client('iam')\n\n# \u30e6\u30fc\u30b6\u30fc\u306e\u4f5c\u6210\ndef create_iam_user(username):\n    \"\"\"\n    \u65b0\u3057\u3044IAM\u30e6\u30fc\u30b6\u30fc\u3092\u4f5c\u6210\u3059\u308b\n    \"\"\"\n    try:\n        response = iam_client.create_user(UserName=username)\n        return response['User']\n    except ClientError as e:\n        print(f\"\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {e}\")\n        return None\n\n# \u30dd\u30ea\u30b7\u30fc\u306e\u30a2\u30bf\u30c3\u30c1\ndef attach_user_policy(username, policy_arn):\n    \"\"\"\n    \u30e6\u30fc\u30b6\u30fc\u306b\u30dd\u30ea\u30b7\u30fc\u3092\u30a2\u30bf\u30c3\u30c1\u3059\u308b\n    \"\"\"\n    try:\n        response = iam_client.attach_user_policy(\n            UserName=username,\n            PolicyArn=policy_arn\n        )\n        return True\n    except ClientError as e:\n        print(f\"\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {e}\")\n        return False<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-9\">Lambda\u95a2\u6570\u306e\u64cd\u4f5c\u65b9\u6cd5<\/h3>\n\n\n\n<p>Lambda\u95a2\u6570\u306e\u4f5c\u6210\u3001\u66f4\u65b0\u3001\u547c\u3073\u51fa\u3057\u65b9\u6cd5\u3092\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\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=\"\">lambda_client = boto3.client('lambda')\n\n# Lambda\u95a2\u6570\u306e\u4f5c\u6210\ndef create_lambda_function(function_name, handler, role_arn, code_zip):\n    \"\"\"\n    \u65b0\u3057\u3044Lambda\u95a2\u6570\u3092\u4f5c\u6210\u3059\u308b\n    \"\"\"\n    try:\n        with open(code_zip, 'rb') as f:\n            zipped_code = f.read()\n\n        response = lambda_client.create_function(\n            FunctionName=function_name,\n            Runtime='python3.9',\n            Role=role_arn,\n            Handler=handler,\n            Code=dict(ZipFile=zipped_code),\n            Timeout=30\n        )\n        return response['FunctionArn']\n    except ClientError as e:\n        print(f\"\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {e}\")\n        return None\n\n# Lambda\u95a2\u6570\u306e\u547c\u3073\u51fa\u3057\ndef invoke_lambda(function_name, payload):\n    \"\"\"\n    Lambda\u95a2\u6570\u3092\u540c\u671f\u7684\u306b\u547c\u3073\u51fa\u3059\n    \"\"\"\n    try:\n        response = lambda_client.invoke(\n            FunctionName=function_name,\n            InvocationType='RequestResponse',\n            Payload=json.dumps(payload)\n        )\n        return json.loads(response['Payload'].read())\n    except ClientError as e:\n        print(f\"\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {e}\")\n        return None<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-10\">DynamoDB\u306eCRUD\u64cd\u4f5c\u5b9f\u88c5<\/h3>\n\n\n\n<p>DynamoDB\u3067\u306e\u57fa\u672c\u7684\u306aCRUD\u64cd\u4f5c\u306e\u5b9f\u88c5\u65b9\u6cd5\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\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=\"\">dynamodb_client = boto3.client('dynamodb')\n\n# \u30a2\u30a4\u30c6\u30e0\u306e\u4f5c\u6210\ndef create_item(table_name, item):\n    \"\"\"\n    DynamoDB\u30c6\u30fc\u30d6\u30eb\u306b\u65b0\u3057\u3044\u30a2\u30a4\u30c6\u30e0\u3092\u4f5c\u6210\u3059\u308b\n    \"\"\"\n    try:\n        response = dynamodb_client.put_item(\n            TableName=table_name,\n            Item={\n                'id': {'S': item['id']},\n                'name': {'S': item['name']},\n                'data': {'S': json.dumps(item['data'])}\n            }\n        )\n        return True\n    except ClientError as e:\n        print(f\"\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {e}\")\n        return False\n\n# \u30a2\u30a4\u30c6\u30e0\u306e\u53d6\u5f97\ndef get_item(table_name, key):\n    \"\"\"\n    DynamoDB\u30c6\u30fc\u30d6\u30eb\u304b\u3089\u30a2\u30a4\u30c6\u30e0\u3092\u53d6\u5f97\u3059\u308b\n    \"\"\"\n    try:\n        response = dynamodb_client.get_item(\n            TableName=table_name,\n            Key={\n                'id': {'S': key}\n            }\n        )\n        return response.get('Item')\n    except ClientError as e:\n        print(f\"\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {e}\")\n        return None<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u8df5\u30c6\u30af\u30cb\u30c3\u30af\u306f\u3001\u5b9f\u969b\u306e\u958b\u767a\u73fe\u5834\u3067\u983b\u7e41\u306b\u4f7f\u7528\u3055\u308c\u308b\u57fa\u672c\u7684\u306a\u64cd\u4f5c\u3092\u30ab\u30d0\u30fc\u3057\u3066\u3044\u307e\u3059\u3002\u5404\u30b3\u30fc\u30c9\u4f8b\u306f\u3001\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u3092\u542b\u3080\u5b9f\u8df5\u7684\u306a\u5b9f\u88c5\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3088\u308a\u8a73\u7d30\u306a\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-11\">boto3\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u5b9f\u8df5\u30ac\u30a4\u30c9<\/h2>\n\n\n\n<p>boto3\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3092\u4f7f\u7528\u3059\u308b\u969b\u306e\u52b9\u679c\u7684\u306a\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u624b\u6cd5\u306b\u3064\u3044\u3066\u3001\u5b9f\u8df5\u7684\u306a\u30a2\u30d7\u30ed\u30fc\u30c1\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-12\">\u3088\u304f\u3042\u308b\u30a8\u30e9\u30fc\u3068\u305d\u306e\u5bfe\u51e6\u6cd5<\/h3>\n\n\n\n<p>boto3\u3092\u4f7f\u7528\u3059\u308b\u969b\u306b\u3088\u304f\u906d\u9047\u3059\u308b\u30a8\u30e9\u30fc\u3068\u305d\u306e\u5bfe\u51e6\u65b9\u6cd5\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\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=\"\">from botocore.exceptions import ClientError, ParamValidationError, WaiterError\nimport boto3\nimport logging\n\n# \u30ed\u30ae\u30f3\u30b0\u306e\u8a2d\u5b9a\nlogger = logging.getLogger(__name__)\nlogger.setLevel(logging.INFO)\n\ndef handle_common_errors(error):\n    \"\"\"\n    \u4e00\u822c\u7684\u306aAWS\u30a8\u30e9\u30fc\u3092\u51e6\u7406\u3059\u308b\u6c4e\u7528\u30cf\u30f3\u30c9\u30e9\u30fc\n    \"\"\"\n    error_code = error.response['Error']['Code']\n    error_message = error.response['Error']['Message']\n\n    error_handling = {\n        'AccessDenied': '\u6a29\u9650\u304c\u4e0d\u8db3\u3057\u3066\u3044\u307e\u3059\u3002IAM\u30dd\u30ea\u30b7\u30fc\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002',\n        'ResourceNotFoundException': '\u6307\u5b9a\u3055\u308c\u305f\u30ea\u30bd\u30fc\u30b9\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002',\n        'ThrottlingException': 'API\u30ea\u30af\u30a8\u30b9\u30c8\u5236\u9650\u306b\u9054\u3057\u307e\u3057\u305f\u3002\u30d0\u30c3\u30af\u30aa\u30d5\u304c\u5fc5\u8981\u3067\u3059\u3002',\n        'InvalidParameterException': '\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u7121\u52b9\u3067\u3059\u3002\u5165\u529b\u5024\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002',\n        'ServiceUnavailable': '\u30b5\u30fc\u30d3\u30b9\u304c\u4e00\u6642\u7684\u306b\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002\u5f8c\u3067\u30ea\u30c8\u30e9\u30a4\u3057\u3066\u304f\u3060\u3055\u3044\u3002'\n    }\n\n    message = error_handling.get(error_code, '\u4e88\u671f\u305b\u306c\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002')\n    logger.error(f\"{message} - {error_code}: {error_message}\")\n    return message<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-13\">\u4f8b\u5916\u51e6\u7406\u306e\u5b9f\u88c5\u30d1\u30bf\u30fc\u30f3<\/h3>\n\n\n\n<p>\u5b9f\u7528\u7684\u306a\u4f8b\u5916\u51e6\u7406\u30d1\u30bf\u30fc\u30f3\u3092\u3001\u5177\u4f53\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u3068\u5171\u306b\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\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=\"\">import time\nfrom botocore.config import Config\n\nclass AWSOperationRetry:\n    \"\"\"\n    AWS\u64cd\u4f5c\u306e\u30ea\u30c8\u30e9\u30a4\u30ed\u30b8\u30c3\u30af\u3092\u5b9f\u88c5\u3059\u308b\u30af\u30e9\u30b9\n    \"\"\"\n    def __init__(self, max_retries=3, base_delay=1):\n        self.max_retries = max_retries\n        self.base_delay = base_delay\n\n    def execute_with_retry(self, operation_func):\n        \"\"\"\n        \u6307\u5b9a\u3055\u308c\u305f\u64cd\u4f5c\u3092\u5b9f\u884c\u3057\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u30ea\u30c8\u30e9\u30a4\u3059\u308b\n        \"\"\"\n        last_exception = None\n        for attempt in range(self.max_retries):\n            try:\n                return operation_func()\n            except ClientError as e:\n                last_exception = e\n                if e.response['Error']['Code'] in ['ThrottlingException', 'ServiceUnavailable']:\n                    delay = self.base_delay * (2 ** attempt)  # \u6307\u6570\u30d0\u30c3\u30af\u30aa\u30d5\n                    logger.warning(f\"\u30ea\u30c8\u30e9\u30a4 {attempt + 1}\/{self.max_retries}, \"\n                                 f\"{delay}\u79d2\u5f85\u6a5f\u3057\u307e\u3059...\")\n                    time.sleep(delay)\n                else:\n                    raise  # \u305d\u306e\u4ed6\u306e\u30a8\u30e9\u30fc\u306f\u5373\u5ea7\u306b\u518draise\n\n        raise last_exception\n\n# \u4f7f\u7528\u4f8b\ndef s3_operation_with_retry():\n    s3_client = boto3.client('s3')\n    retry_handler = AWSOperationRetry()\n\n    try:\n        result = retry_handler.execute_with_retry(\n            lambda: s3_client.list_buckets()\n        )\n        return result\n    except ClientError as e:\n        handle_common_errors(e)\n        return None<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-14\">\u30c7\u30d0\u30c3\u30b0\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n\n\n\n<p>\u52b9\u679c\u7684\u306a\u30c7\u30d0\u30c3\u30b0\u65b9\u6cd5\u3068\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u624b\u6cd5\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\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=\"\">import json\nfrom datetime import datetime\n\nclass AWSDebugger:\n    \"\"\"\n    AWS\u64cd\u4f5c\u306e\u30c7\u30d0\u30c3\u30b0\u3092\u652f\u63f4\u3059\u308b\u30af\u30e9\u30b9\n    \"\"\"\n    def __init__(self, service_name):\n        self.service_name = service_name\n        self.logger = logging.getLogger(service_name)\n        self.logger.setLevel(logging.DEBUG)\n\n        # \u30d5\u30a1\u30a4\u30eb\u30cf\u30f3\u30c9\u30e9\u30fc\u306e\u8a2d\u5b9a\n        handler = logging.FileHandler(f'{service_name}_debug_{datetime.now():%Y%m%d}.log')\n        formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')\n        handler.setFormatter(formatter)\n        self.logger.addHandler(handler)\n\n    def log_request(self, operation_name, params):\n        \"\"\"\n        \u30ea\u30af\u30a8\u30b9\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u30ed\u30b0\u306b\u8a18\u9332\n        \"\"\"\n        self.logger.debug(f\"Operation: {operation_name}\")\n        self.logger.debug(f\"Parameters: {json.dumps(params, indent=2)}\")\n\n    def log_response(self, response):\n        \"\"\"\n        \u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u30ed\u30b0\u306b\u8a18\u9332\n        \"\"\"\n        self.logger.debug(f\"Response: {json.dumps(response, indent=2)}\")\n\n    def log_error(self, error):\n        \"\"\"\n        \u30a8\u30e9\u30fc\u60c5\u5831\u3092\u8a73\u7d30\u306b\u30ed\u30b0\u306b\u8a18\u9332\n        \"\"\"\n        if isinstance(error, ClientError):\n            error_info = {\n                'error_code': error.response['Error']['Code'],\n                'error_message': error.response['Error']['Message'],\n                'request_id': error.response['ResponseMetadata']['RequestId'],\n                'http_status': error.response['ResponseMetadata']['HTTPStatusCode']\n            }\n            self.logger.error(f\"AWS Error: {json.dumps(error_info, indent=2)}\")\n        else:\n            self.logger.error(f\"Unexpected Error: {str(error)}\", exc_info=True)\n\n# \u30c7\u30d0\u30c3\u30b0\u306e\u5b9f\u8df5\u4f8b\ndef debug_s3_operations():\n    debugger = AWSDebugger('s3')\n    s3_client = boto3.client('s3')\n\n    try:\n        # \u30aa\u30da\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u30ed\u30b0\n        params = {'Bucket': 'my-bucket', 'Key': 'test-file.txt'}\n        debugger.log_request('get_object', params)\n\n        # S3\u64cd\u4f5c\u306e\u5b9f\u884c\n        response = s3_client.get_object(**params)\n        debugger.log_response(response)\n\n        return response\n    except Exception as e:\n        debugger.log_error(e)\n        raise<\/pre>\n\n\n\n<p>\u5b9f\u88c5\u306e\u30dd\u30a4\u30f3\u30c8\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u968e\u5c64\u7684\u306a\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4e00\u822c\u7684\u306a\u30a8\u30e9\u30fc \u2192 \u30b5\u30fc\u30d3\u30b9\u56fa\u6709\u306e\u30a8\u30e9\u30fc \u2192 \u30aa\u30da\u30ec\u30fc\u30b7\u30e7\u30f3\u56fa\u6709\u306e\u30a8\u30e9\u30fc<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u306e\u91cd\u8981\u5ea6\u306b\u5fdc\u3058\u305f\u9069\u5207\u306a\u30ed\u30b0\u30ec\u30d9\u30eb\u306e\u4f7f\u7528<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ea\u30c8\u30e9\u30a4\u6226\u7565<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6307\u6570\u30d0\u30c3\u30af\u30aa\u30d5\u306b\u3088\u308b\u30ea\u30c8\u30e9\u30a4<\/li>\n\n\n\n<li>\u4e00\u6642\u7684\u306a\u30a8\u30e9\u30fc\u3068\u6c38\u7d9a\u7684\u306a\u30a8\u30e9\u30fc\u306e\u533a\u5225<\/li>\n\n\n\n<li>\u30ea\u30c8\u30e9\u30a4\u56de\u6570\u306e\u9069\u5207\u306a\u8a2d\u5b9a<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30d0\u30c3\u30b0\u60c5\u5831\u306e\u53ce\u96c6<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30ea\u30af\u30a8\u30b9\u30c8\/\u30ec\u30b9\u30dd\u30f3\u30b9\u306e\u5b8c\u5168\u306a\u30ed\u30b0\u8a18\u9332<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u306e\u8a73\u7d30\u60c5\u5831\u306e\u4fdd\u5b58<\/li>\n\n\n\n<li>\u30c8\u30ec\u30fc\u30b5\u30d3\u30ea\u30c6\u30a3\u306e\u305f\u3081\u306e RequestId \u306e\u8a18\u9332<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u88c5\u4f8b\u306f\u3001\u672c\u756a\u74b0\u5883\u3067\u306e\u904b\u7528\u3092\u60f3\u5b9a\u3057\u305f\u5b9f\u8df5\u7684\u306a\u3082\u306e\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u624b\u6cd5\u3092\u6d3b\u7528\u3057\u305f\u5b9f\u8df5\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-15\">boto3\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3092\u4f7f\u7528\u3057\u305f\u5b9f\u8df5\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9<\/h2>\n\n\n\n<p>\u5b9f\u52d9\u3067\u906d\u9047\u3059\u308b\u5178\u578b\u7684\u306a\u30b7\u30ca\u30ea\u30aa\u306b\u5bfe\u3059\u308b\u3001\u52b9\u7387\u7684\u3067\u5b9f\u7528\u7684\u306a\u5b9f\u88c5\u4f8b\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-16\">\u5927\u91cf\u306eS3\u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u306e\u81ea\u52d5\u5316<\/h3>\n\n\n\n<p>\u5927\u898f\u6a21\u306aS3\u30d0\u30b1\u30c3\u30c8\u306e\u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u3092\u52b9\u7387\u7684\u306b\u884c\u3046\u5b9f\u88c5\u4f8b\u3067\u3059\u3002<\/p>\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=\"\">import boto3\nfrom concurrent.futures import ThreadPoolExecutor\nimport logging\nfrom typing import List, Dict\nimport time\n\nclass S3BulkProcessor:\n    \"\"\"\n    S3\u306e\u5927\u91cf\u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u3092\u52b9\u7387\u7684\u306b\u884c\u3046\u30af\u30e9\u30b9\n    \"\"\"\n    def __init__(self, bucket_name: str, max_workers: int = 10):\n        self.s3_client = boto3.client('s3')\n        self.bucket_name = bucket_name\n        self.max_workers = max_workers\n        self.logger = logging.getLogger(__name__)\n\n    def list_all_objects(self, prefix: str = '') -&gt; List[Dict]:\n        \"\"\"\n        \u6307\u5b9a\u3055\u308c\u305f\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u306e\u5168\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u53d6\u5f97\n        \"\"\"\n        objects = []\n        paginator = self.s3_client.get_paginator('list_objects_v2')\n\n        try:\n            for page in paginator.paginate(Bucket=self.bucket_name, Prefix=prefix):\n                if 'Contents' in page:\n                    objects.extend(page['Contents'])\n            return objects\n        except Exception as e:\n            self.logger.error(f\"\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u4e00\u89a7\u306e\u53d6\u5f97\u306b\u5931\u6557: {str(e)}\")\n            raise\n\n    def process_object(self, obj: Dict) -&gt; bool:\n        \"\"\"\n        \u500b\u5225\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u51e6\u7406\n        \"\"\"\n        try:\n            # \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u53d6\u5f97\n            response = self.s3_client.get_object(\n                Bucket=self.bucket_name,\n                Key=obj['Key']\n            )\n\n            # \u51e6\u7406\u30ed\u30b8\u30c3\u30af\u3092\u3053\u3053\u306b\u5b9f\u88c5\n            # \u4f8b: \u30d5\u30a1\u30a4\u30eb\u306e\u5909\u63db\u3001\u5206\u6790\u3001\u5225\u30d0\u30b1\u30c3\u30c8\u3078\u306e\u30b3\u30d4\u30fc\u306a\u3069\n\n            return True\n        except Exception as e:\n            self.logger.error(f\"\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u51e6\u7406\u30a8\u30e9\u30fc - {obj['Key']}: {str(e)}\")\n            return False\n\n    def process_bulk(self, prefix: str = '') -&gt; Dict:\n        \"\"\"\n        \u4e26\u884c\u51e6\u7406\u306b\u3088\u308b\u5927\u91cf\u30d5\u30a1\u30a4\u30eb\u306e\u52b9\u7387\u7684\u306a\u51e6\u7406\n        \"\"\"\n        objects = self.list_all_objects(prefix)\n        processed = {'success': 0, 'failed': 0}\n        start_time = time.time()\n\n        with ThreadPoolExecutor(max_workers=self.max_workers) as executor:\n            results = list(executor.map(self.process_object, objects))\n\n        processed['success'] = sum(1 for r in results if r)\n        processed['failed'] = sum(1 for r in results if not r)\n        processed['total_time'] = time.time() - start_time\n\n        return processed\n\n# \u4f7f\u7528\u4f8b\nprocessor = S3BulkProcessor('my-bucket', max_workers=20)\nresults = processor.process_bulk('data\/2024\/')\nprint(f\"\u51e6\u7406\u7d50\u679c: {results}\")<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-17\">\u8907\u6570\u30ea\u30fc\u30b8\u30e7\u30f3\u3067\u306e\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406<\/h3>\n\n\n\n<p>\u8907\u6570\u306eAWS\u30ea\u30fc\u30b8\u30e7\u30f3\u306b\u307e\u305f\u304c\u308b\u30ea\u30bd\u30fc\u30b9\u3092\u4e00\u5143\u7ba1\u7406\u3059\u308b\u5b9f\u88c5\u4f8b\u3067\u3059\u3002<\/p>\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=\"\">from typing import List, Dict\nimport boto3\nfrom concurrent.futures import ThreadPoolExecutor\n\nclass MultiRegionManager:\n    \"\"\"\n    \u8907\u6570\u30ea\u30fc\u30b8\u30e7\u30f3\u306eAWS\u30ea\u30bd\u30fc\u30b9\u3092\u7ba1\u7406\u3059\u308b\u30af\u30e9\u30b9\n    \"\"\"\n    def __init__(self, regions: List[str]):\n        self.regions = regions\n        self.clients = {}\n\n    def get_client(self, service: str, region: str) -&gt; boto3.client:\n        \"\"\"\n        \u6307\u5b9a\u3055\u308c\u305f\u30b5\u30fc\u30d3\u30b9\u3068\u30ea\u30fc\u30b8\u30e7\u30f3\u306e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3092\u53d6\u5f97\n        \"\"\"\n        key = f\"{service}_{region}\"\n        if key not in self.clients:\n            self.clients[key] = boto3.client(service, region_name=region)\n        return self.clients[key]\n\n    def list_resources(self, service: str) -&gt; Dict[str, List]:\n        \"\"\"\n        \u5168\u30ea\u30fc\u30b8\u30e7\u30f3\u306e\u6307\u5b9a\u3055\u308c\u305f\u30b5\u30fc\u30d3\u30b9\u306e\u30ea\u30bd\u30fc\u30b9\u3092\u53d6\u5f97\n        \"\"\"\n        def get_region_resources(region: str) -&gt; Dict:\n            client = self.get_client(service, region)\n            try:\n                if service == 'ec2':\n                    response = client.describe_instances()\n                    return {region: response['Reservations']}\n                elif service == 'rds':\n                    response = client.describe_db_instances()\n                    return {region: response['DBInstances']}\n                # \u4ed6\u306e\u30b5\u30fc\u30d3\u30b9\u3082\u540c\u69d8\u306b\u5b9f\u88c5\n            except Exception as e:\n                return {region: f\"Error: {str(e)}\"}\n\n        with ThreadPoolExecutor(max_workers=len(self.regions)) as executor:\n            results = executor.map(get_region_resources, self.regions)\n\n        return {k: v for result in results for k, v in result.items()}\n\n# \u4f7f\u7528\u4f8b\nregions = ['us-east-1', 'us-west-2', 'ap-northeast-1']\nmanager = MultiRegionManager(regions)\nec2_resources = manager.list_resources('ec2')<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-18\">\u30d0\u30c3\u30c1\u51e6\u7406\u306e\u5b9f\u88c5\u4f8b<\/h3>\n\n\n\n<p>\u5927\u898f\u6a21\u306a\u30c7\u30fc\u30bf\u51e6\u7406\u3092\u30d0\u30c3\u30c1\u3067\u52b9\u7387\u7684\u306b\u884c\u3046\u5b9f\u88c5\u4f8b\u3067\u3059\u3002<\/p>\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=\"\">import boto3\nimport json\nfrom typing import List, Dict\nfrom datetime import datetime, timedelta\n\nclass AWSBatchProcessor:\n    \"\"\"\n    AWS\u74b0\u5883\u3067\u306e\u30d0\u30c3\u30c1\u51e6\u7406\u3092\u7ba1\u7406\u3059\u308b\u30af\u30e9\u30b9\n    \"\"\"\n    def __init__(self):\n        self.sqs_client = boto3.client('sqs')\n        self.lambda_client = boto3.client('lambda')\n        self.dynamodb_client = boto3.client('dynamodb')\n\n    def prepare_batch_job(self, job_data: Dict) -&gt; str:\n        \"\"\"\n        \u30d0\u30c3\u30c1\u30b8\u30e7\u30d6\u306e\u6e96\u5099\u3068\u767b\u9332\n        \"\"\"\n        job_id = f\"batch_{datetime.now().strftime('%Y%m%d_%H%M%S')}\"\n\n        # \u30b8\u30e7\u30d6\u60c5\u5831\u3092DynamoDB\u306b\u4fdd\u5b58\n        self.dynamodb_client.put_item(\n            TableName='BatchJobs',\n            Item={\n                'JobId': {'S': job_id},\n                'Status': {'S': 'PREPARED'},\n                'Data': {'S': json.dumps(job_data)},\n                'CreatedAt': {'S': datetime.now().isoformat()}\n            }\n        )\n\n        return job_id\n\n    def process_batch(self, job_id: str, batch_size: int = 100) -&gt; Dict:\n        \"\"\"\n        \u30d0\u30c3\u30c1\u51e6\u7406\u306e\u5b9f\u884c\n        \"\"\"\n        try:\n            # \u30b8\u30e7\u30d6\u60c5\u5831\u306e\u53d6\u5f97\n            job_info = self.dynamodb_client.get_item(\n                TableName='BatchJobs',\n                Key={'JobId': {'S': job_id}}\n            )\n\n            job_data = json.loads(job_info['Item']['Data']['S'])\n\n            # \u30d0\u30c3\u30c1\u51e6\u7406\u306e\u5b9f\u884c\n            processed_items = 0\n            failed_items = 0\n\n            for chunk in self._chunk_data(job_data['items'], batch_size):\n                try:\n                    # Lambda\u95a2\u6570\u3067\u306e\u51e6\u7406\n                    response = self.lambda_client.invoke(\n                        FunctionName='batch_processor',\n                        InvocationType='RequestResponse',\n                        Payload=json.dumps({\n                            'job_id': job_id,\n                            'items': chunk\n                        })\n                    )\n\n                    result = json.loads(response['Payload'].read())\n                    processed_items += result['processed']\n                    failed_items += result['failed']\n\n                except Exception as e:\n                    failed_items += len(chunk)\n                    continue\n\n            # \u51e6\u7406\u7d50\u679c\u306e\u66f4\u65b0\n            self.dynamodb_client.update_item(\n                TableName='BatchJobs',\n                Key={'JobId': {'S': job_id}},\n                UpdateExpression='SET #status = :status, #results = :results',\n                ExpressionAttributeNames={\n                    '#status': 'Status',\n                    '#results': 'Results'\n                },\n                ExpressionAttributeValues={\n                    ':status': {'S': 'COMPLETED'},\n                    ':results': {'M': {\n                        'processed': {'N': str(processed_items)},\n                        'failed': {'N': str(failed_items)}\n                    }}\n                }\n            )\n\n            return {\n                'job_id': job_id,\n                'processed': processed_items,\n                'failed': failed_items,\n                'status': 'COMPLETED'\n            }\n\n        except Exception as e:\n            # \u30a8\u30e9\u30fc\u6642\u306e\u51e6\u7406\n            self.dynamodb_client.update_item(\n                TableName='BatchJobs',\n                Key={'JobId': {'S': job_id}},\n                UpdateExpression='SET #status = :status, #error = :error',\n                ExpressionAttributeNames={\n                    '#status': 'Status',\n                    '#error': 'Error'\n                },\n                ExpressionAttributeValues={\n                    ':status': {'S': 'FAILED'},\n                    ':error': {'S': str(e)}\n                }\n            )\n            raise\n\n    @staticmethod\n    def _chunk_data(data: List, size: int) -&gt; List[List]:\n        \"\"\"\n        \u30c7\u30fc\u30bf\u3092\u6307\u5b9a\u30b5\u30a4\u30ba\u306e\u30c1\u30e3\u30f3\u30af\u306b\u5206\u5272\n        \"\"\"\n        return [data[i:i + size] for i in range(0, len(data), size)]\n\n# \u4f7f\u7528\u4f8b\nprocessor = AWSBatchProcessor()\njob_id = processor.prepare_batch_job({\n    'items': [{'id': i, 'data': f'item_{i}'} for i in range(1000)]\n})\nresult = processor.process_batch(job_id, batch_size=100)<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u88c5\u4f8b\u306f\u3001\u4ee5\u4e0b\u306e\u91cd\u8981\u306a\u8a2d\u8a08\u539f\u5247\u306b\u57fa\u3065\u3044\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4e26\u884c\u51e6\u7406\u306b\u3088\u308b\u52b9\u7387\u7684\u306a\u30ea\u30bd\u30fc\u30b9\u5229\u7528<\/li>\n\n\n\n<li>\u30d0\u30c3\u30c1\u30b5\u30a4\u30ba\u306e\u6700\u9069\u5316<\/li>\n\n\n\n<li>\u30ea\u30bd\u30fc\u30b9\u5236\u9650\u306e\u8003\u616e<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30a8\u30e9\u30fc\u8010\u6027<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5305\u62ec\u7684\u306a\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0<\/li>\n\n\n\n<li>\u51e6\u7406\u306e\u518d\u958b\u53ef\u80fd\u6027<\/li>\n\n\n\n<li>\u72b6\u614b\u7ba1\u7406\u306e\u78ba\u5b9f\u6027<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u3068\u30c8\u30ec\u30fc\u30b5\u30d3\u30ea\u30c6\u30a3<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u51e6\u7406\u72b6\u614b\u306e\u53ef\u8996\u5316<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u30ed\u30b0\u306e\u8a73\u7d30\u306a\u8a18\u9332<\/li>\n\n\n\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6307\u6a19\u306e\u53ce\u96c6<\/li>\n<\/ul>\n\n\n\n<p>\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u5b9f\u88c5\u3092\u3055\u3089\u306b\u6700\u9069\u5316\u3059\u308b\u305f\u3081\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u624b\u6cd5\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-19\">boto3\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316<\/h2>\n\n\n\n<p>boto3\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u6027\u80fd\u3092\u6700\u5927\u9650\u306b\u5f15\u304d\u51fa\u3059\u305f\u3081\u306e\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-20\">\u63a5\u7d9a\u30d7\u30fc\u30eb\u306e\u8a2d\u5b9a\u3068\u7ba1\u7406<\/h3>\n\n\n\n<p>boto3\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u63a5\u7d9a\u7ba1\u7406\u3092\u6700\u9069\u5316\u3057\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5411\u4e0a\u3055\u305b\u308b\u65b9\u6cd5\u3092\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\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=\"\">import boto3\nfrom botocore.config import Config\nimport aioboto3\nimport asyncio\nfrom contextlib import contextmanager\nimport time\n\nclass ConnectionPoolManager:\n    \"\"\"\n    boto3\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u63a5\u7d9a\u30d7\u30fc\u30eb\u3092\u7ba1\u7406\u3059\u308b\u30af\u30e9\u30b9\n    \"\"\"\n    def __init__(self, service_name: str, max_pool_connections: int = 10):\n        self.config = Config(\n            max_pool_connections=max_pool_connections,\n            connect_timeout=5,\n            read_timeout=10,\n            retries={'max_attempts': 3}\n        )\n        self.service_name = service_name\n        self.client = boto3.client(\n            service_name,\n            config=self.config\n        )\n\n    @contextmanager\n    def get_client(self):\n        \"\"\"\n        \u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u53d6\u5f97\u3068\u89e3\u653e\u3092\u7ba1\u7406\n        \"\"\"\n        try:\n            yield self.client\n        finally:\n            # \u5fc5\u8981\u306b\u5fdc\u3058\u3066\u63a5\u7d9a\u3092\u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7\n            pass\n\n    def execute_with_metrics(self, operation_func):\n        \"\"\"\n        \u64cd\u4f5c\u306e\u5b9f\u884c\u6642\u9593\u3092\u8a08\u6e2c\n        \"\"\"\n        start_time = time.time()\n        try:\n            result = operation_func(self.client)\n            execution_time = time.time() - start_time\n            return result, execution_time\n        except Exception as e:\n            raise\n\n# \u4f7f\u7528\u4f8b\npool_manager = ConnectionPoolManager('s3', max_pool_connections=20)\n\nwith pool_manager.get_client() as client:\n    result, exec_time = pool_manager.execute_with_metrics(\n        lambda c: c.list_buckets()\n    )\n    print(f\"\u5b9f\u884c\u6642\u9593: {exec_time:.2f}\u79d2\")<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-21\">\u30ea\u30c8\u30e9\u30a4\u6226\u7565\u306e\u5b9f\u88c5\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u52b9\u7387\u7684\u306a\u30ea\u30c8\u30e9\u30a4\u51e6\u7406\u306b\u3088\u308b\u4fe1\u983c\u6027\u3068\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u4e21\u7acb\u3092\u5b9f\u73fe\u3057\u307e\u3059\u3002<\/p>\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=\"\">from botocore.exceptions import ClientError\nimport random\nimport logging\n\nclass RetryOptimizer:\n    \"\"\"\n    \u6700\u9069\u5316\u3055\u308c\u305f\u30ea\u30c8\u30e9\u30a4\u6226\u7565\u3092\u5b9f\u88c5\u3059\u308b\u30af\u30e9\u30b9\n    \"\"\"\n    def __init__(self, base_delay: float = 0.1, max_delay: float = 5.0,\n                 max_retries: int = 3, jitter: float = 0.1):\n        self.base_delay = base_delay\n        self.max_delay = max_delay\n        self.max_retries = max_retries\n        self.jitter = jitter\n        self.logger = logging.getLogger(__name__)\n\n    def calculate_delay(self, attempt: int) -&gt; float:\n        \"\"\"\n        \u6307\u6570\u30d0\u30c3\u30af\u30aa\u30d5\u3068\u30b8\u30c3\u30bf\u30fc\u3092\u4f7f\u7528\u3057\u3066\u9045\u5ef6\u6642\u9593\u3092\u8a08\u7b97\n        \"\"\"\n        delay = min(self.max_delay,\n                   self.base_delay * (2 ** attempt))\n        jitter_amount = random.uniform(-self.jitter, self.jitter)\n        return delay + (delay * jitter_amount)\n\n    def execute_with_retry(self, operation_func, *args, **kwargs):\n        \"\"\"\n        \u30ea\u30c8\u30e9\u30a4\u30ed\u30b8\u30c3\u30af\u3092\u9069\u7528\u3057\u3066\u64cd\u4f5c\u3092\u5b9f\u884c\n        \"\"\"\n        last_exception = None\n\n        for attempt in range(self.max_retries + 1):\n            try:\n                return operation_func(*args, **kwargs)\n            except ClientError as e:\n                last_exception = e\n                if attempt == self.max_retries:\n                    break\n\n                error_code = e.response['Error']['Code']\n                if error_code in ['ThrottlingException', 'RequestLimitExceeded']:\n                    delay = self.calculate_delay(attempt)\n                    self.logger.warning(\n                        f\"\u30ea\u30c8\u30e9\u30a4 {attempt + 1}\/{self.max_retries}, \"\n                        f\"\u5f85\u6a5f\u6642\u9593: {delay:.2f}\u79d2\"\n                    )\n                    time.sleep(delay)\n                else:\n                    raise\n\n        raise last_exception\n\n# \u4f7f\u7528\u4f8b\nretry_optimizer = RetryOptimizer()\ns3_client = boto3.client('s3')\n\nresult = retry_optimizer.execute_with_retry(\n    s3_client.get_object,\n    Bucket='my-bucket',\n    Key='my-key'\n)<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-22\">\u975e\u540c\u671f\u51e6\u7406\u306e\u6d3b\u7528\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<p>aioboto3\u3092\u4f7f\u7528\u3057\u305f\u52b9\u7387\u7684\u306a\u975e\u540c\u671f\u51e6\u7406\u306e\u5b9f\u88c5\u65b9\u6cd5\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\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=\"\">import aioboto3\nfrom typing import List, Dict\nimport asyncio\nimport time\n\nclass AsyncOperationManager:\n    \"\"\"\n    \u975e\u540c\u671f\u64cd\u4f5c\u3092\u7ba1\u7406\u3059\u308b\u30af\u30e9\u30b9\n    \"\"\"\n    def __init__(self, service_name: str):\n        self.service_name = service_name\n        self.session = aioboto3.Session()\n\n    async def execute_operations(self, operations: List[Dict]) -&gt; List[Dict]:\n        \"\"\"\n        \u8907\u6570\u306e\u64cd\u4f5c\u3092\u975e\u540c\u671f\u3067\u5b9f\u884c\n        \"\"\"\n        async with self.session.client(self.service_name) as client:\n            tasks = [\n                self._execute_single_operation(client, op)\n                for op in operations\n            ]\n            return await asyncio.gather(*tasks, return_exceptions=True)\n\n    async def _execute_single_operation(self, client, operation: Dict) -&gt; Dict:\n        \"\"\"\n        \u5358\u4e00\u306e\u64cd\u4f5c\u3092\u5b9f\u884c\n        \"\"\"\n        try:\n            start_time = time.time()\n            method = getattr(client, operation['method'])\n            result = await method(**operation['params'])\n            execution_time = time.time() - start_time\n\n            return {\n                'operation_id': operation.get('id'),\n                'status': 'success',\n                'result': result,\n                'execution_time': execution_time\n            }\n        except Exception as e:\n            return {\n                'operation_id': operation.get('id'),\n                'status': 'error',\n                'error': str(e)\n            }\n\n# \u4f7f\u7528\u4f8b\nasync def main():\n    manager = AsyncOperationManager('s3')\n    operations = [\n        {\n            'id': 1,\n            'method': 'list_objects_v2',\n            'params': {'Bucket': 'my-bucket', 'Prefix': 'folder1\/'}\n        },\n        {\n            'id': 2,\n            'method': 'list_objects_v2',\n            'params': {'Bucket': 'my-bucket', 'Prefix': 'folder2\/'}\n        }\n    ]\n\n    results = await manager.execute_operations(operations)\n    return results\n\n# \u975e\u540c\u671f\u51e6\u7406\u306e\u5b9f\u884c\nresults = asyncio.run(main())<\/pre>\n\n\n\n<p>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u63a5\u7d9a\u7ba1\u7406\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9069\u5207\u306a\u30d7\u30fc\u30eb\u30b5\u30a4\u30ba\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u518d\u5229\u7528\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u8a2d\u5b9a\u306e\u8abf\u6574<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u52b9\u7387\u7684\u306a\u30ea\u30c8\u30e9\u30a4\u51e6\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6307\u6570\u30d0\u30c3\u30af\u30aa\u30d5\u306e\u5b9f\u88c5<\/li>\n\n\n\n<li>\u30b8\u30c3\u30bf\u30fc\u306e\u8ffd\u52a0<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u7a2e\u5225\u306b\u5fdc\u3058\u305f\u6226\u7565<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ea\u30bd\u30fc\u30b9\u4f7f\u7528\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u76e3\u8996<\/li>\n\n\n\n<li>\u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u306e\u9069\u5207\u306a\u89e3\u653e<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6d3b\u7528<\/li>\n<\/ul>\n\n\n\n<p>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u306e\u30dd\u30a4\u30f3\u30c8\uff1a<\/p>\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=\"\">import time\nfrom dataclasses import dataclass\nfrom typing import Dict, List\n\n@dataclass\nclass PerformanceMetrics:\n    operation_name: str\n    start_time: float\n    end_time: float\n    success: bool\n    error: str = None\n\n    @property\n    def duration(self) -&gt; float:\n        return self.end_time - self.start_time\n\nclass PerformanceMonitor:\n    \"\"\"\n    boto3\u64cd\u4f5c\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u76e3\u8996\u3059\u308b\u30af\u30e9\u30b9\n    \"\"\"\n    def __init__(self):\n        self.metrics: List[PerformanceMetrics] = []\n\n    def record_operation(self, operation_name: str, func, *args, **kwargs) -&gt; any:\n        \"\"\"\n        \u64cd\u4f5c\u306e\u5b9f\u884c\u6642\u9593\u3092\u8a18\u9332\n        \"\"\"\n        start_time = time.time()\n        try:\n            result = func(*args, **kwargs)\n            self.metrics.append(PerformanceMetrics(\n                operation_name=operation_name,\n                start_time=start_time,\n                end_time=time.time(),\n                success=True\n            ))\n            return result\n        except Exception as e:\n            self.metrics.append(PerformanceMetrics(\n                operation_name=operation_name,\n                start_time=start_time,\n                end_time=time.time(),\n                success=False,\n                error=str(e)\n            ))\n            raise\n\n    def get_statistics(self) -&gt; Dict:\n        \"\"\"\n        \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u7d71\u8a08\u3092\u8a08\u7b97\n        \"\"\"\n        stats = {}\n        for metric in self.metrics:\n            if metric.operation_name not in stats:\n                stats[metric.operation_name] = {\n                    'count': 0,\n                    'success_count': 0,\n                    'total_time': 0,\n                    'avg_time': 0,\n                    'error_count': 0\n                }\n\n            s = stats[metric.operation_name]\n            s['count'] += 1\n            s['total_time'] += metric.duration\n            s['avg_time'] = s['total_time'] \/ s['count']\n\n            if metric.success:\n                s['success_count'] += 1\n            else:\n                s['error_count'] += 1\n\n        return stats\n\n# \u4f7f\u7528\u4f8b\nmonitor = PerformanceMonitor()\ns3_client = boto3.client('s3')\n\ntry:\n    result = monitor.record_operation(\n        'list_buckets',\n        s3_client.list_buckets\n    )\nexcept Exception as e:\n    print(f\"\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {e}\")\n\nstats = monitor.get_statistics()\nprint(f\"\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u7d71\u8a08: {stats}\")<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001boto3\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u6027\u80fd\u3092\u5927\u5e45\u306b\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u7279\u306b\u5927\u898f\u6a21\u306a\u74b0\u5883\u3084\u9ad8\u8ca0\u8377\u306a\u72b6\u6cc1\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u6700\u9069\u5316\u304c\u91cd\u8981\u306a\u610f\u5473\u3092\u6301\u3061\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-2420","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\/2420","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=2420"}],"version-history":[{"count":1,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2420\/revisions"}],"predecessor-version":[{"id":2421,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2420\/revisions\/2421"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2420"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2420"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2420"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}