{"id":2236,"date":"2025-03-24T08:47:55","date_gmt":"2025-03-23T23:47:55","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=2236"},"modified":"2025-03-24T08:48:20","modified_gmt":"2025-03-23T23:48:20","slug":"%e3%80%90%e4%bf%9d%e5%ad%98%e7%89%88%e3%80%91boto3%e5%ae%8c%e5%85%a8%e5%85%a5%e9%96%80%e3%82%ac%e3%82%a4%e3%83%892024-7%e3%81%a4%e3%81%ae%e5%9f%ba%e6%9c%ac%e6%a9%9f%e8%83%bd%e3%81%a8%e5%ae%9f","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=2236","title":{"rendered":"\u3010\u4fdd\u5b58\u7248\u3011boto3\u5b8c\u5168\u5165\u9580\u30ac\u30a4\u30c92024 &#8211; 7\u3064\u306e\u57fa\u672c\u6a5f\u80fd\u3068\u5b9f\u8df5\u7684\u306a\u6d3b\u7528\u4f8b"},"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\u3068\u306f\uff1fAWS \u3092Python\u3067\u64cd\u4f5c\u3059\u308b\u305f\u3081\u306e\u57fa\u790e\u77e5\u8b58<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">boto3\u304c\u89e3\u6c7a\u3059\u308b3\u3064\u306e\u8ab2\u984c<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-2\">boto3\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3068\u521d\u671f\u8a2d\u5b9a\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-8\">boto3\u306e\u57fa\u672c\u6a5f\u80fd\u3068\u5b9f\u8df5\u7684\u306a\u4f7f\u3044\u65b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-9\">\u5171\u901a\u306e\u5b9f\u88c5\u30d1\u30bf\u30fc\u30f3<\/a>      <\/li>      <li>        <a href=\"#i-10\">\u52b9\u7387\u7684\u306a\u5b9f\u88c5\u306e\u305f\u3081\u306e\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>      <li>        <a href=\"#i-11\">\u30ea\u30bd\u30fc\u30b9\u64cd\u4f5c\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>      <li>        <a href=\"#i-12\">S3\u64cd\u4f5c\u306e\u57fa\u672c\uff1a\u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u30fb\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u30fb\u524a\u9664<\/a>      <\/li>      <li>        <a href=\"#i-16\">EC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u5236\u5fa1\uff1a\u8d77\u52d5\u30fb\u505c\u6b62\u30fb\u72b6\u614b\u78ba\u8a8d<\/a>      <\/li>      <li>        <a href=\"#i-19\">IAM\u30e6\u30fc\u30b6\u30fc\u30fb\u30ed\u30fc\u30eb\u306e\u7ba1\u7406\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-22\">CloudWatch\u306b\u3088\u308b\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u306e\u5b9f\u88c5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-25\">boto3\u306b\u3088\u308b\u81ea\u52d5\u5316\u30fb\u52b9\u7387\u5316\u306e\u5b9f\u8df5\u4f8b<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-26\">\u5171\u901a\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u306e\u5b9f\u88c5<\/a>      <\/li>      <li>        <a href=\"#i-27\">\u8a2d\u5b9a\u7ba1\u7406\u306e\u5b9f\u88c5<\/a>      <\/li>      <li>        <a href=\"#i-28\">\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u306e\u5b9f\u88c5<\/a>      <\/li>      <li>        <a href=\"#i-29\">\u5b9a\u671f\u7684\u306a\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306e\u81ea\u52d5\u5316\u30b9\u30af\u30ea\u30d7\u30c8<\/a>      <\/li>      <li>        <a href=\"#i-30\">\u30ea\u30bd\u30fc\u30b9\u306e\u4f7f\u7528\u72b6\u6cc1\u30ec\u30dd\u30fc\u30c8\u81ea\u52d5\u751f\u6210<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-31\">\u30de\u30eb\u30c1\u30ea\u30fc\u30b8\u30e7\u30f3\u3067\u306e\u30ea\u30bd\u30fc\u30b9\u4e00\u62ec\u7ba1\u7406<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-32\">boto3\u306e\u30a8\u30e9\u30fc\u5bfe\u51e6\u3068\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-33\">\u30a8\u30e9\u30fc\u306e\u7a2e\u985e\u3068\u57fa\u672c\u7684\u306a\u5bfe\u51e6\u30d1\u30bf\u30fc\u30f3<\/a>      <\/li>      <li>        <a href=\"#i-34\">\u52b9\u679c\u7684\u306a\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u306e\u5b9f\u88c5<\/a>      <\/li>      <li>        <a href=\"#i-35\">\u3088\u304f\u3042\u308b\u30a8\u30e9\u30fc\u3068\u305d\u306e\u89e3\u6c7a\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-39\">\u30c7\u30d0\u30c3\u30b0\u3068\u30ed\u30b0\u53ce\u96c6\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-43\">boto3\u3092\u4f7f\u7528\u3057\u305fAWS\u904b\u7528\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-44\">\u57fa\u672c\u7684\u306a\u8a2d\u8a08\u539f\u5247<\/a>      <\/li>      <li>        <a href=\"#i-45\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u8003\u616e\u3057\u305f\u5b9f\u88c5\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-48\">\u30b3\u30b9\u30c8\u6700\u9069\u5316\u306e\u305f\u3081\u306e\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-49\">\u5927\u898f\u6a21\u74b0\u5883\u3067\u306e\u52b9\u7387\u7684\u306a\u904b\u7528\u65b9\u6cd5<\/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\u3068\u306f\uff1fAWS \u3092Python\u3067\u64cd\u4f5c\u3059\u308b\u305f\u3081\u306e\u57fa\u790e\u77e5\u8b58<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">boto3\u306f\u3001AWS\u304c\u516c\u5f0f\u306b\u63d0\u4f9b\u3057\u3066\u3044\u308bPython\u7528\u306eSDK\uff08Software Development Kit\uff09\u3067\u3059\u3002\u3053\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001Python\u30d7\u30ed\u30b0\u30e9\u30e0\u304b\u3089AWS\u306e\u5404\u7a2e\u30b5\u30fc\u30d3\u30b9\u3084\u30ea\u30bd\u30fc\u30b9\u3092\u7c21\u5358\u306b\u64cd\u4f5c\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u30022024\u5e741\u6708\u73fe\u5728\u3001\u30d0\u30fc\u30b8\u30e7\u30f31.26.137\u304c\u5b89\u5b9a\u7248\u3068\u3057\u3066\u63d0\u4f9b\u3055\u308c\u3066\u304a\u308a\u3001\u591a\u304f\u306e\u4f01\u696d\u306e\u672c\u756a\u74b0\u5883\u3067\u5229\u7528\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">boto3\u306e\u7279\u5fb4\u7684\u306a\u70b9\u306f\u30012\u3064\u306e\u7570\u306a\u308b\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u63d0\u4f9b\u3057\u3066\u3044\u308b\u3053\u3068\u3067\u3059\uff1a<\/p>\n\n\n<div id=\"id-e26ad619-8d5a-4ddd-8299-900fc3777b86\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9<\/th><th>\u7279\u5fb4<\/th><th>\u4f7f\u7528\u30b7\u30fc\u30f3<\/th><\/tr><\/thead><tbody><tr><td>\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\uff08\u4f4e\u30ec\u30d9\u30eb\uff09<\/td><td>AWS API\u306b\u8fd1\u3044\u8a73\u7d30\u306a\u5236\u5fa1\u304c\u53ef\u80fd<\/td><td>\u7d30\u304b\u3044\u30d1\u30e9\u30e1\u30fc\u30bf\u5236\u5fa1\u304c\u5fc5\u8981\u306a\u5834\u5408<\/td><\/tr><tr><td>\u30ea\u30bd\u30fc\u30b9\uff08\u9ad8\u30ec\u30d9\u30eb\uff09<\/td><td>\u76f4\u611f\u7684\u306a\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9<\/td><td>\u4e00\u822c\u7684\u306a\u30ea\u30bd\u30fc\u30b9\u64cd\u4f5c\u306e\u5834\u5408<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">\u4ee5\u4e0b\u306f\u3001\u4e21\u65b9\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u4f7f\u7528\u3057\u3066S3\u30d0\u30b1\u30c3\u30c8\u306e\u4e00\u89a7\u3092\u53d6\u5f97\u3059\u308b\u4f8b\u3067\u3059\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 boto3\n\n# \u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306e\u4f8b\ns3_client = boto3.client('s3')\nresponse = s3_client.list_buckets()\nfor bucket in response['Buckets']:\n    print(f\"\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u7d4c\u7531: {bucket['Name']}\")\n\n# \u30ea\u30bd\u30fc\u30b9\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306e\u4f8b\ns3_resource = boto3.resource('s3')\nfor bucket in s3_resource.buckets.all():\n    print(f\"\u30ea\u30bd\u30fc\u30b9\u7d4c\u7531: {bucket.name}\")<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">boto3\u306e\u91cd\u8981\u306a\u7279\u5fb4\u3068\u3057\u3066\u3001\u30bb\u30c3\u30b7\u30e7\u30f3\u7ba1\u7406\u6a5f\u80fd\u304c\u3042\u308a\u307e\u3059\u3002\u30bb\u30c3\u30b7\u30e7\u30f3\u3067\u306f\u3001\u4ee5\u4e0b\u306e\u8a2d\u5b9a\u3092\u4e00\u5143\u7ba1\u7406\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>AWS\u8a8d\u8a3c\u60c5\u5831\uff08\u30a2\u30af\u30bb\u30b9\u30ad\u30fc\u3001\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\uff09<\/li>\n\n\n\n<li>\u30ea\u30fc\u30b8\u30e7\u30f3\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8URL<\/li>\n\n\n\n<li>\u30d7\u30ed\u30ad\u30b7\u8a2d\u5b9a<\/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=\"\"># \u30ab\u30b9\u30bf\u30e0\u30bb\u30c3\u30b7\u30e7\u30f3\u306e\u4f5c\u6210\u4f8b\nsession = boto3.Session(\n    region_name='ap-northeast-1',\n    profile_name='development'\n)\n\n# \u30bb\u30c3\u30b7\u30e7\u30f3\u304b\u3089\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\/\u30ea\u30bd\u30fc\u30b9\u3092\u751f\u6210\ns3_client = session.client('s3')\ns3_resource = session.resource('s3')<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u306e\u3088\u3046\u306b\u3001boto3\u306f\u67d4\u8edf\u306a\u8a2d\u8a08\u3068\u8c4a\u5bcc\u306a\u6a5f\u80fd\u3092\u63d0\u4f9b\u3057\u3066\u304a\u308a\u3001\u5c0f\u898f\u6a21\u306a\u30b9\u30af\u30ea\u30d7\u30c8\u304b\u3089\u5927\u898f\u6a21\u306a\u81ea\u52d5\u5316\u30b7\u30b9\u30c6\u30e0\u307e\u3067\u3001\u3055\u307e\u3056\u307e\u306a\u5834\u9762\u3067\u6d3b\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">boto3\u304c\u89e3\u6c7a\u3059\u308b3\u3064\u306e\u8ab2\u984c<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">boto3\u306f\u3001AWS\u74b0\u5883\u306e\u904b\u7528\u7ba1\u7406\u306b\u304a\u3044\u3066\u4ee5\u4e0b\u306e3\u3064\u306e\u91cd\u8981\u306a\u8ab2\u984c\u3092\u52b9\u679c\u7684\u306b\u89e3\u6c7a\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u624b\u52d5\u64cd\u4f5c\u306e\u81ea\u52d5\u5316\u306b\u3088\u308b\u904b\u7528\u52b9\u7387\u306e\u5411\u4e0a<\/strong><br>AWS\u7ba1\u7406\u30b3\u30f3\u30bd\u30fc\u30eb\u3067\u306e\u624b\u52d5\u64cd\u4f5c\u306f\u3001\u6642\u9593\u304c\u304b\u304b\u308a\u3001\u30d2\u30e5\u30fc\u30de\u30f3\u30a8\u30e9\u30fc\u306e\u30ea\u30b9\u30af\u3082\u9ad8\u304f\u306a\u308a\u307e\u3059\u3002boto3\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u5b9a\u578b\u4f5c\u696d\u3092\u81ea\u52d5\u5316\u3067\u304d\u307e\u3059\uff1a<\/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=\"\">import boto3\n\ndef start_development_instances():\n    ec2 = boto3.resource('ec2')\n    # \u958b\u767a\u74b0\u5883\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4e00\u62ec\u8d77\u52d5\n    instances = ec2.instances.filter(\n        Filters=[{'Name': 'tag:Environment', 'Values': ['Development']}]\n    )\n    for instance in instances:\n        instance.start()\n        print(f\"Started instance: {instance.id}\")<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u8907\u96d1\u306aAWS API\u547c\u3073\u51fa\u3057\u306e\u7c21\u7d20\u5316<\/strong><br>AWS\u306eREST API\u3092\u76f4\u63a5\u547c\u3073\u51fa\u3059\u5834\u5408\u3001\u8a8d\u8a3c\u3084\u4f8b\u5916\u51e6\u7406\u306a\u3069\u8907\u96d1\u306a\u5b9f\u88c5\u304c\u5fc5\u8981\u306b\u306a\u308a\u307e\u3059\u3002boto3\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u5f62\u3067\u3001\u3053\u308c\u3089\u3092\u7c21\u6f54\u306b\u8a18\u8ff0\u3067\u304d\u307e\u3059\uff1a<\/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=\"\"># boto3\u306b\u3088\u308b\u7c21\u6f54\u306a\u5b9f\u88c5\ns3 = boto3.client('s3')\ntry:\n    response = s3.get_object(\n        Bucket='my-bucket',\n        Key='my-file.txt'\n    )\n    content = response['Body'].read().decode('utf-8')\nexcept s3.exceptions.NoSuchKey:\n    print(\"\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3057\u307e\u305b\u3093\")<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u5927\u898f\u6a21\u74b0\u5883\u3067\u306e\u4e00\u8cab\u3057\u305f\u7ba1\u7406\u306e\u5b9f\u73fe<\/strong><br>\u8907\u6570\u306eAWS\u30a2\u30ab\u30a6\u30f3\u30c8\u3084\u30ea\u30fc\u30b8\u30e7\u30f3\u306b\u307e\u305f\u304c\u308b\u74b0\u5883\u3067\u306f\u3001\u4e00\u8cab\u3057\u305f\u7ba1\u7406\u304c\u8ab2\u984c\u3068\u306a\u308a\u307e\u3059\u3002boto3\u306e\u30bb\u30c3\u30b7\u30e7\u30f3\u7ba1\u7406\u6a5f\u80fd\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u7d71\u4e00\u7684\u306a\u64cd\u4f5c\u304c\u53ef\u80fd\u3067\u3059\uff1a<\/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=\"\">def check_security_groups_across_regions():\n    regions = ['ap-northeast-1', 'us-east-1', 'eu-west-1']\n    for region in regions:\n        session = boto3.Session(region_name=region)\n        ec2 = session.client('ec2')\n        groups = ec2.describe_security_groups()\n        # \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b0\u30eb\u30fc\u30d7\u306e\u76e3\u67fb\u51e6\u7406<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u308c\u3089\u306e\u6a5f\u80fd\u306b\u3088\u308a\u3001boto3\u306fAWS\u74b0\u5883\u306e\u52b9\u7387\u7684\u306a\u904b\u7528\u7ba1\u7406\u3092\u5b9f\u73fe\u3057\u3001\u958b\u767a\u8005\u306e\u751f\u7523\u6027\u5411\u4e0a\u306b\u5927\u304d\u304f\u8ca2\u732e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">boto3\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3068\u521d\u671f\u8a2d\u5b9a\u65b9\u6cd5<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">boto3\u306e\u74b0\u5883\u69cb\u7bc9\u306f\u3001\u4ee5\u4e0b\u306e\u624b\u9806\u3067\u884c\u3044\u307e\u3059\u3002\u305d\u308c\u305e\u308c\u306e\u624b\u9806\u306b\u3064\u3044\u3066\u3001\u5177\u4f53\u7684\u306a\u5b9f\u65bd\u65b9\u6cd5\u3068\u6ce8\u610f\u70b9\u3092\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-3\">1. Python\u74b0\u5883\u306e\u6e96\u5099<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">boto3\u306f Python 3.7\u4ee5\u4e0a\u304c\u5fc5\u8981\u3067\u3059\u3002\u307e\u305a\u3001Python\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u78ba\u8a8d\u3057\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=\"\">python --version\n# Python 3.x.x \u304c\u8868\u793a\u3055\u308c\u308b\u3053\u3068\u3092\u78ba\u8a8d<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-4\">2. boto3\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">pip\u3092\u4f7f\u7528\u3057\u3066boto3\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\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=\"\">pip install boto3\n# \u7279\u5b9a\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u6307\u5b9a\u3059\u308b\u5834\u5408\npip install boto3==1.26.137<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-5\">3. AWS\u8a8d\u8a3c\u60c5\u5831\u306e\u8a2d\u5b9a<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">boto3\u304cAWS\u30b5\u30fc\u30d3\u30b9\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u306a\u8a8d\u8a3c\u60c5\u5831\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u4e3b\u306a\u8a2d\u5b9a\u65b9\u6cd5\u306f3\u3064\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8a8d\u8a3c\u60c5\u5831\u30d5\u30a1\u30a4\u30eb\u306e\u4f7f\u7528\uff08\u63a8\u5968\uff09<\/strong><br><code>~\/.aws\/credentials<\/code> \u30d5\u30a1\u30a4\u30eb\u306b\u8a8d\u8a3c\u60c5\u5831\u3092\u4fdd\u5b58\uff1a<\/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=\"\">   [default]\n   aws_access_key_id = YOUR_ACCESS_KEY\n   aws_secret_access_key = YOUR_SECRET_KEY<\/pre>\n\n\n[development]\n\n\n\n<p class=\"wp-block-paragraph\">aws_access_key_id = DEV_ACCESS_KEY aws_secret_access_key = DEV_SECRET_KEY<\/p>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u74b0\u5883\u5909\u6570\u306e\u4f7f\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=\"\">   export AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY\n   export AWS_SECRET_ACCESS_KEY=YOUR_SECRET_KEY\n   export AWS_DEFAULT_REGION=ap-northeast-1<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>IAM\u30ed\u30fc\u30eb\u306e\u4f7f\u7528\uff08EC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u4e0a\u3067\u306e\u5b9f\u884c\u6642\uff09<\/strong><br>\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u304c\u81ea\u52d5\u7684\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-6\">4. \u52d5\u4f5c\u78ba\u8a8d<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">\u4ee5\u4e0b\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u3067\u8a2d\u5b9a\u304c\u6b63\u3057\u304f\u884c\u308f\u308c\u305f\u304b\u78ba\u8a8d\u3067\u304d\u307e\u3059\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 boto3\nimport botocore\n\ntry:\n    # S3\u30d0\u30b1\u30c3\u30c8\u4e00\u89a7\u306e\u53d6\u5f97\u3092\u8a66\u307f\u308b\n    s3 = boto3.client('s3')\n    response = s3.list_buckets()\n    print(\"\u8a2d\u5b9a\u6210\u529f\uff01\u30d0\u30b1\u30c3\u30c8\u4e00\u89a7:\", \n          [bucket['Name'] for bucket in response['Buckets']])\nexcept botocore.exceptions.NoCredentialsError:\n    print(\"\u8a8d\u8a3c\u60c5\u5831\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\")\nexcept botocore.exceptions.ClientError as e:\n    print(\"API\u30a8\u30e9\u30fc:\", e)<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-7\">\u8a2d\u5b9a\u306e\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">\u3088\u304f\u3042\u308b\u8a2d\u5b9a\u30df\u30b9\u3068\u305d\u306e\u89e3\u6c7a\u65b9\u6cd5\uff1a<\/p>\n\n\n<div id=\"id-87e2f1e1-b3e2-48dc-a039-ef0d5d458d49\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u554f\u984c<\/th><th>\u539f\u56e0<\/th><th>\u89e3\u6c7a\u65b9\u6cd5<\/th><\/tr><\/thead><tbody><tr><td>NoCredentialsError<\/td><td>\u8a8d\u8a3c\u60c5\u5831\u304c\u898b\u3064\u304b\u3089\u306a\u3044<\/td><td>credentials \u30d5\u30a1\u30a4\u30eb\u306e\u5834\u6240\u3068\u5185\u5bb9\u3092\u78ba\u8a8d<\/td><\/tr><tr><td>InvalidClientTokenId<\/td><td>\u30a2\u30af\u30bb\u30b9\u30ad\u30fc\u304c\u7121\u52b9<\/td><td>IAM\u3067\u30ad\u30fc\u306e\u6709\u52b9\u6027\u3092\u78ba\u8a8d<\/td><\/tr><tr><td>AccessDenied<\/td><td>\u6a29\u9650\u4e0d\u8db3<\/td><td>IAM\u30dd\u30ea\u30b7\u30fc\u306e\u898b\u76f4\u3057<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">\u3053\u308c\u3089\u306e\u8a2d\u5b9a\u304c\u5b8c\u4e86\u3059\u308c\u3070\u3001boto3\u3092\u4f7f\u7528\u3057\u3066AWS\u30ea\u30bd\u30fc\u30b9\u306e\u64cd\u4f5c\u3092\u958b\u59cb\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-8\">boto3\u306e\u57fa\u672c\u6a5f\u80fd\u3068\u5b9f\u8df5\u7684\u306a\u4f7f\u3044\u65b9<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">boto3\u3092\u4f7f\u7528\u3057\u3066AWS\u30ea\u30bd\u30fc\u30b9\u3092\u64cd\u4f5c\u3059\u308b\u969b\u306e\u57fa\u672c\u7684\u306a\u30d1\u30bf\u30fc\u30f3\u3068\u3001\u5b9f\u8df5\u7684\u306a\u4f7f\u7528\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002\u3053\u3053\u3067\u306f\u3001\u4e3b\u8981\u306aAWS\u30b5\u30fc\u30d3\u30b9\u306e\u64cd\u4f5c\u65b9\u6cd5\u3068\u3001\u52b9\u7387\u7684\u306a\u5b9f\u88c5\u306e\u305f\u3081\u306e\u30c6\u30af\u30cb\u30c3\u30af\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-9\">\u5171\u901a\u306e\u5b9f\u88c5\u30d1\u30bf\u30fc\u30f3<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">boto3\u3092\u4f7f\u7528\u3059\u308b\u969b\u306e\u91cd\u8981\u306a\u5b9f\u88c5\u30d1\u30bf\u30fc\u30f3\u3092\u307e\u305a\u7406\u89e3\u3057\u307e\u3057\u3087\u3046\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u51e6\u7406<\/strong><br>\u5927\u91cf\u306e\u30ea\u30bd\u30fc\u30b9\u3092\u53d6\u5f97\u3059\u308b\u969b\u306b\u5fc5\u8981\u3067\u3059\uff1a<\/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=\"\">import boto3\n\ns3 = boto3.client('s3')\npaginator = s3.get_paginator('list_objects_v2')\nfor page in paginator.paginate(Bucket='my-bucket'):\n    for obj in page.get('Contents', []):\n        print(f\"\u51e6\u7406\u4e2d\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8: {obj['Key']}\")<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30a6\u30a7\u30a4\u30bf\u30fc\u6a5f\u80fd<\/strong><br>\u30ea\u30bd\u30fc\u30b9\u306e\u72b6\u614b\u5909\u66f4\u3092\u5f85\u6a5f\u3059\u308b\u969b\u306b\u4f7f\u7528\u3057\u307e\u3059\uff1a<\/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=\"\">ec2 = boto3.client('ec2')\nwaiter = ec2.get_waiter('instance_running')\nwaiter.wait(\n    InstanceIds=['i-1234567890abcdef0'],\n    WaiterConfig={'Delay': 5, 'MaxAttempts': 60}\n)<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u4f8b\u5916\u51e6\u7406<\/strong><br>AWS\u56fa\u6709\u306e\u4f8b\u5916\u3092\u9069\u5207\u306b\u51e6\u7406\u3057\u307e\u3059\uff1a<\/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=\"\">from botocore.exceptions import ClientError\n\ntry:\n    response = s3.get_object(Bucket='my-bucket', Key='my-key')\nexcept ClientError as e:\n    if e.response['Error']['Code'] == 'NoSuchKey':\n        print(\"\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304c\u5b58\u5728\u3057\u307e\u305b\u3093\")\n    elif e.response['Error']['Code'] == 'NoSuchBucket':\n        print(\"\u30d0\u30b1\u30c3\u30c8\u304c\u5b58\u5728\u3057\u307e\u305b\u3093\")\n    else:\n        raise<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-10\">\u52b9\u7387\u7684\u306a\u5b9f\u88c5\u306e\u305f\u3081\u306e\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30bb\u30c3\u30b7\u30e7\u30f3\u306e\u518d\u5229\u7528<\/strong><br>\u540c\u3058\u8a8d\u8a3c\u60c5\u5831\u3067\u8907\u6570\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u64cd\u4f5c\u3059\u308b\u5834\u5408\uff1a<\/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=\"\">session = boto3.Session(region_name='ap-northeast-1')\ns3 = session.client('s3')\nec2 = session.client('ec2')<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30ea\u30bd\u30fc\u30b9\u5236\u9650\u306e\u8003\u616e<\/strong><br>API\u5236\u9650\u306b\u914d\u616e\u3057\u305f\u5b9f\u88c5\uff1a<\/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=\"\">import time\nfrom botocore.exceptions import ClientError\n\ndef retry_with_backoff(func, max_retries=3):\n    for attempt in range(max_retries):\n        try:\n            return func()\n        except ClientError as e:\n            if e.response['Error']['Code'] == 'ThrottlingException':\n                if attempt == max_retries - 1:\n                    raise\n                time.sleep(2 ** attempt)\n            else:\n                raise<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u975e\u540c\u671f\u51e6\u7406<\/strong><br>\u5927\u91cf\u306e\u30ea\u30bd\u30fc\u30b9\u64cd\u4f5c\u3092\u52b9\u7387\u7684\u306b\u884c\u3046\u5834\u5408\uff1a<\/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=\"\">import asyncio\nimport aioboto3\n\nasync def process_s3_objects():\n    session = aioboto3.Session()\n    async with session.client('s3') as s3:\n        paginator = s3.get_paginator('list_objects_v2')\n        async for page in paginator.paginate(Bucket='my-bucket'):\n            for obj in page.get('Contents', []):\n                await process_object(obj)<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-11\">\u30ea\u30bd\u30fc\u30b9\u64cd\u4f5c\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30bf\u30b0\u30d9\u30fc\u30b9\u306e\u7ba1\u7406<\/strong><br>\u30ea\u30bd\u30fc\u30b9\u306e\u52b9\u7387\u7684\u306a\u7ba1\u7406\u306e\u305f\u3081\u306e\u30bf\u30b0\u4ed8\u3051\uff1a<\/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=\"\">ec2 = boto3.client('ec2')\nresponse = ec2.create_tags(\n    Resources=['i-1234567890abcdef0'],\n    Tags=[\n        {'Key': 'Environment', 'Value': 'Production'},\n        {'Key': 'Project', 'Value': 'ServiceA'}\n    ]\n)<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30d0\u30c3\u30c1\u51e6\u7406\u306e\u6d3b\u7528<\/strong><br>\u8907\u6570\u30ea\u30bd\u30fc\u30b9\u306e\u4e00\u62ec\u64cd\u4f5c\uff1a<\/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\u306eEC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4e00\u62ec\u3067\u505c\u6b62\nec2 = boto3.client('ec2')\ninstance_ids = ['i-1234567890abcdef0', 'i-0987654321fedcba0']\nec2.stop_instances(InstanceIds=instance_ids)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u308c\u3089\u306e\u57fa\u672c\u30d1\u30bf\u30fc\u30f3\u3068\u5b9f\u88c5\u30c6\u30af\u30cb\u30c3\u30af\u3092\u7406\u89e3\u3059\u308b\u3053\u3068\u3067\u3001\u52b9\u7387\u7684\u306aAWS\u81ea\u52d5\u5316\u30b7\u30b9\u30c6\u30e0\u3092\u69cb\u7bc9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30b5\u30d6\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u5404AWS\u30b5\u30fc\u30d3\u30b9\u306e\u5177\u4f53\u7684\u306a\u64cd\u4f5c\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-12\">S3\u64cd\u4f5c\u306e\u57fa\u672c\uff1a\u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u30fb\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u30fb\u524a\u9664<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">S3\uff08Simple Storage Service\uff09\u306f\u3001AWS\u306e\u4ee3\u8868\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u30b5\u30fc\u30d3\u30b9\u3067\u3059\u3002boto3\u3092\u4f7f\u7528\u3057\u305fS3\u306e\u57fa\u672c\u64cd\u4f5c\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-13\">\u30d0\u30b1\u30c3\u30c8\u306e\u57fa\u672c\u64cd\u4f5c<\/h4>\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\n\ns3 = boto3.client('s3')\n\n# \u30d0\u30b1\u30c3\u30c8\u306e\u4f5c\u6210\ns3.create_bucket(\n    Bucket='my-new-bucket',\n    CreateBucketConfiguration={'LocationConstraint': 'ap-northeast-1'}\n)\n\n# \u30d0\u30b1\u30c3\u30c8\u4e00\u89a7\u306e\u53d6\u5f97\nresponse = s3.list_buckets()\nbuckets = [bucket['Name'] for bucket in response['Buckets']]<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-14\">\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u306e\u57fa\u672c\u30d1\u30bf\u30fc\u30f3<\/h4>\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=\"\"># \u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\nwith open('local_file.txt', 'rb') as file:\n    s3.upload_fileobj(\n        file,\n        'my-bucket',\n        'remote_file.txt',\n        ExtraArgs={'ContentType': 'text\/plain'}\n    )\n\n# \u30d5\u30a1\u30a4\u30eb\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\nwith open('downloaded_file.txt', 'wb') as file:\n    s3.download_fileobj(\n        'my-bucket',\n        'remote_file.txt',\n        file\n    )\n\n# \u30d5\u30a1\u30a4\u30eb\u306e\u524a\u9664\ns3.delete_object(\n    Bucket='my-bucket',\n    Key='remote_file.txt'\n)<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-15\">\u5b9f\u8df5\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\uff1a\u30d0\u30b1\u30c3\u30c8\u5185\u306e\u7279\u5b9a\u30d1\u30bf\u30fc\u30f3\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u51e6\u7406<\/h4>\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=\"\"># \u7279\u5b9a\u306e\u62e1\u5f35\u5b50\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u4e00\u62ec\u51e6\u7406\ndef process_csv_files(bucket_name, prefix='data\/'):\n    paginator = s3.get_paginator('list_objects_v2')\n\n    for page in paginator.paginate(Bucket=bucket_name, Prefix=prefix):\n        for obj in page.get('Contents', []):\n            if obj['Key'].endswith('.csv'):\n                print(f\"Processing: {obj['Key']}\")\n                # \u3053\u3053\u3067\u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u30ed\u30b8\u30c3\u30af\u3092\u5b9f\u88c5<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u308c\u3089\u306e\u57fa\u672c\u64cd\u4f5c\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001S3\u3092\u4f7f\u7528\u3057\u305f\u52b9\u7387\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u7ba1\u7406\u304c\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-16\">EC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u5236\u5fa1\uff1a\u8d77\u52d5\u30fb\u505c\u6b62\u30fb\u72b6\u614b\u78ba\u8a8d<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">EC2\uff08Elastic Compute Cloud\uff09\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u57fa\u672c\u7684\u306a\u5236\u5fa1\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-17\">\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u57fa\u672c\u64cd\u4f5c<\/h4>\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\n\nec2 = boto3.client('ec2')\n\n# \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u8d77\u52d5\ndef start_instances(instance_ids):\n    response = ec2.start_instances(InstanceIds=instance_ids)\n    return response['StartingInstances']\n\n# \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u505c\u6b62\ndef stop_instances(instance_ids):\n    response = ec2.stop_instances(InstanceIds=instance_ids)\n    return response['StoppingInstances']\n\n# \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u72b6\u614b\u78ba\u8a8d\ndef get_instance_status(instance_id):\n    response = ec2.describe_instances(InstanceIds=[instance_id])\n    instance = response['Reservations'][0]['Instances'][0]\n    return instance['State']['Name']<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-18\">\u30bf\u30b0\u30d9\u30fc\u30b9\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u7ba1\u7406<\/h4>\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=\"\"># \u7279\u5b9a\u306e\u74b0\u5883\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4e00\u62ec\u5236\u5fa1\ndef manage_environment_instances(environment, action='start'):\n    # \u74b0\u5883\u30bf\u30b0\u3067\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u691c\u7d22\n    instances = ec2.describe_instances(\n        Filters=[\n            {\n                'Name': 'tag:Environment',\n                'Values': [environment]\n            }\n        ]\n    )\n\n    instance_ids = []\n    for reservation in instances['Reservations']:\n        for instance in reservation['Instances']:\n            instance_ids.append(instance['InstanceId'])\n\n    if action == 'start':\n        return start_instances(instance_ids)\n    elif action == 'stop':\n        return stop_instances(instance_ids)\n\n# \u4f7f\u7528\u4f8b\nmanage_environment_instances('Development', 'stop')<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u306e\u3088\u3046\u306b\u3001boto3\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001EC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u52b9\u7387\u7684\u306a\u7ba1\u7406\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-19\">IAM\u30e6\u30fc\u30b6\u30fc\u30fb\u30ed\u30fc\u30eb\u306e\u7ba1\u7406\u65b9\u6cd5<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">IAM\uff08Identity and Access Management\uff09\u306e\u7ba1\u7406\u306f\u3001AWS\u30ea\u30bd\u30fc\u30b9\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306e\u8981\u3068\u306a\u308a\u307e\u3059\u3002boto3\u3092\u4f7f\u7528\u3057\u305fIAM\u7ba1\u7406\u306e\u57fa\u672c\u64cd\u4f5c\u3092\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-20\">\u30e6\u30fc\u30b6\u30fc\u7ba1\u7406\u306e\u57fa\u672c\u64cd\u4f5c<\/h4>\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\n\niam = boto3.client('iam')\n\n# \u30e6\u30fc\u30b6\u30fc\u306e\u4f5c\u6210\ndef create_user(username):\n    try:\n        response = iam.create_user(UserName=username)\n        print(f\"\u30e6\u30fc\u30b6\u30fc {username} \u3092\u4f5c\u6210\u3057\u307e\u3057\u305f\")\n        return response['User']\n    except iam.exceptions.EntityAlreadyExistsException:\n        print(f\"\u30e6\u30fc\u30b6\u30fc {username} \u306f\u65e2\u306b\u5b58\u5728\u3057\u307e\u3059\")\n\n# \u30a2\u30af\u30bb\u30b9\u30ad\u30fc\u306e\u4f5c\u6210\ndef create_access_key(username):\n    response = iam.create_access_key(UserName=username)\n    return response['AccessKey']<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-21\">\u30ed\u30fc\u30eb\u3068\u30dd\u30ea\u30b7\u30fc\u306e\u7ba1\u7406<\/h4>\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=\"\"># \u30ed\u30fc\u30eb\u306e\u4f5c\u6210\uff08EC2\u7528\u306e\u4f8b\uff09\ntrust_policy = {\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [{\n        \"Effect\": \"Allow\",\n        \"Principal\": {\"Service\": \"ec2.amazonaws.com\"},\n        \"Action\": \"sts:AssumeRole\"\n    }]\n}\n\ndef create_role_with_policy(role_name, policy_arn):\n    # \u30ed\u30fc\u30eb\u306e\u4f5c\u6210\n    response = iam.create_role(\n        RoleName=role_name,\n        AssumeRolePolicyDocument=json.dumps(trust_policy)\n    )\n\n    # \u30dd\u30ea\u30b7\u30fc\u306e\u30a2\u30bf\u30c3\u30c1\n    iam.attach_role_policy(\n        RoleName=role_name,\n        PolicyArn=policy_arn\n    )\n\n    return response['Role']<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u308c\u3089\u306e\u64cd\u4f5c\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u30bb\u30ad\u30e5\u30a2\u306aIAM\u7ba1\u7406\u304c\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-22\">CloudWatch\u306b\u3088\u308b\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u306e\u5b9f\u88c5<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">CloudWatch\u3092\u4f7f\u7528\u3057\u305f\u30ea\u30bd\u30fc\u30b9\u306e\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u3068\u3001\u30a2\u30e9\u30fc\u30c8\u306e\u8a2d\u5b9a\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-23\">\u30e1\u30c8\u30ea\u30af\u30b9\u306e\u53d6\u5f97\u3068\u76e3\u8996<\/h4>\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 datetime import datetime, timedelta\n\ncloudwatch = boto3.client('cloudwatch')\n\n# EC2\u306eCPU\u4f7f\u7528\u7387\u3092\u53d6\u5f97\ndef get_cpu_utilization(instance_id, period=300):\n    response = cloudwatch.get_metric_statistics(\n        Namespace='AWS\/EC2',\n        MetricName='CPUUtilization',\n        Dimensions=[{'Name': 'InstanceId', 'Value': instance_id}],\n        StartTime=datetime.utcnow() - timedelta(hours=1),\n        EndTime=datetime.utcnow(),\n        Period=period,\n        Statistics=['Average']\n    )\n    return response['Datapoints']<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-24\">\u30ab\u30b9\u30bf\u30e0\u30e1\u30c8\u30ea\u30af\u30b9\u3068\u30a2\u30e9\u30fc\u30e0\u306e\u8a2d\u5b9a<\/h4>\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=\"\"># \u30ab\u30b9\u30bf\u30e0\u30e1\u30c8\u30ea\u30af\u30b9\u306e\u767b\u9332\ndef put_custom_metric(metric_name, value, unit='Count'):\n    cloudwatch.put_metric_data(\n        Namespace='MyApplication',\n        MetricData=[{\n            'MetricName': metric_name,\n            'Value': value,\n            'Unit': unit,\n            'Timestamp': datetime.utcnow()\n        }]\n    )\n\n# CPU\u30a2\u30e9\u30fc\u30e0\u306e\u4f5c\u6210\ndef create_cpu_alarm(instance_id, threshold=80):\n    cloudwatch.put_metric_alarm(\n        AlarmName=f'HighCPU-{instance_id}',\n        ComparisonOperator='GreaterThanThreshold',\n        EvaluationPeriods=2,\n        MetricName='CPUUtilization',\n        Namespace='AWS\/EC2',\n        Period=300,\n        Threshold=threshold,\n        Dimensions=[{'Name': 'InstanceId', 'Value': instance_id}],\n        Statistic='Average',\n        AlarmActions=['SNS\u30c8\u30d4\u30c3\u30af\u306eARN']\n    )<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u308c\u3089\u306e\u6a5f\u80fd\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u52b9\u679c\u7684\u306a\u30ea\u30bd\u30fc\u30b9\u76e3\u8996\u304c\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-25\">boto3\u306b\u3088\u308b\u81ea\u52d5\u5316\u30fb\u52b9\u7387\u5316\u306e\u5b9f\u8df5\u4f8b<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">boto3\u3092\u4f7f\u7528\u3057\u305fAWS\u904b\u7528\u306e\u81ea\u52d5\u5316\u4f8b\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u5b9f\u88c5\u4f8b\u306f\u3001\u5b9f\u969b\u306e\u904b\u7528\u73fe\u5834\u3067\u6d3b\u7528\u3067\u304d\u308b\u5b9f\u8df5\u7684\u306a\u3082\u306e\u3067\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-26\">\u5171\u901a\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u306e\u5b9f\u88c5<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u307e\u305a\u3001\u81ea\u52d5\u5316\u30b9\u30af\u30ea\u30d7\u30c8\u3067\u5171\u901a\u3057\u3066\u4f7f\u7528\u3059\u308b\u4fbf\u5229\u306a\u6a5f\u80fd\u3092\u5b9f\u88c5\u3057\u307e\u3059\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 boto3\nimport logging\nfrom datetime import datetime, timezone\nfrom typing import List, Dict, Any\n\n# \u30ed\u30b0\u8a2d\u5b9a\nlogging.basicConfig(level=logging.INFO)\nlogger = logging.getLogger(__name__)\n\nclass AWSUtility:\n    def __init__(self):\n        self.session = boto3.Session()\n\n    def get_all_regions(self) -&gt; List[str]:\n        \"\"\"\u5229\u7528\u53ef\u80fd\u306a\u3059\u3079\u3066\u306e\u30ea\u30fc\u30b8\u30e7\u30f3\u3092\u53d6\u5f97\"\"\"\n        ec2 = self.session.client('ec2')\n        regions = [region['RegionName'] \n                  for region in ec2.describe_regions()['Regions']]\n        return regions\n\n    def get_account_id(self) -&gt; str:\n        \"\"\"\u73fe\u5728\u306eAWS\u30a2\u30ab\u30a6\u30f3\u30c8ID\u3092\u53d6\u5f97\"\"\"\n        sts = self.session.client('sts')\n        return sts.get_caller_identity()['Account']\n\n    def get_resource_tags(self, resource_id: str) -&gt; Dict[str, str]:\n        \"\"\"\u30ea\u30bd\u30fc\u30b9\u306e\u30bf\u30b0\u3092\u53d6\u5f97\"\"\"\n        ec2 = self.session.client('ec2')\n        response = ec2.describe_tags(\n            Filters=[{'Name': 'resource-id', 'Values': [resource_id]}]\n        )\n        return {tag['Key']: tag['Value'] for tag in response['Tags']}\n\n# \u30ea\u30c8\u30e9\u30a4\u30c7\u30b3\u30ec\u30fc\u30bf\u306e\u5b9f\u88c5\ndef retry_with_backoff(max_retries: int = 3, base_delay: float = 1):\n    def decorator(func):\n        def wrapper(*args, **kwargs):\n            for attempt in range(max_retries):\n                try:\n                    return func(*args, **kwargs)\n                except Exception as e:\n                    if attempt == max_retries - 1:\n                        raise\n                    delay = base_delay * (2 ** attempt)\n                    logger.warning(f\"Attempt {attempt + 1} failed: {str(e)}\")\n                    logger.info(f\"Retrying in {delay} seconds...\")\n                    time.sleep(delay)\n        return wrapper\n    return decorator<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-27\">\u8a2d\u5b9a\u7ba1\u7406\u306e\u5b9f\u88c5<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u81ea\u52d5\u5316\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u8a2d\u5b9a\u3092\u7ba1\u7406\u3059\u308b\u30af\u30e9\u30b9\u3092\u5b9f\u88c5\u3057\u307e\u3059\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=\"\">from typing import Dict, Any\nimport yaml\n\nclass AutomationConfig:\n    def __init__(self, config_file: str):\n        with open(config_file, 'r') as f:\n            self.config = yaml.safe_load(f)\n\n    def get_backup_config(self) -&gt; Dict[str, Any]:\n        return self.config.get('backup', {})\n\n    def get_monitoring_config(self) -&gt; Dict[str, Any]:\n        return self.config.get('monitoring', {})\n\n    def get_notification_config(self) -&gt; Dict[str, Any]:\n        return self.config.get('notification', {})\n\n# \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u4f8b\uff08config.yaml\uff09\n\"\"\"\nbackup:\n  retention_days: 7\n  schedule: \"0 1 * * *\"\n  target_tags:\n    Environment: Production\n\nmonitoring:\n  metrics:\n    - CPUUtilization\n    - MemoryUtilization\n  threshold:\n    cpu: 80\n    memory: 90\n\nnotification:\n  sns_topic_arn: \"arn:aws:sns:region:account:topic\"\n  email: \"admin@example.com\"\n\"\"\"<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-28\">\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u306e\u5b9f\u88c5<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u81ea\u52d5\u5316\u30b9\u30af\u30ea\u30d7\u30c8\u3067\u306e\u4f8b\u5916\u51e6\u7406\u3092\u7d71\u4e00\u7684\u306b\u7ba1\u7406\u3057\u307e\u3059\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=\"\">class AWSAutomationError(Exception):\n    \"\"\"\u81ea\u52d5\u5316\u30b9\u30af\u30ea\u30d7\u30c8\u7528\u306e\u30ab\u30b9\u30bf\u30e0\u4f8b\u5916\"\"\"\n    pass\n\nclass ResourceNotFoundError(AWSAutomationError):\n    \"\"\"\u30ea\u30bd\u30fc\u30b9\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u5834\u5408\u306e\u4f8b\u5916\"\"\"\n    pass\n\nclass ConfigurationError(AWSAutomationError):\n    \"\"\"\u8a2d\u5b9a\u30a8\u30e9\u30fc\u306e\u4f8b\u5916\"\"\"\n    pass\n\ndef handle_aws_error(func):\n    \"\"\"AWS API\u547c\u3073\u51fa\u3057\u306e\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u30c7\u30b3\u30ec\u30fc\u30bf\"\"\"\n    def wrapper(*args, **kwargs):\n        try:\n            return func(*args, **kwargs)\n        except boto3.exceptions.Boto3Error as e:\n            logger.error(f\"AWS API Error: {str(e)}\")\n            raise AWSAutomationError(f\"AWS\u64cd\u4f5c\u3067\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {str(e)}\")\n        except Exception as e:\n            logger.error(f\"Unexpected Error: {str(e)}\")\n            raise\n    return wrapper<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u308c\u3089\u306e\u57fa\u672c\u5b9f\u88c5\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u4fe1\u983c\u6027\u306e\u9ad8\u3044\u81ea\u52d5\u5316\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u52b9\u7387\u7684\u306b\u4f5c\u6210\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30b5\u30d6\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u3092\u6d3b\u7528\u3057\u305f\u5177\u4f53\u7684\u306a\u81ea\u52d5\u5316\u4f8b\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-29\">\u5b9a\u671f\u7684\u306a\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306e\u81ea\u52d5\u5316\u30b9\u30af\u30ea\u30d7\u30c8<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">EC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3068RDS\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u5b9a\u671f\u7684\u306a\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u81ea\u52d5\u5316\u3059\u308b\u5b9f\u88c5\u4f8b\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=\"\">import boto3\nimport logging\nfrom datetime import datetime, timedelta\nfrom typing import List, Dict\n\nclass AWSBackupManager:\n    def __init__(self, region_name: str):\n        self.ec2 = boto3.client('ec2', region_name=region_name)\n        self.rds = boto3.client('rds', region_name=region_name)\n        self.logger = logging.getLogger(__name__)\n\n    @retry_with_backoff(max_retries=3)\n    def create_ec2_backup(self, instance_id: str) -&gt; Dict:\n        \"\"\"EC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u3092\u4f5c\u6210\"\"\"\n        try:\n            timestamp = datetime.now().strftime('%Y%m%d-%H%M%S')\n            response = self.ec2.create_snapshot(\n                InstanceId=instance_id,\n                Description=f'Automated backup {timestamp}',\n                TagSpecifications=[{\n                    'ResourceType': 'snapshot',\n                    'Tags': [\n                        {'Key': 'AutoBackup', 'Value': 'true'},\n                        {'Key': 'CreatedAt', 'Value': timestamp}\n                    ]\n                }]\n            )\n            self.logger.info(f\"Created snapshot {response['SnapshotId']}\")\n            return response\n        except Exception as e:\n            self.logger.error(f\"Backup failed for instance {instance_id}: {str(e)}\")\n            raise\n\n    def cleanup_old_snapshots(self, retention_days: int = 7):\n        \"\"\"\u671f\u9650\u5207\u308c\u306e\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u3092\u524a\u9664\"\"\"\n        try:\n            cutoff_date = datetime.now(timezone.utc) - timedelta(days=retention_days)\n            snapshots = self.ec2.describe_snapshots(\n                Filters=[{'Name': 'tag:AutoBackup', 'Values': ['true']}],\n                OwnerIds=['self']\n            )['Snapshots']\n\n            for snapshot in snapshots:\n                if snapshot['StartTime'] &lt; cutoff_date:\n                    self.ec2.delete_snapshot(SnapshotId=snapshot['SnapshotId'])\n                    self.logger.info(f\"Deleted old snapshot {snapshot['SnapshotId']}\")\n        except Exception as e:\n            self.logger.error(f\"Cleanup failed: {str(e)}\")\n            raise\n\n# \u4f7f\u7528\u4f8b\ndef main():\n    backup_manager = AWSBackupManager('ap-northeast-1')\n\n    # \u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u5bfe\u8c61\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u53d6\u5f97\n    instances = backup_manager.ec2.describe_instances(\n        Filters=[{'Name': 'tag:Backup', 'Values': ['true']}]\n    )['Reservations']\n\n    for reservation in instances:\n        for instance in reservation['Instances']:\n            try:\n                backup_manager.create_ec2_backup(instance['InstanceId'])\n            except Exception as e:\n                logging.error(f\"Backup failed for {instance['InstanceId']}: {e}\")\n                continue\n\n    # \u53e4\u3044\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306e\u524a\u9664\n    backup_manager.cleanup_old_snapshots(retention_days=7)\n\nif __name__ == '__main__':\n    main()<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u306f\u4ee5\u4e0b\u306e\u7279\u5fb4\u3092\u6301\u3063\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a8\u30e9\u30fc\u767a\u751f\u6642\u306e\u518d\u8a66\u884c\u6a5f\u80fd<\/li>\n\n\n\n<li>\u8a73\u7d30\u306a\u30ed\u30b0\u8a18\u9332<\/li>\n\n\n\n<li>\u30bf\u30b0\u30d9\u30fc\u30b9\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u5bfe\u8c61\u9078\u629e<\/li>\n\n\n\n<li>\u53e4\u3044\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306e\u81ea\u52d5\u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Lambda\u95a2\u6570\u3068\u3057\u3066\u5b9f\u884c\u3059\u308b\u5834\u5408\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306bmain\u95a2\u6570\u3092\u4fee\u6b63\u3057\u307e\u3059\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=\"\">def lambda_handler(event, context):\n    try:\n        main()\n        return {'statusCode': 200, 'body': 'Backup completed successfully'}\n    except Exception as e:\n        return {'statusCode': 500, 'body': f'Backup failed: {str(e)}'}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u3092EventBridge\u306e\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u3068\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u5b9a\u671f\u7684\u306a\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-30\">\u30ea\u30bd\u30fc\u30b9\u306e\u4f7f\u7528\u72b6\u6cc1\u30ec\u30dd\u30fc\u30c8\u81ea\u52d5\u751f\u6210<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">AWS\u30ea\u30bd\u30fc\u30b9\u306e\u4f7f\u7528\u72b6\u6cc1\u3092\u5206\u6790\u3057\u3001CSV\u30ec\u30dd\u30fc\u30c8\u3092\u751f\u6210\u3059\u308b\u5b9f\u88c5\u4f8b\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=\"\">import boto3\nimport csv\nfrom datetime import datetime, timedelta\nimport pandas as pd\nfrom typing import List, Dict\n\nclass ResourceAnalyzer:\n    def __init__(self, region_name: str):\n        self.region = region_name\n        self.ec2 = boto3.client('ec2', region_name=region_name)\n        self.cloudwatch = boto3.client('cloudwatch', region_name=region_name)\n\n    def get_instance_metrics(self, instance_id: str, days: int = 7) -&gt; Dict:\n        \"\"\"\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u30e1\u30c8\u30ea\u30af\u30b9\u3092\u53d6\u5f97\"\"\"\n        end_time = datetime.utcnow()\n        start_time = end_time - timedelta(days=days)\n\n        metrics = {}\n        for metric_name in ['CPUUtilization', 'NetworkIn', 'NetworkOut']:\n            response = self.cloudwatch.get_metric_statistics(\n                Namespace='AWS\/EC2',\n                MetricName=metric_name,\n                Dimensions=[{'Name': 'InstanceId', 'Value': instance_id}],\n                StartTime=start_time,\n                EndTime=end_time,\n                Period=86400,  # 1\u65e5\u5358\u4f4d\n                Statistics=['Average']\n            )\n            metrics[metric_name] = {\n                'average': sum(d['Average'] for d in response['Datapoints']) \/ len(response['Datapoints']) if response['Datapoints'] else 0,\n                'max': max((d['Average'] for d in response['Datapoints']), default=0)\n            }\n\n        return metrics\n\n    def generate_resource_report(self, output_file: str):\n        \"\"\"\u30ea\u30bd\u30fc\u30b9\u4f7f\u7528\u72b6\u6cc1\u30ec\u30dd\u30fc\u30c8\u306e\u751f\u6210\"\"\"\n        instances = []\n        for reservation in self.ec2.describe_instances()['Reservations']:\n            for instance in reservation['Instances']:\n                metrics = self.get_instance_metrics(instance['InstanceId'])\n                instances.append({\n                    'InstanceId': instance['InstanceId'],\n                    'InstanceType': instance['InstanceType'],\n                    'State': instance['State']['Name'],\n                    'AvgCPU': f\"{metrics['CPUUtilization']['average']:.2f}%\",\n                    'MaxCPU': f\"{metrics['CPUUtilization']['max']:.2f}%\",\n                    'AvgNetworkIn': f\"{metrics['NetworkIn']['average']\/1024\/1024:.2f}MB\/day\",\n                    'AvgNetworkOut': f\"{metrics['NetworkOut']['average']\/1024\/1024:.2f}MB\/day\",\n                    'Tags': ', '.join(f\"{t['Key']}={t['Value']}\" for t in instance.get('Tags', []))\n                })\n\n        # DataFrame\u3092\u4f5c\u6210\u3057\u3066CSV\u306b\u51fa\u529b\n        df = pd.DataFrame(instances)\n        df.to_csv(output_file, index=False)\n        return output_file\n\n# \u4f7f\u7528\u4f8b\ndef main():\n    analyzer = ResourceAnalyzer('ap-northeast-1')\n    report_file = f\"resource_report_{datetime.now().strftime('%Y%m%d')}.csv\"\n    analyzer.generate_resource_report(report_file)\n\nif __name__ == '__main__':\n    main()<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u7279\u5fb4\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8907\u6570\u306e\u30e1\u30c8\u30ea\u30af\u30b9\u306e\u53ce\u96c6\u3068\u96c6\u8a08<\/li>\n\n\n\n<li>\u5206\u304b\u308a\u3084\u3059\u3044CSV\u5f62\u5f0f\u3067\u306e\u30ec\u30dd\u30fc\u30c8\u51fa\u529b<\/li>\n\n\n\n<li>\u30d1\u30f3\u30c0\u30b9\u3092\u4f7f\u7528\u3057\u305f\u52b9\u7387\u7684\u306a\u30c7\u30fc\u30bf\u51e6\u7406<\/li>\n\n\n\n<li>\u30bf\u30b0\u60c5\u5831\u306e\u542b\u3081\u305f\u30ea\u30bd\u30fc\u30b9\u5206\u6790<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u30ec\u30dd\u30fc\u30c8\u306f\u30c1\u30fc\u30e0\u5185\u3067\u306e\u5171\u6709\u3084\u3001\u30b3\u30b9\u30c8\u6700\u9069\u5316\u306e\u691c\u8a0e\u6750\u6599\u3068\u3057\u3066\u6d3b\u7528\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-31\">\u30de\u30eb\u30c1\u30ea\u30fc\u30b8\u30e7\u30f3\u3067\u306e\u30ea\u30bd\u30fc\u30b9\u4e00\u62ec\u7ba1\u7406<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u8907\u6570\u306e\u30ea\u30fc\u30b8\u30e7\u30f3\u306b\u307e\u305f\u304c\u308bAWS\u30ea\u30bd\u30fc\u30b9\u3092\u52b9\u7387\u7684\u306b\u7ba1\u7406\u3059\u308b\u5b9f\u88c5\u4f8b\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=\"\">import boto3\nimport concurrent.futures\nfrom typing import List, Dict, Any\nfrom dataclasses import dataclass\n\n@dataclass\nclass RegionResource:\n    region: str\n    resource_type: str\n    resource_id: str\n    tags: Dict[str, str]\n    details: Dict[str, Any]\n\nclass MultiRegionManager:\n    def __init__(self):\n        self.ec2_client = boto3.client('ec2')\n        self.regions = [region['RegionName'] \n                       for region in self.ec2_client.describe_regions()['Regions']]\n\n    def get_region_session(self, region: str) -&gt; boto3.Session:\n        \"\"\"\u6307\u5b9a\u30ea\u30fc\u30b8\u30e7\u30f3\u306e\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u53d6\u5f97\"\"\"\n        return boto3.Session(region_name=region)\n\n    def list_all_instances(self) -&gt; List[RegionResource]:\n        \"\"\"\u5168\u30ea\u30fc\u30b8\u30e7\u30f3\u306eEC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u4e00\u89a7\u3092\u53d6\u5f97\"\"\"\n        instances = []\n\n        def process_region(region: str) -&gt; List[RegionResource]:\n            session = self.get_region_session(region)\n            ec2 = session.client('ec2')\n            region_instances = []\n\n            try:\n                response = ec2.describe_instances()\n                for reservation in response['Reservations']:\n                    for instance in reservation['Instances']:\n                        region_instances.append(RegionResource(\n                            region=region,\n                            resource_type='EC2',\n                            resource_id=instance['InstanceId'],\n                            tags={t['Key']: t['Value'] for t in instance.get('Tags', [])},\n                            details={\n                                'State': instance['State']['Name'],\n                                'Type': instance['InstanceType'],\n                                'LaunchTime': instance['LaunchTime']\n                            }\n                        ))\n            except Exception as e:\n                print(f\"Error in region {region}: {str(e)}\")\n\n            return region_instances\n\n        # \u4e26\u5217\u51e6\u7406\u3067\u5168\u30ea\u30fc\u30b8\u30e7\u30f3\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u53d6\u5f97\n        with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:\n            future_to_region = {executor.submit(process_region, region): region \n                              for region in self.regions}\n            for future in concurrent.futures.as_completed(future_to_region):\n                instances.extend(future.result())\n\n        return instances\n\n    def execute_cross_region_action(self, action: str, resource_ids: Dict[str, List[str]]):\n        \"\"\"\u30af\u30ed\u30b9\u30ea\u30fc\u30b8\u30e7\u30f3\u3067\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u5b9f\u884c\"\"\"\n        def process_region_action(region: str, action: str, ids: List[str]):\n            session = self.get_region_session(region)\n            ec2 = session.client('ec2')\n\n            try:\n                if action == 'start':\n                    ec2.start_instances(InstanceIds=ids)\n                elif action == 'stop':\n                    ec2.stop_instances(InstanceIds=ids)\n                print(f\"Action {action} completed in region {region}\")\n            except Exception as e:\n                print(f\"Error in region {region}: {str(e)}\")\n\n        # \u4e26\u5217\u51e6\u7406\u3067\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u5b9f\u884c\n        with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:\n            futures = [\n                executor.submit(process_region_action, region, action, ids)\n                for region, ids in resource_ids.items()\n            ]\n            concurrent.futures.wait(futures)\n\n# \u4f7f\u7528\u4f8b\ndef main():\n    manager = MultiRegionManager()\n\n    # \u5168\u30ea\u30fc\u30b8\u30e7\u30f3\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u4e00\u89a7\u3092\u53d6\u5f97\n    instances = manager.list_all_instances()\n\n    # \u958b\u767a\u74b0\u5883\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u505c\u6b62\u3059\u308b\u4f8b\n    dev_instances = {\n        instance.region: [instance.resource_id]\n        for instance in instances\n        if instance.tags.get('Environment') == 'Development'\n    }\n\n    manager.execute_cross_region_action('stop', dev_instances)\n\nif __name__ == '__main__':\n    main()<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u4e3b\u306a\u7279\u5fb4\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ThreadPoolExecutor\u3092\u4f7f\u7528\u3057\u305f\u52b9\u7387\u7684\u306a\u4e26\u5217\u51e6\u7406<\/li>\n\n\n\n<li>\u30ea\u30fc\u30b8\u30e7\u30f3\u5358\u4f4d\u3067\u306e\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0<\/li>\n\n\n\n<li>\u30bf\u30b0\u30d9\u30fc\u30b9\u306e\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406<\/li>\n\n\n\n<li>dataclass\u3092\u4f7f\u7528\u3057\u305f\u578b\u5b89\u5168\u306a\u5b9f\u88c5<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u306e\u3088\u3046\u306a\u5b9f\u88c5\u306b\u3088\u308a\u3001\u8907\u6570\u30ea\u30fc\u30b8\u30e7\u30f3\u306b\u307e\u305f\u304c\u308b\u5927\u898f\u6a21\u306a\u74b0\u5883\u3067\u3082\u52b9\u7387\u7684\u306a\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-32\">boto3\u306e\u30a8\u30e9\u30fc\u5bfe\u51e6\u3068\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">boto3\u3092\u4f7f\u7528\u3057\u305fAWS\u64cd\u4f5c\u3067\u767a\u751f\u3059\u308b\u53ef\u80fd\u6027\u306e\u3042\u308b\u30a8\u30e9\u30fc\u3068\u305d\u306e\u5bfe\u51e6\u65b9\u6cd5\u3001\u52b9\u679c\u7684\u306a\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u624b\u6cd5\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-33\">\u30a8\u30e9\u30fc\u306e\u7a2e\u985e\u3068\u57fa\u672c\u7684\u306a\u5bfe\u51e6\u30d1\u30bf\u30fc\u30f3<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">boto3\u3067\u767a\u751f\u3059\u308b\u4e3b\u306a\u30a8\u30e9\u30fc\u3068\u305d\u306e\u5bfe\u51e6\u65b9\u6cd5\u3092\u4ee5\u4e0b\u306e\u8868\u306b\u307e\u3068\u3081\u307e\u3059\uff1a<\/p>\n\n\n<div id=\"id-e54efb01-cde6-4f55-9cd9-c732610e9d09\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30a8\u30e9\u30fc\u30bf\u30a4\u30d7<\/th><th>\u8aac\u660e<\/th><th>\u4e00\u822c\u7684\u306a\u539f\u56e0<\/th><th>\u5bfe\u51e6\u65b9\u6cd5<\/th><\/tr><\/thead><tbody><tr><td>NoCredentialsError<\/td><td>\u8a8d\u8a3c\u60c5\u5831\u304c\u898b\u3064\u304b\u3089\u306a\u3044<\/td><td>\u8a8d\u8a3c\u60c5\u5831\u306e\u672a\u8a2d\u5b9a<\/td><td>AWS\u8a8d\u8a3c\u60c5\u5831\u306e\u78ba\u8a8d\u3068\u8a2d\u5b9a<\/td><\/tr><tr><td>ClientError<\/td><td>API\u30ea\u30af\u30a8\u30b9\u30c8\u30a8\u30e9\u30fc<\/td><td>\u30d1\u30e9\u30e1\u30fc\u30bf\u4e0d\u6b63\u3001\u6a29\u9650\u4e0d\u8db3<\/td><td>\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u78ba\u8a8d\u3068IAM\u30dd\u30ea\u30b7\u30fc\u306e\u898b\u76f4\u3057<\/td><\/tr><tr><td>ConnectionError<\/td><td>\u63a5\u7d9a\u30a8\u30e9\u30fc<\/td><td>\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u554f\u984c<\/td><td>\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u8a2d\u5b9a\u306e\u78ba\u8a8d\u3068\u30ea\u30c8\u30e9\u30a4<\/td><\/tr><tr><td>ValidationError<\/td><td>\u30d1\u30e9\u30e1\u30fc\u30bf\u691c\u8a3c\u30a8\u30e9\u30fc<\/td><td>\u4e0d\u6b63\u306a\u30d1\u30e9\u30e1\u30fc\u30bf<\/td><td>API\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u78ba\u8a8d\u3068\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u4fee\u6b63<\/td><\/tr><tr><td>WaiterError<\/td><td>\u72b6\u614b\u5f85\u6a5f\u30a8\u30e9\u30fc<\/td><td>\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8<\/td><td>\u5f85\u6a5f\u6761\u4ef6\u306e\u8abf\u6574<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"i-34\">\u52b9\u679c\u7684\u306a\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u306e\u5b9f\u88c5<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u4ee5\u4e0b\u306f\u3001\u69d8\u3005\u306a\u30a8\u30e9\u30fc\u306b\u5bfe\u5fdc\u3059\u308b\u5305\u62ec\u7684\u306a\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u306e\u5b9f\u88c5\u4f8b\u3067\u3059\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 boto3\nimport botocore\nimport logging\nfrom typing import Any, Dict\nfrom time import sleep\nfrom functools import wraps\n\n# \u30ed\u30b0\u8a2d\u5b9a\nlogging.basicConfig(level=logging.INFO)\nlogger = logging.getLogger(__name__)\n\nclass AWSOperationError(Exception):\n    \"\"\"AWS\u64cd\u4f5c\u306b\u95a2\u3059\u308b\u30ab\u30b9\u30bf\u30e0\u4f8b\u5916\"\"\"\n    def __init__(self, message: str, error_type: str, details: Dict[str, Any] = None):\n        super().__init__(message)\n        self.error_type = error_type\n        self.details = details or {}\n\ndef aws_error_handler(max_retries: int = 3, base_delay: float = 1.0):\n    \"\"\"AWS\u64cd\u4f5c\u306e\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u30c7\u30b3\u30ec\u30fc\u30bf\"\"\"\n    def decorator(func):\n        @wraps(func)\n        def wrapper(*args, **kwargs):\n            for attempt in range(max_retries):\n                try:\n                    return func(*args, **kwargs)\n                except botocore.exceptions.ClientError as e:\n                    error_code = e.response['Error']['Code']\n                    error_message = e.response['Error']['Message']\n\n                    # \u30a8\u30e9\u30fc\u306e\u7a2e\u985e\u306b\u5fdc\u3058\u305f\u51e6\u7406\n                    if error_code == 'ThrottlingException':\n                        if attempt &lt; max_retries - 1:\n                            sleep_time = base_delay * (2 ** attempt)\n                            logger.warning(f\"API\u5236\u9650\u306b\u3088\u308b\u30a8\u30e9\u30fc\u3002{sleep_time}\u79d2\u5f8c\u306b\u30ea\u30c8\u30e9\u30a4\u3057\u307e\u3059\u3002\")\n                            sleep(sleep_time)\n                            continue\n                    elif error_code in ['InvalidClientTokenId', 'AuthFailure']:\n                        raise AWSOperationError(\n                            \"\u8a8d\u8a3c\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u8a8d\u8a3c\u60c5\u5831\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\",\n                            'auth_error',\n                            {'original_error': error_message}\n                        )\n                    elif error_code == 'AccessDenied':\n                        raise AWSOperationError(\n                            \"\u30a2\u30af\u30bb\u30b9\u6a29\u9650\u304c\u3042\u308a\u307e\u305b\u3093\u3002IAM\u30dd\u30ea\u30b7\u30fc\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\",\n                            'permission_error',\n                            {'original_error': error_message}\n                        )\n\n                    # \u305d\u306e\u4ed6\u306e\u30a8\u30e9\u30fc\n                    raise AWSOperationError(\n                        f\"AWS\u64cd\u4f5c\u3067\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {error_message}\",\n                        'client_error',\n                        {'error_code': error_code, 'original_error': error_message}\n                    )\n                except botocore.exceptions.ConnectionError as e:\n                    if attempt &lt; max_retries - 1:\n                        sleep_time = base_delay * (2 ** attempt)\n                        logger.warning(f\"\u63a5\u7d9a\u30a8\u30e9\u30fc\u3002{sleep_time}\u79d2\u5f8c\u306b\u30ea\u30c8\u30e9\u30a4\u3057\u307e\u3059\u3002\")\n                        sleep(sleep_time)\n                        continue\n                    raise AWSOperationError(\n                        \"AWS\u3078\u306e\u63a5\u7d9a\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u8a2d\u5b9a\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\",\n                        'connection_error',\n                        {'original_error': str(e)}\n                    )\n            raise AWSOperationError(\n                \"\u30ea\u30c8\u30e9\u30a4\u56de\u6570\u3092\u8d85\u904e\u3057\u307e\u3057\u305f\u3002\",\n                'retry_exceeded'\n            )\n        return wrapper\n    return decorator\n\n# \u4f7f\u7528\u4f8b\nclass S3Manager:\n    def __init__(self):\n        self.s3 = boto3.client('s3')\n\n    @aws_error_handler(max_retries=3)\n    def upload_file(self, local_path: str, bucket: str, key: str):\n        \"\"\"\u30d5\u30a1\u30a4\u30eb\u3092S3\u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\"\"\"\n        self.s3.upload_file(local_path, bucket, key)\n        logger.info(f\"\u30d5\u30a1\u30a4\u30eb {local_path} \u3092 {bucket}\/{key} \u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u307e\u3057\u305f\u3002\")<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u306e\u3088\u3046\u306a\u5b9f\u88c5\u306b\u3088\u308a\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u5229\u70b9\u304c\u5f97\u3089\u308c\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a8\u30e9\u30fc\u306e\u7a2e\u985e\u306b\u5fdc\u3058\u305f\u9069\u5207\u306a\u5bfe\u51e6<\/li>\n\n\n\n<li>\u30ea\u30c8\u30e9\u30a4\u51e6\u7406\u306e\u81ea\u52d5\u5316<\/li>\n\n\n\n<li>\u8a73\u7d30\u306a\u30ed\u30b0\u8a18\u9332<\/li>\n\n\n\n<li>\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u53ef\u80fd\u306a\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u660e\u78ba\u5316<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u6b21\u306e\u30b5\u30d6\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3088\u308a\u5177\u4f53\u7684\u306a\u30a8\u30e9\u30fc\u30b1\u30fc\u30b9\u3068\u305d\u306e\u89e3\u6c7a\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-35\">\u3088\u304f\u3042\u308b\u30a8\u30e9\u30fc\u3068\u305d\u306e\u89e3\u6c7a\u65b9\u6cd5<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">boto3\u3092\u4f7f\u7528\u3059\u308b\u969b\u306b\u3088\u304f\u906d\u9047\u3059\u308b\u30a8\u30e9\u30fc\u3068\u3001\u305d\u306e\u5177\u4f53\u7684\u306a\u89e3\u6c7a\u65b9\u6cd5\u3092\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-36\">1. \u8a8d\u8a3c\u95a2\u9023\u306e\u30a8\u30e9\u30fc<\/h4>\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=\"\"># \u30a8\u30e9\u30fc\u4f8b\nbotocore.exceptions.NoCredentialsError: Unable to locate credentials\n\n# \u89e3\u6c7a\u65b9\u6cd5\nimport os\n\n# \u65b9\u6cd51: \u74b0\u5883\u5909\u6570\u3067\u306e\u8a2d\u5b9a\nos.environ['AWS_ACCESS_KEY_ID'] = 'YOUR_ACCESS_KEY'\nos.environ['AWS_SECRET_ACCESS_KEY'] = 'YOUR_SECRET_KEY'\n\n# \u65b9\u6cd52: \u8a8d\u8a3c\u60c5\u5831\u30d5\u30a1\u30a4\u30eb\u306e\u4f7f\u7528\n# ~\/.aws\/credentials \u306b\u4ee5\u4e0b\u3092\u8a18\u8f09\n\"\"\"<\/pre>\n\n\n[default]\n\n\n\n<p class=\"wp-block-paragraph\">aws_access_key_id = YOUR_ACCESS_KEY aws_secret_access_key = YOUR_SECRET_KEY \u201c\u201d\u201d<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-37\">2. \u30ea\u30bd\u30fc\u30b9\u5236\u9650\u306e\u30a8\u30e9\u30fc<\/h4>\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=\"\"># \u30a8\u30e9\u30fc\u4f8b\nbotocore.exceptions.ClientError: An error occurred (LimitExceeded) \n\n# \u89e3\u6c7a\u65b9\u6cd5\uff1a\u30d0\u30c3\u30c1\u51e6\u7406\u306e\u5b9f\u88c5\ndef process_with_rate_limit(items, batch_size=5, delay=1):\n    for i in range(0, len(items), batch_size):\n        batch = items[i:i + batch_size]\n        process_batch(batch)\n        time.sleep(delay)  # API\u5236\u9650\u3092\u8003\u616e\u3057\u305f\u5f85\u6a5f<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-38\">3. \u30ea\u30bd\u30fc\u30b9\u4e0d\u8db3\u306e\u30a8\u30e9\u30fc<\/h4>\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=\"\"># \u30a8\u30e9\u30fc\u4f8b\nbotocore.exceptions.ClientError: An error occurred (InvalidParameterValue)\n\n# \u89e3\u6c7a\u65b9\u6cd5\uff1a\u30ea\u30bd\u30fc\u30b9\u306e\u5b58\u5728\u78ba\u8a8d\ndef ensure_resource_exists(resource_id):\n    try:\n        response = ec2.describe_instances(InstanceIds=[resource_id])\n        return True\n    except client.exceptions.ClientError as e:\n        if e.response['Error']['Code'] == 'InvalidInstanceID.NotFound':\n            return False\n        raise<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u308c\u3089\u306e\u30a8\u30e9\u30fc\u306b\u5bfe\u3057\u3066\u306f\u3001\u4ee5\u4e0b\u306e\u4e00\u822c\u7684\u306a\u5bfe\u51e6\u65b9\u91dd\u304c\u6709\u52b9\u3067\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30ed\u30b0\u306e\u8a73\u7d30\u5ea6\u3092\u4e0a\u3052\u308b<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u6b63\u78ba\u306b\u89e3\u6790\u3059\u308b<\/li>\n\n\n\n<li>AWS\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u3059\u308b<\/li>\n\n\n\n<li>\u9069\u5207\u306a\u30ea\u30c8\u30e9\u30a4\u6226\u7565\u3092\u5b9f\u88c5\u3059\u308b<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b9f\u88c5\u6642\u306f\u3001\u3053\u308c\u3089\u306e\u30a8\u30e9\u30fc\u30d1\u30bf\u30fc\u30f3\u3092\u60f3\u5b9a\u3057\u305f\u9632\u5fa1\u7684\u306a\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3092\u5fc3\u304c\u3051\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-39\">\u30c7\u30d0\u30c3\u30b0\u3068\u30ed\u30b0\u53ce\u96c6\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">boto3\u3092\u4f7f\u7528\u3057\u305f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30c7\u30d0\u30c3\u30b0\u3068\u30ed\u30b0\u53ce\u96c6\u306b\u3064\u3044\u3066\u3001\u52b9\u679c\u7684\u306a\u65b9\u6cd5\u3092\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-40\">1. \u4f53\u7cfb\u7684\u306a\u30ed\u30b0\u8a18\u9332\u306e\u5b9f\u88c5<\/h4>\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 logging\nimport json\nfrom datetime import datetime\nfrom typing import Any, Dict\n\nclass AWSLogger:\n    def __init__(self, logger_name: str, log_level: int = logging.INFO):\n        self.logger = logging.getLogger(logger_name)\n        self.logger.setLevel(log_level)\n\n        # \u30d5\u30a1\u30a4\u30eb\u30cf\u30f3\u30c9\u30e9\u306e\u8a2d\u5b9a\n        handler = logging.FileHandler(f'aws_operations_{datetime.now():%Y%m%d}.log')\n        formatter = logging.Formatter(\n            '%(asctime)s - %(name)s - %(levelname)s - %(message)s'\n        )\n        handler.setFormatter(formatter)\n        self.logger.addHandler(handler)\n\n    def log_aws_operation(self, \n                         operation: str, \n                         params: Dict[str, Any], \n                         response: Dict[str, Any] = None, \n                         error: Exception = None):\n        \"\"\"AWS\u64cd\u4f5c\u306e\u30ed\u30b0\u3092\u8a18\u9332\"\"\"\n        log_entry = {\n            'operation': operation,\n            'parameters': params,\n            'timestamp': datetime.now().isoformat(),\n            'status': 'success' if error is None else 'error'\n        }\n\n        if response:\n            log_entry['response'] = response\n        if error:\n            log_entry['error'] = {\n                'type': type(error).__name__,\n                'message': str(error)\n            }\n\n        self.logger.info(json.dumps(log_entry, indent=2))<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-41\">2. \u30c7\u30d0\u30c3\u30b0\u30e2\u30fc\u30c9\u306e\u5b9f\u88c5<\/h4>\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=\"\">class AWSDebugger:\n    def __init__(self, enabled: bool = False):\n        self.enabled = enabled\n        self.aws_logger = AWSLogger('aws_debugger')\n\n    def debug_api_call(self, func):\n        \"\"\"API\u30b3\u30fc\u30eb\u3092\u30c7\u30d0\u30c3\u30b0\u3059\u308b\u30c7\u30b3\u30ec\u30fc\u30bf\"\"\"\n        def wrapper(*args, **kwargs):\n            if not self.enabled:\n                return func(*args, **kwargs)\n\n            try:\n                # \u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u30ed\u30b0\u8a18\u9332\n                self.aws_logger.logger.debug(\n                    f\"Calling {func.__name__} with args: {args}, kwargs: {kwargs}\"\n                )\n\n                # API\u547c\u3073\u51fa\u3057\n                result = func(*args, **kwargs)\n\n                # \u7d50\u679c\u306e\u30ed\u30b0\u8a18\u9332\n                self.aws_logger.logger.debug(\n                    f\"Result from {func.__name__}: {result}\"\n                )\n\n                return result\n            except Exception as e:\n                self.aws_logger.logger.error(\n                    f\"Error in {func.__name__}: {str(e)}\"\n                )\n                raise\n        return wrapper<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-42\">\u30c7\u30d0\u30c3\u30b0\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30ed\u30b0\u30ec\u30d9\u30eb\u306e\u9069\u5207\u306a\u4f7f\u7528<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>DEBUG: \u8a73\u7d30\u306a\u30c7\u30d0\u30c3\u30b0\u60c5\u5831<\/li>\n\n\n\n<li>INFO: \u901a\u5e38\u306e\u64cd\u4f5c\u60c5\u5831<\/li>\n\n\n\n<li>WARNING: \u6ce8\u610f\u304c\u5fc5\u8981\u306a\u72b6\u6cc1<\/li>\n\n\n\n<li>ERROR: \u30a8\u30e9\u30fc\u60c5\u5831<\/li>\n\n\n\n<li>CRITICAL: \u91cd\u5927\u306a\u554f\u984c<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u69cb\u9020\u5316\u30ed\u30b0\u306e\u6d3b\u7528<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>JSON\u5f62\u5f0f\u3067\u30ed\u30b0\u3092\u8a18\u9332<\/li>\n\n\n\n<li>\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u306e\u4ed8\u4e0e<\/li>\n\n\n\n<li>\u64cd\u4f5c\u306e\u8ffd\u8de1\u6027\u78ba\u4fdd<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30a8\u30e9\u30fc\u60c5\u5831\u306e\u5b8c\u5168\u306a\u8a18\u9332<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b9\u30bf\u30c3\u30af\u30c8\u30ec\u30fc\u30b9<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8<\/li>\n\n\n\n<li>\u30d1\u30e9\u30e1\u30fc\u30bf\u60c5\u5831<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u308c\u3089\u306e\u5b9f\u88c5\u306b\u3088\u308a\u3001\u554f\u984c\u767a\u751f\u6642\u306e\u539f\u56e0\u7279\u5b9a\u3068\u89e3\u6c7a\u304c\u5bb9\u6613\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-43\">boto3\u3092\u4f7f\u7528\u3057\u305fAWS\u904b\u7528\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">boto3\u3092\u4f7f\u7528\u3057\u3066AWS\u30ea\u30bd\u30fc\u30b9\u3092\u7ba1\u7406\u3059\u308b\u969b\u306e\u91cd\u8981\u306a\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3001\u30b3\u30b9\u30c8\u6700\u9069\u5316\u3001\u904b\u7528\u52b9\u7387\u5316\u306e\u89b3\u70b9\u304b\u3089\u3001\u5b9f\u8df5\u7684\u306a\u5b9f\u88c5\u65b9\u6cd5\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-44\">\u57fa\u672c\u7684\u306a\u8a2d\u8a08\u539f\u5247<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8a2d\u5b9a\u306e\u4e00\u5143\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=\"\">import yaml\nfrom pathlib import Path\n\nclass AWSConfig:\n    def __init__(self, config_path: str = 'config.yaml'):\n        self.config = self._load_config(config_path)\n\n    def _load_config(self, config_path: str) -&gt; dict:\n        with Path(config_path).open() as f:\n            return yaml.safe_load(f)\n\n    @property\n    def security_config(self) -&gt; dict:\n        return self.config.get('security', {})\n\n    @property\n    def cost_config(self) -&gt; dict:\n        return self.config.get('cost', {})\n\n# \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u4f8b\uff08config.yaml\uff09\n\"\"\"\nsecurity:\n  allowed_regions:\n    - ap-northeast-1\n    - us-east-1\n  required_tags:\n    - Environment\n    - Project\n  encryption:\n    kms_key_id: \"arn:aws:kms:region:account:key\/key-id\"\n\ncost:\n  budget_threshold: 1000\n  alert_email: \"admin@example.com\"\n  reserved_instance_types:\n    - t3.medium\n    - m5.large\n\"\"\"<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30bb\u30c3\u30b7\u30e7\u30f3\u7ba1\u7406\u306e\u6a19\u6e96\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=\"\">class AWSSessionManager:\n    def __init__(self, config: AWSConfig):\n        self.config = config\n        self._sessions = {}\n\n    def get_session(self, region: str) -&gt; boto3.Session:\n        if region not in self.config.security_config['allowed_regions']:\n            raise ValueError(f\"Region {region} is not allowed\")\n\n        if region not in self._sessions:\n            self._sessions[region] = boto3.Session(region_name=region)\n\n        return self._sessions[region]\n\n    def get_client(self, service: str, region: str) -&gt; boto3.client:\n        session = self.get_session(region)\n        return session.client(service)<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30ea\u30bd\u30fc\u30b9\u30bf\u30b0\u306e\u6a19\u6e96\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=\"\">class AWSResourceTagger:\n    def __init__(self, config: AWSConfig):\n        self.config = config\n\n    def validate_tags(self, tags: dict) -&gt; bool:\n        required_tags = self.config.security_config['required_tags']\n        return all(tag in tags for tag in required_tags)\n\n    def create_resource_tags(self, base_tags: dict) -&gt; list:\n        if not self.validate_tags(base_tags):\n            raise ValueError(\"Required tags are missing\")\n\n        return [{'Key': k, 'Value': v} for k, v in base_tags.items()]<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>\u76e3\u67fb\u30ed\u30b0\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=\"\">class AWSAuditor:\n    def __init__(self, config: AWSConfig):\n        self.config = config\n        self.cloudtrail = boto3.client('cloudtrail')\n        self.cloudwatch = boto3.client('cloudwatch')\n\n    def log_operation(self, operation: str, resource_id: str, \n                     user: str, details: dict):\n        \"\"\"\u64cd\u4f5c\u30ed\u30b0\u3092\u8a18\u9332\"\"\"\n        log_entry = {\n            'Operation': operation,\n            'ResourceId': resource_id,\n            'User': user,\n            'Timestamp': datetime.now().isoformat(),\n            'Details': details\n        }\n\n        # CloudWatch\u3078\u30ed\u30b0\u3092\u9001\u4fe1\n        self.cloudwatch.put_metric_data(\n            Namespace='CustomAudit',\n            MetricData=[{\n                'MetricName': 'ResourceOperation',\n                'Value': 1,\n                'Dimensions': [\n                    {'Name': 'Operation', 'Value': operation},\n                    {'Name': 'ResourceType', 'Value': details.get('ResourceType')}\n                ]\n            }]\n        )<\/pre>\n\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li><strong>\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u306e\u6a19\u6e96\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=\"\">class AWSOperationError(Exception):\n    def __init__(self, message: str, operation: str, \n                 resource_id: str = None, details: dict = None):\n        super().__init__(message)\n        self.operation = operation\n        self.resource_id = resource_id\n        self.details = details or {}\n\ndef aws_operation_handler(func):\n    \"\"\"AWS\u64cd\u4f5c\u306e\u6a19\u6e96\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u30c7\u30b3\u30ec\u30fc\u30bf\"\"\"\n    @wraps(func)\n    def wrapper(*args, **kwargs):\n        try:\n            return func(*args, **kwargs)\n        except botocore.exceptions.ClientError as e:\n            error_code = e.response['Error']['Code']\n            error_message = e.response['Error']['Message']\n\n            raise AWSOperationError(\n                message=error_message,\n                operation=func.__name__,\n                details={'error_code': error_code}\n            )\n    return wrapper<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u308c\u3089\u306e\u57fa\u672c\u5b9f\u88c5\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u4ee5\u4e0b\u306e\u5229\u70b9\u304c\u5f97\u3089\u308c\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8981\u4ef6\u306e\u4e00\u8cab\u3057\u305f\u9069\u7528<\/li>\n\n\n\n<li>\u904b\u7528\u624b\u9806\u306e\u6a19\u6e96\u5316<\/li>\n\n\n\n<li>\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u52b9\u7387\u5316<\/li>\n\n\n\n<li>\u30b3\u30f3\u30d7\u30e9\u30a4\u30a2\u30f3\u30b9\u8981\u4ef6\u3078\u306e\u5bfe\u5fdc<\/li>\n\n\n\n<li>\u904b\u7528\u30b3\u30b9\u30c8\u306e\u6700\u9069\u5316<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u6b21\u306e\u30b5\u30d6\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u57fa\u672c\u5b9f\u88c5\u3092\u6d3b\u7528\u3057\u305f\u5177\u4f53\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u3092\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-45\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u8003\u616e\u3057\u305f\u5b9f\u88c5\u65b9\u6cd5<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">boto3\u3092\u4f7f\u7528\u3059\u308b\u969b\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306b\u3064\u3044\u3066\u3001\u5177\u4f53\u7684\u306a\u5b9f\u88c5\u4f8b\u3092\u4ea4\u3048\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-46\">1. \u5b89\u5168\u306a\u8a8d\u8a3c\u60c5\u5831\u7ba1\u7406<\/h4>\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 json\nfrom aws_secretsmanager_caching import SecretCache\n\nclass SecureAWSClient:\n    def __init__(self, region_name: str):\n        # \u30bb\u30ad\u30e5\u30a2\u306a\u8a2d\u5b9a\u3067\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3092\u521d\u671f\u5316\n        self.config = Config(\n            region_name=region_name,\n            retries={'max_attempts': 3},\n            # TLS 1.2\u4ee5\u4e0a\u3092\u5f37\u5236\n            ssl_verify=True\n        )\n\n        # Secrets Manager\u304b\u3089\u306e\u8a8d\u8a3c\u60c5\u5831\u53d6\u5f97\n        self.secret_cache = SecretCache()\n\n    def get_secure_client(self, service_name: str):\n        # \u8a8d\u8a3c\u60c5\u5831\u3092\u5b89\u5168\u306b\u53d6\u5f97\n        credentials = json.loads(\n            self.secret_cache.get_secret_string('aws\/credentials')\n        )\n\n        return boto3.client(\n            service_name,\n            aws_access_key_id=credentials['access_key'],\n            aws_secret_access_key=credentials['secret_key'],\n            config=self.config\n        )<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-47\">2. \u6700\u5c0f\u6a29\u9650\u306e\u5b9f\u88c5<\/h4>\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=\"\">def create_minimal_role(role_name: str, service: str):\n    \"\"\"\u5fc5\u8981\u6700\u5c0f\u9650\u306e\u6a29\u9650\u3092\u6301\u3064IAM\u30ed\u30fc\u30eb\u3092\u4f5c\u6210\"\"\"\n    iam = boto3.client('iam')\n\n    # \u4fe1\u983c\u30dd\u30ea\u30b7\u30fc\u306e\u4f5c\u6210\n    trust_policy = {\n        \"Version\": \"2012-10-17\",\n        \"Statement\": [{\n            \"Effect\": \"Allow\",\n            \"Principal\": {\"Service\": f\"{service}.amazonaws.com\"},\n            \"Action\": \"sts:AssumeRole\"\n        }]\n    }\n\n    # \u6700\u5c0f\u6a29\u9650\u306e\u30dd\u30ea\u30b7\u30fc\u3092\u4f5c\u6210\n    minimal_policy = {\n        \"Version\": \"2012-10-17\",\n        \"Statement\": [{\n            \"Effect\": \"Allow\",\n            \"Action\": [\n                \"s3:GetObject\",\n                \"s3:PutObject\"\n            ],\n            \"Resource\": [\n                \"arn:aws:s3:::specific-bucket\/*\"\n            ]\n        }]\n    }\n\n    # \u30ed\u30fc\u30eb\u3068\u30dd\u30ea\u30b7\u30fc\u306e\u4f5c\u6210\n    iam.create_role(\n        RoleName=role_name,\n        AssumeRolePolicyDocument=json.dumps(trust_policy)\n    )\n\n    iam.put_role_policy(\n        RoleName=role_name,\n        PolicyName=f\"{role_name}-policy\",\n        PolicyDocument=json.dumps(minimal_policy)\n    )<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u308c\u3089\u306e\u5b9f\u88c5\u306b\u3088\u308a\u3001\u4ee5\u4e0b\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8981\u4ef6\u3092\u6e80\u305f\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8a8d\u8a3c\u60c5\u5831\u306e\u5b89\u5168\u306a\u7ba1\u7406<\/li>\n\n\n\n<li>\u6700\u5c0f\u6a29\u9650\u306e\u539f\u5247\u306e\u9075\u5b88<\/li>\n\n\n\n<li>\u901a\u4fe1\u306e\u6697\u53f7\u5316<\/li>\n\n\n\n<li>\u76e3\u67fb\u53ef\u80fd\u6027\u306e\u78ba\u4fdd<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-48\">\u30b3\u30b9\u30c8\u6700\u9069\u5316\u306e\u305f\u3081\u306e\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">boto3\u3092\u4f7f\u7528\u3057\u3066AWS\u30ea\u30bd\u30fc\u30b9\u306e\u30b3\u30b9\u30c8\u3092\u6700\u9069\u5316\u3059\u308b\u65b9\u6cd5\u306b\u3064\u3044\u3066\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 datetime import datetime, timedelta\nfrom typing import List, Dict\n\nclass CostOptimizer:\n    def __init__(self):\n        self.ec2 = boto3.client('ec2')\n        self.cloudwatch = boto3.client('cloudwatch')\n        self.ce = boto3.client('ce')  # Cost Explorer\n\n    def identify_idle_resources(self, days: int = 7) -&gt; List[Dict]:\n        \"\"\"\u4f4e\u4f7f\u7528\u7387\u306e\u30ea\u30bd\u30fc\u30b9\u3092\u7279\u5b9a\"\"\"\n        end_time = datetime.utcnow()\n        start_time = end_time - timedelta(days=days)\n\n        # \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306eCPU\u4f7f\u7528\u7387\u3092\u78ba\u8a8d\n        instances = self.ec2.describe_instances()\n        idle_resources = []\n\n        for reservation in instances['Reservations']:\n            for instance in reservation['Instances']:\n                metrics = self.cloudwatch.get_metric_statistics(\n                    Namespace='AWS\/EC2',\n                    MetricName='CPUUtilization',\n                    Dimensions=[{'Name': 'InstanceId', \n                               'Value': instance['InstanceId']}],\n                    StartTime=start_time,\n                    EndTime=end_time,\n                    Period=3600,\n                    Statistics=['Average']\n                )\n\n                # CPU\u4f7f\u7528\u7387\u304c10%\u672a\u6e80\u306e\u5834\u5408\n                if metrics['Datapoints']:\n                    avg_cpu = sum(dp['Average'] for dp in metrics['Datapoints']) \/ len(metrics['Datapoints'])\n                    if avg_cpu &lt; 10:\n                        idle_resources.append({\n                            'ResourceId': instance['InstanceId'],\n                            'Type': instance['InstanceType'],\n                            'AverageCPU': avg_cpu,\n                            'Tags': instance.get('Tags', [])\n                        })\n\n        return idle_resources\n\n    def get_cost_report(self, days: int = 30) -&gt; Dict:\n        \"\"\"\u30b3\u30b9\u30c8\u5206\u6790\u30ec\u30dd\u30fc\u30c8\u306e\u751f\u6210\"\"\"\n        end = datetime.utcnow()\n        start = end - timedelta(days=days)\n\n        response = self.ce.get_cost_and_usage(\n            TimePeriod={\n                'Start': start.strftime('%Y-%m-%d'),\n                'End': end.strftime('%Y-%m-%d')\n            },\n            Granularity='DAILY',\n            Metrics=['UnblendedCost'],\n            GroupBy=[\n                {'Type': 'DIMENSION', 'Key': 'SERVICE'},\n                {'Type': 'TAG', 'Key': 'Environment'}\n            ]\n        )\n\n        return response['ResultsByTime']<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u306e\u5b9f\u88c5\u306b\u3088\u308a\u3001\u4ee5\u4e0b\u306e\u30b3\u30b9\u30c8\u6700\u9069\u5316\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u672a\u4f7f\u7528\u30fb\u4f4e\u4f7f\u7528\u7387\u30ea\u30bd\u30fc\u30b9\u306e\u7279\u5b9a<\/li>\n\n\n\n<li>\u30b5\u30fc\u30d3\u30b9\u5225\u30b3\u30b9\u30c8\u5206\u6790<\/li>\n\n\n\n<li>\u74b0\u5883\u5225\u30b3\u30b9\u30c8\u914d\u5206<\/li>\n\n\n\n<li>\u30ea\u30bd\u30fc\u30b9\u4f7f\u7528\u52b9\u7387\u306e\u6700\u9069\u5316<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-49\">\u5927\u898f\u6a21\u74b0\u5883\u3067\u306e\u52b9\u7387\u7684\u306a\u904b\u7528\u65b9\u6cd5<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5927\u898f\u6a21\u306aAWS\u74b0\u5883\u3067boto3\u3092\u52b9\u7387\u7684\u306b\u6d3b\u7528\u3059\u308b\u305f\u3081\u306e\u5b9f\u88c5\u4f8b\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=\"\">import boto3\nimport concurrent.futures\nfrom typing import List, Dict, Any\nfrom dataclasses import dataclass\nimport asyncio\nimport aioboto3\n\n@dataclass\nclass AWSAccount:\n    account_id: str\n    role_arn: str\n    regions: List[str]\n\nclass EnterpriseAWSManager:\n    def __init__(self, accounts: List[AWSAccount]):\n        self.accounts = accounts\n        self.sts = boto3.client('sts')\n\n    def assume_role(self, role_arn: str) -&gt; Dict[str, str]:\n        \"\"\"\u30af\u30ed\u30b9\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u8a8d\u8a3c\u60c5\u5831\u3092\u53d6\u5f97\"\"\"\n        response = self.sts.assume_role(\n            RoleArn=role_arn,\n            RoleSessionName='MultiAccountOperation'\n        )\n        return response['Credentials']\n\n    async def process_account(self, account: AWSAccount, operation: callable):\n        \"\"\"\u5358\u4e00\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u51e6\u7406\u3092\u5b9f\u884c\"\"\"\n        results = []\n        credentials = self.assume_role(account.role_arn)\n\n        async with aioboto3.Session(\n            aws_access_key_id=credentials['AccessKeyId'],\n            aws_secret_access_key=credentials['SecretAccessKey'],\n            aws_session_token=credentials['SessionToken']\n        ) as session:\n            for region in account.regions:\n                async with session.client('ec2', region_name=region) as ec2:\n                    result = await operation(ec2)\n                    results.append({\n                        'account_id': account.account_id,\n                        'region': region,\n                        'result': result\n                    })\n        return results\n\n    async def execute_multi_account_operation(self, operation: callable):\n        \"\"\"\u8907\u6570\u30a2\u30ab\u30a6\u30f3\u30c8\u3067\u4e26\u5217\u51e6\u7406\u3092\u5b9f\u884c\"\"\"\n        tasks = [\n            self.process_account(account, operation)\n            for account in self.accounts\n        ]\n        return await asyncio.gather(*tasks)\n\n# \u4f7f\u7528\u4f8b\nasync def main():\n    accounts = [\n        AWSAccount(\n            account_id='123456789012',\n            role_arn='arn:aws:iam::123456789012:role\/CrossAccountRole',\n            regions=['ap-northeast-1', 'us-east-1']\n        ),\n        # \u4ed6\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u60c5\u5831\n    ]\n\n    manager = EnterpriseAWSManager(accounts)\n\n    # \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u60c5\u5831\u53d6\u5f97\u306e\u4f8b\n    async def get_instances(ec2):\n        response = await ec2.describe_instances()\n        return response['Reservations']\n\n    results = await manager.execute_multi_account_operation(get_instances)\n\n    # \u7d50\u679c\u306e\u51e6\u7406\n    for account_results in results:\n        for result in account_results:\n            print(f\"Account: {result['account_id']}\")\n            print(f\"Region: {result['region']}\")\n            print(f\"Instances: {len(result['result'])}\")<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u306e\u5b9f\u88c5\u306b\u3088\u308a\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u5927\u898f\u6a21\u74b0\u5883\u3067\u306e\u904b\u7528\u304c\u52b9\u7387\u5316\u3055\u308c\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30de\u30eb\u30c1\u30a2\u30ab\u30a6\u30f3\u30c8\u7ba1\u7406<\/li>\n\n\n\n<li>\u30af\u30ed\u30b9\u30ea\u30fc\u30b8\u30e7\u30f3\u64cd\u4f5c<\/li>\n\n\n\n<li>\u975e\u540c\u671f\u51e6\u7406\u306b\u3088\u308b\u52b9\u7387\u5316<\/li>\n\n\n\n<li>\u30b9\u30b1\u30fc\u30e9\u30d6\u30eb\u306a\u904b\u7528\u81ea\u52d5\u5316<\/li>\n<\/ul>\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":["post-2236","post","type-post","status-publish","format-standard","category-aws","nothumb"],"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2236","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=2236"}],"version-history":[{"count":1,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2236\/revisions"}],"predecessor-version":[{"id":2237,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2236\/revisions\/2237"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2236"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2236"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2236"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}