{"id":2398,"date":"2025-03-24T08:47:30","date_gmt":"2025-03-23T23:47:30","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=2398"},"modified":"2025-03-24T08:47:53","modified_gmt":"2025-03-23T23:47:53","slug":"%e3%80%90%e4%bf%9d%e5%ad%98%e7%89%88%e3%80%91aws-cli-s3%e3%82%a2%e3%83%83%e3%83%97%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%892024-%e5%9f%ba%e6%9c%ac%e3%81%8b%e3%82%89%e5%bf%9c%e7%94%a8%e3%81%be","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=2398","title":{"rendered":"\u3010\u4fdd\u5b58\u7248\u3011AWS CLI S3\u30a2\u30c3\u30d7\u5b8c\u5168\u30ac\u30a4\u30c92024 -\u57fa\u672c\u304b\u3089\u5fdc\u7528\u307e\u30677\u3064\u306e\u5b9f\u8df5\u30c6\u30af\u30cb\u30c3\u30af"},"content":{"rendered":"\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">AWS CLI S3 \u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u306e\u57fa\u790e\u77e5\u8b58<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">AWS CLI \u3068 S3 \u306e\u95a2\u4fc2\u6027\u3092\u7406\u89e3\u3057\u3088\u3046<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-2\">\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u306b\u5fc5\u8981\u306a\u524d\u63d0\u6761\u4ef6\u3068\u6e96\u5099<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-7\">S3\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u306e\u57fa\u672c\u30b3\u30de\u30f3\u30c9\u89e3\u8aac<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-8\">aws s3 cp\u30b3\u30de\u30f3\u30c9\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u8ee2\u9001\u3059\u308b<\/a>      <\/li>      <li>        <a href=\"#i-11\">aws s3 sync\u30b3\u30de\u30f3\u30c9\u3067\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u540c\u671f\u3059\u308b<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-14\">\u3088\u304f\u4f7f\u3046\u30aa\u30d7\u30b7\u30e7\u30f3\u3068\u4f7f\u7528\u4f8b<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-19\">\u5b9f\u8df5\u7684\u306a\u30c6\u30af\u30cb\u30c3\u30af\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-20\">\u5927\u5bb9\u91cf\u30d5\u30a1\u30a4\u30eb\u3092\u52b9\u7387\u7684\u306b\u8ee2\u9001\u3059\u308b\u30de\u30eb\u30c1\u30d1\u30fc\u30c8\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9<\/a>      <\/li>      <li>        <a href=\"#i-23\">\u30ef\u30a4\u30eb\u30c9\u30ab\u30fc\u30c9\u3092\u4f7f\u7528\u3057\u305f\u4e00\u62ec\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-26\">\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u6642\u306e\u30d1\u30bf\u30fc\u30f3\u8a2d\u5b9a<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-30\">\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-31\">\u4e00\u822c\u7684\u306a\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3068\u89e3\u6c7a\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-35\">\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u3068IAM\u30ed\u30fc\u30eb\u306e\u8a2d\u5b9a\u78ba\u8a8d<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-40\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-41\">\u6697\u53f7\u5316\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u9069\u5207\u306a\u9078\u629e<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-45\">\u30a2\u30af\u30bb\u30b9\u5236\u5fa1\u3068\u653f\u7b56\u8a2d\u5b9a\u306e\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-49\">\u81ea\u52d5\u5316\u3068CI\/CD\u7d71\u5408<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-50\">\u30b7\u30a7\u30eb\u30b9\u30af\u30ea\u30d7\u30c8\u3067\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3092\u81ea\u52d5\u5316\u3059\u308b<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-53\">GitHub Actions\u3067\u306eS3\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u8a2d\u5b9a\u4f8b<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-56\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u3068\u30b3\u30b9\u30c8\u7ba1\u7406<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-57\">\u8ee2\u9001\u901f\u5ea6\u3092\u5411\u4e0a\u3055\u305b\u308b\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-61\">\u30b9\u30c8\u30ec\u30fc\u30b8\u30af\u30e9\u30b9\u306e\u9078\u629e\u3068\u30b3\u30b9\u30c8\u524a\u6e1b\u306e\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>    <\/ul>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">AWS CLI S3 \u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u306e\u57fa\u790e\u77e5\u8b58<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">AWS CLI \u3068 S3 \u306e\u95a2\u4fc2\u6027\u3092\u7406\u89e3\u3057\u3088\u3046<\/h3>\n\n\n\n<p>AWS CLI\u306f\u3001AWS\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u304b\u3089\u64cd\u4f5c\u3059\u308b\u305f\u3081\u306e\u516c\u5f0f\u30c4\u30fc\u30eb\u3067\u3059\u3002S3\uff08Simple Storage Service\uff09\u3068\u306e\u95a2\u4fc2\u306b\u304a\u3044\u3066\u3001AWS CLI\u306f\u4ee5\u4e0b\u306e\u91cd\u8981\u306a\u5f79\u5272\u3092\u679c\u305f\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u76f4\u63a5\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30ed\u30fc\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9<\/li>\n\n\n\n<li>S3\u30d0\u30b1\u30c3\u30c8\u304b\u3089\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9<\/li>\n\n\n\n<li>\u30d0\u30b1\u30c3\u30c8\u9593\u306e\u30d5\u30a1\u30a4\u30eb\u30b3\u30d4\u30fc<\/li>\n\n\n\n<li>\u30d5\u30a1\u30a4\u30eb\u306e\u524a\u9664\u3084\u79fb\u52d5<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u81ea\u52d5\u5316\u306e\u5b9f\u73fe<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b7\u30a7\u30eb\u30b9\u30af\u30ea\u30d7\u30c8\u3067\u306e\u5229\u7528<\/li>\n\n\n\n<li>\u30d0\u30c3\u30c1\u51e6\u7406\u306e\u5b9f\u88c5<\/li>\n\n\n\n<li>CI\/CD\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u3068\u306e\u7d71\u5408<\/li>\n<\/ul>\n\n\n\n<p>AWS CLI\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001Web\u30b3\u30f3\u30bd\u30fc\u30eb\u3067\u306f\u306a\u304f\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u304b\u3089S3\u306e\u64cd\u4f5c\u304c\u53ef\u80fd\u3068\u306a\u308a\u3001\u52b9\u7387\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u7ba1\u7406\u3084\u81ea\u52d5\u5316\u304c\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u306b\u5fc5\u8981\u306a\u524d\u63d0\u6761\u4ef6\u3068\u6e96\u5099<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-3\">1. AWS CLI\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/h4>\n\n\n\n<p>\u5404OS\u5411\u3051\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u65b9\u6cd5\u3092\u7d39\u4ecb\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<p><strong>Linux\/macOS\uff08pip\u4f7f\u7528\uff09<\/strong><\/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\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\uff08\u672a\u5c0e\u5165\u306e\u5834\u5408\uff09\nsudo apt-get install python3-pip  # Ubuntu\u306e\u5834\u5408\nsudo yum install python3-pip      # Amazon Linux\/CentOS\u306e\u5834\u5408\n\n# AWS CLI\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\npip3 install awscli --upgrade --user<\/pre>\n\n\n\n<p><strong>Windows<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/aws.amazon.com\/jp\/cli\/\">AWS CLI\u516c\u5f0f\u30a4\u30f3\u30b9\u30c8\u30fc\u30e9\u30fc<\/a>\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u5b9f\u884c<\/li>\n<\/ul>\n\n\n\n<p>\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u5f8c\u3001\u30d0\u30fc\u30b8\u30e7\u30f3\u78ba\u8a8d\u3067\u6b63\u5e38\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u305f\u3053\u3068\u3092\u78ba\u8a8d\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=\"\">aws --version<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-4\">2. AWS\u8a8d\u8a3c\u60c5\u5831\u306e\u8a2d\u5b9a<\/h4>\n\n\n\n<p>AWS CLI\u3092\u4f7f\u7528\u3059\u308b\u306b\u306f\u3001\u9069\u5207\u306a\u8a8d\u8a3c\u60c5\u5831\u306e\u8a2d\u5b9a\u304c\u5fc5\u8981\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=\"\">aws configure<\/pre>\n\n\n\n<p>\u3053\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001\u4ee5\u4e0b\u306e\u60c5\u5831\u306e\u5165\u529b\u3092\u6c42\u3081\u3089\u308c\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>AWS Access Key ID<\/li>\n\n\n\n<li>AWS Secret Access Key<\/li>\n\n\n\n<li>Default region name\uff08\u4f8b\uff1aap-northeast-1\uff09<\/li>\n\n\n\n<li>Default output format\uff08json\/yaml\/text\/table\uff09<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-5\">3. \u5fc5\u8981\u306aIAM\u6a29\u9650\u306e\u78ba\u8a8d<\/h4>\n\n\n\n<p>S3\u64cd\u4f5c\u306b\u5fc5\u8981\u306a\u6700\u5c0f\u9650\u306eIAM\u30dd\u30ea\u30b7\u30fc\u4f8b\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=\"\">{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": [\n                \"s3:PutObject\",\n                \"s3:GetObject\",\n                \"s3:ListBucket\"\n            ],\n            \"Resource\": [\n                \"arn:aws:s3:::your-bucket-name\/*\",\n                \"arn:aws:s3:::your-bucket-name\"\n            ]\n        }\n    ]\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-6\">4. \u52d5\u4f5c\u78ba\u8a8d<\/h4>\n\n\n\n<p>\u8a2d\u5b9a\u304c\u5b8c\u4e86\u3057\u305f\u3089\u3001\u7c21\u5358\u306a\u30b3\u30de\u30f3\u30c9\u3067\u52d5\u4f5c\u78ba\u8a8d\u3092\u884c\u3044\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=\"\"># \u30d0\u30b1\u30c3\u30c8\u306e\u4e00\u89a7\u3092\u8868\u793a\naws s3 ls\n\n# \u7279\u5b9a\u306e\u30d0\u30b1\u30c3\u30c8\u306e\u5185\u5bb9\u3092\u8868\u793a\naws s3 ls s3:\/\/your-bucket-name\/<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u524d\u63d0\u6761\u4ef6\u3092\u6e80\u305f\u3059\u3053\u3068\u3067\u3001AWS CLI\u3092\u4f7f\u7528\u3057\u305fS3\u3078\u306e\u30d5\u30a1\u30a4\u30eb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u304c\u53ef\u80fd\u3068\u306a\u308a\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u5177\u4f53\u7684\u306a\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u30b3\u30de\u30f3\u30c9\u3068\u305d\u306e\u4f7f\u7528\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-7\">S3\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u306e\u57fa\u672c\u30b3\u30de\u30f3\u30c9\u89e3\u8aac<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-8\">aws s3 cp\u30b3\u30de\u30f3\u30c9\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u8ee2\u9001\u3059\u308b<\/h3>\n\n\n\n<p><code>aws s3 cp<\/code>\u30b3\u30de\u30f3\u30c9\u306f\u3001\u30ed\u30fc\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u3068S3\u30d0\u30b1\u30c3\u30c8\u9593\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u30b3\u30d4\u30fc\u3059\u308b\u969b\u306b\u4f7f\u7528\u3059\u308b\u57fa\u672c\u7684\u306a\u30b3\u30de\u30f3\u30c9\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-9\">\u57fa\u672c\u7684\u306a\u4f7f\u7528\u65b9\u6cd5<\/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\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u3092S3\u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\naws s3 cp myfile.txt s3:\/\/my-bucket\/\n\n# S3\u4e0a\u306e\u7279\u5b9a\u306e\u30d1\u30b9\u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\naws s3 cp myfile.txt s3:\/\/my-bucket\/folder\/myfile.txt\n\n# S3\u304b\u3089\u30ed\u30fc\u30ab\u30eb\u306b\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\naws s3 cp s3:\/\/my-bucket\/myfile.txt .\/\n\n# \u30d0\u30b1\u30c3\u30c8\u9593\u3067\u306e\u30d5\u30a1\u30a4\u30eb\u30b3\u30d4\u30fc\naws s3 cp s3:\/\/source-bucket\/file.txt s3:\/\/dest-bucket\/<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-10\">\u3088\u304f\u4f7f\u7528\u3059\u308b\u30aa\u30d7\u30b7\u30e7\u30f3<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u2013recursive<\/strong>\uff1a\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5168\u4f53\u3092\u30b3\u30d4\u30fc<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">aws s3 cp .\/local-folder s3:\/\/my-bucket\/remote-folder --recursive<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u2013exclude<\/strong>\u3068<strong>\u2013include<\/strong>\uff1a\u7279\u5b9a\u306e\u30d5\u30a1\u30a4\u30eb\u30d1\u30bf\u30fc\u30f3\u3092\u9664\u5916\/\u542b\u3081\u308b<\/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=\"\"># .git\u30d5\u30a1\u30a4\u30eb\u3092\u9664\u5916\u3057\u3066\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\naws s3 cp .\/local-folder s3:\/\/my-bucket\/ --recursive --exclude \"*.git\/*\"\n\n# jpg\u30d5\u30a1\u30a4\u30eb\u306e\u307f\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\naws s3 cp .\/local-folder s3:\/\/my-bucket\/ --recursive --include \"*.jpg\" --exclude \"*\"<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u2013storage-class<\/strong>\uff1a\u30b9\u30c8\u30ec\u30fc\u30b8\u30af\u30e9\u30b9\u306e\u6307\u5b9a<\/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=\"\"># STANDARD_IA\u30b9\u30c8\u30ec\u30fc\u30b8\u30af\u30e9\u30b9\u3067\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\naws s3 cp large-file.zip s3:\/\/my-bucket\/ --storage-class STANDARD_IA<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-11\">aws s3 sync\u30b3\u30de\u30f3\u30c9\u3067\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u540c\u671f\u3059\u308b<\/h3>\n\n\n\n<p><code>aws s3 sync<\/code>\u306f\u3001\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u9593\u306e\u5dee\u5206\u3092\u691c\u51fa\u3057\u3001\u5fc5\u8981\u306a\u30d5\u30a1\u30a4\u30eb\u306e\u307f\u3092\u8ee2\u9001\u3059\u308b\u52b9\u7387\u7684\u306a\u30b3\u30de\u30f3\u30c9\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-12\">\u57fa\u672c\u7684\u306a\u4f7f\u7528\u65b9\u6cd5<\/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\u30ab\u30eb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092S3\u3068\u540c\u671f\naws s3 sync .\/local-folder s3:\/\/my-bucket\/remote-folder\n\n# S3\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u30ed\u30fc\u30ab\u30eb\u3068\u540c\u671f\naws s3 sync s3:\/\/my-bucket\/remote-folder .\/local-folder\n\n# \u30d0\u30b1\u30c3\u30c8\u9593\u3067\u306e\u540c\u671f\naws s3 sync s3:\/\/source-bucket\/ s3:\/\/dest-bucket\/<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-13\">sync\u30b3\u30de\u30f3\u30c9\u306e\u7279\u5fb4\u7684\u306a\u30aa\u30d7\u30b7\u30e7\u30f3<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u2013delete<\/strong>\uff1a\u8ee2\u9001\u5148\u306b\u5b58\u5728\u3059\u308b\u304c\u8ee2\u9001\u5143\u306b\u306a\u3044\u30d5\u30a1\u30a4\u30eb\u3092\u524a\u9664<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">aws s3 sync .\/local-folder s3:\/\/my-bucket\/remote-folder --delete<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u2013size-only<\/strong>\uff1a\u30b5\u30a4\u30ba\u306e\u5909\u66f4\u306e\u307f\u3092\u691c\u51fa\u3057\u3066\u540c\u671f<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">aws s3 sync .\/local-folder s3:\/\/my-bucket\/remote-folder --size-only<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-14\">\u3088\u304f\u4f7f\u3046\u30aa\u30d7\u30b7\u30e7\u30f3\u3068\u4f7f\u7528\u4f8b<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-15\">1. \u30a2\u30af\u30bb\u30b9\u5236\u5fa1\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=\"\"># \u30d1\u30d6\u30ea\u30c3\u30af\u306a\u8aad\u307f\u53d6\u308a\u6a29\u9650\u3092\u4ed8\u4e0e\naws s3 cp file.txt s3:\/\/my-bucket\/ --acl public-read\n\n# \u7279\u5b9a\u306e\u30e6\u30fc\u30b6\u30fc\u306b\u6a29\u9650\u3092\u4ed8\u4e0e\naws s3 cp file.txt s3:\/\/my-bucket\/ --grants read=emailaddress=user@example.com<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-16\">2. \u30e1\u30bf\u30c7\u30fc\u30bf\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=\"\"># Content-Type\u306e\u6307\u5b9a\naws s3 cp style.css s3:\/\/my-bucket\/ --content-type text\/css\n\n# \u30ab\u30b9\u30bf\u30e0\u30e1\u30bf\u30c7\u30fc\u30bf\u306e\u8ffd\u52a0\naws s3 cp file.txt s3:\/\/my-bucket\/ --metadata '{\"project\":\"website\",\"version\":\"1.0\"}'<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-17\">3. \u6697\u53f7\u5316\u30aa\u30d7\u30b7\u30e7\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=\"\"># SSE-S3\u306b\u3088\u308b\u6697\u53f7\u5316\naws s3 cp secret.txt s3:\/\/my-bucket\/ --sse AES256\n\n# KMS\u306b\u3088\u308b\u6697\u53f7\u5316\naws s3 cp secret.txt s3:\/\/my-bucket\/ --sse aws:kms --sse-kms-key-id your-kms-key-id<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-18\">4. \u8ee2\u9001\u8a2d\u5b9a\u306e\u6700\u9069\u5316<\/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=\"\"># \u30de\u30eb\u30c1\u30d1\u30fc\u30c8\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u306e\u3057\u304d\u3044\u5024\u3092\u8a2d\u5b9a\naws s3 cp large-file.zip s3:\/\/my-bucket\/ --multipart-threshold 64MB\n\n# \u540c\u6642\u8ee2\u9001\u6570\u306e\u8a2d\u5b9a\naws s3 cp folder\/ s3:\/\/my-bucket\/ --recursive --max-concurrent-requests 20<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30b3\u30de\u30f3\u30c9\u3068\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u69d8\u3005\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u306b\u5bfe\u5fdc\u3057\u305fS3\u3078\u306e\u30d5\u30a1\u30a4\u30eb\u8ee2\u9001\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3088\u308a\u9ad8\u5ea6\u306a\u5b9f\u8df5\u7684\u30c6\u30af\u30cb\u30c3\u30af\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-19\">\u5b9f\u8df5\u7684\u306a\u30c6\u30af\u30cb\u30c3\u30af\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-20\">\u5927\u5bb9\u91cf\u30d5\u30a1\u30a4\u30eb\u3092\u52b9\u7387\u7684\u306b\u8ee2\u9001\u3059\u308b\u30de\u30eb\u30c1\u30d1\u30fc\u30c8\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9<\/h3>\n\n\n\n<p>\u30de\u30eb\u30c1\u30d1\u30fc\u30c8\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u306f\u3001\u5927\u5bb9\u91cf\u30d5\u30a1\u30a4\u30eb\u3092\u5206\u5272\u3057\u3066\u4e26\u884c\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\u3053\u3068\u3067\u3001\u8ee2\u9001\u52b9\u7387\u3092\u5411\u4e0a\u3055\u305b\u308b\u624b\u6cd5\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-21\">\u30de\u30eb\u30c1\u30d1\u30fc\u30c8\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\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=\"\"># \u30de\u30eb\u30c1\u30d1\u30fc\u30c8\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u306e\u6700\u5c0f\u30b5\u30a4\u30ba\u3092\u8a2d\u5b9a\naws configure set default.s3.multipart_threshold 64MB\n\n# \u30d1\u30fc\u30c8\u5358\u4f4d\u306e\u30b5\u30a4\u30ba\u3092\u8a2d\u5b9a\naws configure set default.s3.multipart_chunksize 16MB\n\n# \u540c\u6642\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u306e\u6700\u5927\u6570\u3092\u8a2d\u5b9a\naws configure set default.s3.max_concurrent_requests 20<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-22\">\u30b7\u30a7\u30eb\u30b9\u30af\u30ea\u30d7\u30c8\u306b\u3088\u308b\u9ad8\u5ea6\u306a\u30de\u30eb\u30c1\u30d1\u30fc\u30c8\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u5236\u5fa1<\/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=\"\">#!\/bin\/bash\n\nfile_to_upload=\"large_file.zip\"\nbucket_name=\"my-bucket\"\npart_size=\"16MB\"\n\n# \u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba\u3092\u53d6\u5f97\nfile_size=$(stat -f%z \"$file_to_upload\")\n\n# \u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u30b3\u30de\u30f3\u30c9\u306e\u5b9f\u884c\naws s3 cp \"$file_to_upload\" \"s3:\/\/$bucket_name\/\" \\\n    --multipart-threshold 64MB \\\n    --multipart-chunksize $part_size \\\n    --expected-size $file_size<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-23\">\u30ef\u30a4\u30eb\u30c9\u30ab\u30fc\u30c9\u3092\u4f7f\u7528\u3057\u305f\u4e00\u62ec\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9<\/h3>\n\n\n\n<p>\u8907\u6570\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u52b9\u7387\u7684\u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\u305f\u3081\u306e\u30c6\u30af\u30cb\u30c3\u30af\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-24\">\u57fa\u672c\u7684\u306a\u30ef\u30a4\u30eb\u30c9\u30ab\u30fc\u30c9\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=\"\"># \u7279\u5b9a\u306e\u62e1\u5f35\u5b50\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\naws s3 cp . s3:\/\/my-bucket\/ --recursive --exclude \"*\" --include \"*.jpg\"\n\n# \u8907\u6570\u306e\u62e1\u5f35\u5b50\u3092\u6307\u5b9a\u3057\u3066\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\naws s3 cp . s3:\/\/my-bucket\/ --recursive --include \"*.jpg\" --include \"*.png\"\n\n# \u7279\u5b9a\u306e\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u3092\u6301\u3064\u30d5\u30a1\u30a4\u30eb\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\naws s3 cp . s3:\/\/my-bucket\/ --recursive --include \"prefix-*.*\"<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-25\">\u9ad8\u5ea6\u306a\u30d5\u30a1\u30a4\u30eb\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0<\/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=\"\"># \u65e5\u4ed8\u30d1\u30bf\u30fc\u30f3\u3067\u306e\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\naws s3 cp . s3:\/\/my-bucket\/ --recursive \\\n    --exclude \"*\" \\\n    --include \"2024-*\/*.log\"\n\n# \u30b5\u30a4\u30ba\u30d9\u30fc\u30b9\u306e\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\uff08\u30b7\u30a7\u30eb\u30b9\u30af\u30ea\u30d7\u30c8\u4f7f\u7528\uff09\n#!\/bin\/bash\n\nfor file in *; do\n    if [ -f \"$file\" ] &amp;&amp; [ $(stat -f%z \"$file\") -gt 1048576 ]; then\n        aws s3 cp \"$file\" \"s3:\/\/my-bucket\/large-files\/\"\n    fi\ndone<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-26\">\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u6642\u306e\u30d1\u30bf\u30fc\u30f3\u8a2d\u5b9a<\/h3>\n\n\n\n<p>\u52b9\u7387\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u7ba1\u7406\u306e\u305f\u3081\u306e\u30d1\u30bf\u30fc\u30f3\u8a2d\u5b9a\u30c6\u30af\u30cb\u30c3\u30af\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-27\">\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u9020\u306e\u7dad\u6301<\/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\u30ab\u30eb\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u9020\u3092\u7dad\u6301\u3057\u3066\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\naws s3 cp .\/project s3:\/\/my-bucket\/backup\/ \\\n    --recursive \\\n    --metadata \"timestamp=$(date +%Y%m%d)\"\n\n# \u7279\u5b9a\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u9020\u306e\u307f\u3092\u62bd\u51fa\u3057\u3066\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\nfind . -type f -path \"*\/src\/*.js\" -exec \\\n    aws s3 cp {} s3:\/\/my-bucket\/code\/{} \\;<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-28\">\u81ea\u52d5\u6574\u7406\u6a5f\u80fd\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=\"\">#!\/bin\/bash\n\n# \u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u5148\u306e\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u3092\u65e5\u4ed8\u3067\u81ea\u52d5\u751f\u6210\ndate_prefix=$(date +%Y\/%m\/%d)\n\n# \u30d5\u30a1\u30a4\u30eb\u306e\u7a2e\u985e\u3054\u3068\u306b\u7570\u306a\u308b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3078\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\nfor file in *; do\n    if [[ $file =~ \\.jpg$ ]]; then\n        aws s3 cp \"$file\" \"s3:\/\/my-bucket\/images\/$date_prefix\/\"\n    elif [[ $file =~ \\.pdf$ ]]; then\n        aws s3 cp \"$file\" \"s3:\/\/my-bucket\/documents\/$date_prefix\/\"\n    elif [[ $file =~ \\.log$ ]]; then\n        aws s3 cp \"$file\" \"s3:\/\/my-bucket\/logs\/$date_prefix\/\"\n    fi\ndone<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-29\">\u30e1\u30bf\u30c7\u30fc\u30bf\u3068\u6574\u7406\u306e\u9023\u643a<\/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=\"\">#!\/bin\/bash\n\n# \u30d5\u30a1\u30a4\u30eb\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u81ea\u52d5\u8a2d\u5b9a\u3057\u3066\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\nupload_with_metadata() {\n    local file=\"$1\"\n    local content_type=$(file --mime-type -b \"$file\")\n    local modified_date=$(date -r \"$file\" +%Y-%m-%d)\n\n    aws s3 cp \"$file\" \"s3:\/\/my-bucket\/organized\/$modified_date\/\" \\\n        --content-type \"$content_type\" \\\n        --metadata \"upload_date=$(date +%Y-%m-%d)\" \\\n        --metadata \"content_category=$(basename $(dirname \"$file\"))\"\n}\n\n# \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u51e6\u7406\nfind . -type f -exec bash -c 'upload_with_metadata \"$0\"' {} \\;<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u8df5\u7684\u306a\u30c6\u30af\u30cb\u30c3\u30af\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u5927\u898f\u6a21\u306a\u30d5\u30a1\u30a4\u30eb\u8ee2\u9001\u3084\u8907\u96d1\u306a\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u8981\u4ef6\u306b\u3082\u52b9\u7387\u7684\u306b\u5bfe\u5fdc\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u64cd\u4f5c\u4e2d\u306b\u767a\u751f\u3059\u308b\u53ef\u80fd\u6027\u306e\u3042\u308b\u30a8\u30e9\u30fc\u3068\u305d\u306e\u5bfe\u51e6\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-30\">\u30a8\u30e9\u30fc\u5bfe\u51e6\u3068\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-31\">\u4e00\u822c\u7684\u306a\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3068\u89e3\u6c7a\u65b9\u6cd5<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-32\">1. \u8a8d\u8a3c\u95a2\u9023\u306e\u30a8\u30e9\u30fc<\/h4>\n\n\n\n<p><strong>\u30a8\u30e9\u30fc<\/strong>: <code>Unable to locate credentials<\/code><\/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=\"\">Unable to locate credentials. You can configure credentials by running \"aws configure\".<\/pre>\n\n\n\n<p><strong>\u89e3\u6c7a\u65b9\u6cd5<\/strong>:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>AWS\u8a8d\u8a3c\u60c5\u5831\u306e\u8a2d\u5b9a\u3092\u78ba\u8a8d<\/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=\"\"># \u8a8d\u8a3c\u60c5\u5831\u306e\u8a2d\u5b9a\naws configure\n\n# \u73fe\u5728\u306e\u8a2d\u5b9a\u3092\u78ba\u8a8d\naws configure list<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u74b0\u5883\u5909\u6570\u3067\u306e\u8a2d\u5b9a<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">export AWS_ACCESS_KEY_ID=\"your_access_key\"\nexport AWS_SECRET_ACCESS_KEY=\"your_secret_key\"\nexport AWS_DEFAULT_REGION=\"ap-northeast-1\"<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-33\">2. \u30a2\u30af\u30bb\u30b9\u6a29\u9650\u306e\u30a8\u30e9\u30fc<\/h4>\n\n\n\n<p><strong>\u30a8\u30e9\u30fc<\/strong>: <code>Access Denied<\/code><\/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=\"\">An error occurred (AccessDenied) when calling the PutObject operation: Access Denied<\/pre>\n\n\n\n<p><strong>\u89e3\u6c7a\u65b9\u6cd5<\/strong>:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>IAM\u30dd\u30ea\u30b7\u30fc\u306e\u78ba\u8a8d\u3068\u4fee\u6b63<\/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=\"\">{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": [\n                \"s3:PutObject\",\n                \"s3:GetObject\",\n                \"s3:ListBucket\"\n            ],\n            \"Resource\": [\n                \"arn:aws:s3:::bucket-name\/*\",\n                \"arn:aws:s3:::bucket-name\"\n            ]\n        }\n    ]\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30d0\u30b1\u30c3\u30c8\u30dd\u30ea\u30b7\u30fc\u306e\u78ba\u8a8d<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30d0\u30b1\u30c3\u30c8\u30dd\u30ea\u30b7\u30fc\u306e\u78ba\u8a8d\naws s3api get-bucket-policy --bucket bucket-name\n\n# \u30d0\u30b1\u30c3\u30c8\u306eACL\u78ba\u8a8d\naws s3api get-bucket-acl --bucket bucket-name<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-34\">3. \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u95a2\u9023\u306e\u30a8\u30e9\u30fc<\/h4>\n\n\n\n<p><strong>\u30a8\u30e9\u30fc<\/strong>: <code>Connection timed out<\/code><\/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=\"\">Connection timed out: https:\/\/s3.ap-northeast-1.amazonaws.com\/<\/pre>\n\n\n\n<p><strong>\u89e3\u6c7a\u624b\u9806<\/strong>:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u63a5\u7d9a\u306e\u78ba\u8a8d<\/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=\"\"># \u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u3078\u306e\u63a5\u7d9a\u78ba\u8a8d\ncurl -v https:\/\/s3.ap-northeast-1.amazonaws.com\/\n\n# \u30d7\u30ed\u30ad\u30b7\u8a2d\u5b9a\u306e\u78ba\u8a8d\u3068\u8a2d\u5b9a\nexport HTTP_PROXY=\"http:\/\/proxy.example.com:8080\"\nexport HTTPS_PROXY=\"http:\/\/proxy.example.com:8080\"<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30ea\u30fc\u30b8\u30e7\u30f3\u8a2d\u5b9a\u306e\u78ba\u8a8d<\/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=\"\"># \u30ea\u30fc\u30b8\u30e7\u30f3\u306e\u78ba\u8a8d\naws configure get region\n\n# \u30ea\u30fc\u30b8\u30e7\u30f3\u306e\u5909\u66f4\naws configure set region ap-northeast-1<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-35\">\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u3068IAM\u30ed\u30fc\u30eb\u306e\u8a2d\u5b9a\u78ba\u8a8d<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-36\">1. IAM\u30ed\u30fc\u30eb\u306e\u78ba\u8a8d\u624b\u9806<\/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=\"\"># \u73fe\u5728\u306eIAM\u30e6\u30fc\u30b6\u30fc\/\u30ed\u30fc\u30eb\u306e\u78ba\u8a8d\naws sts get-caller-identity\n\n# IAM\u30ed\u30fc\u30eb\u306e\u8a73\u7d30\u78ba\u8a8d\naws iam get-role --role-name your-role-name\n\n# \u30ed\u30fc\u30eb\u30dd\u30ea\u30b7\u30fc\u306e\u78ba\u8a8d\naws iam list-role-policies --role-name your-role-name\naws iam list-attached-role-policies --role-name your-role-name<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-37\">2. S3\u30d0\u30b1\u30c3\u30c8\u306e\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u78ba\u8a8d<\/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=\"\"># \u30d0\u30b1\u30c3\u30c8\u306e\u30d1\u30d6\u30ea\u30c3\u30af\u30a2\u30af\u30bb\u30b9\u8a2d\u5b9a\u78ba\u8a8d\naws s3api get-public-access-block --bucket bucket-name\n\n# \u30d0\u30b1\u30c3\u30c8\u306e\u6697\u53f7\u5316\u8a2d\u5b9a\u78ba\u8a8d\naws s3api get-bucket-encryption --bucket bucket-name\n\n# \u30d0\u30b1\u30c3\u30c8\u306e\u30d0\u30fc\u30b8\u30e7\u30cb\u30f3\u30b0\u78ba\u8a8d\naws s3api get-bucket-versioning --bucket bucket-name<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-38\">3. \u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u7528\u306e\u30c7\u30d0\u30c3\u30b0\u30e2\u30fc\u30c9<\/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=\"\"># \u30c7\u30d0\u30c3\u30b0\u30e2\u30fc\u30c9\u3067\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\naws s3 cp file.txt s3:\/\/bucket-name\/ --debug\n\n# AWS CLI\u306e\u30ed\u30b0\u30ec\u30d9\u30eb\u8a2d\u5b9a\naws configure set cli_history enabled\naws configure set cli_follow_urlparam true<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-39\">4. \u4e00\u822c\u7684\u306a\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u30b9\u30af\u30ea\u30d7\u30c8<\/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=\"\">#!\/bin\/bash\n\ncheck_s3_access() {\n    local bucket_name=\"$1\"\n\n    echo \"=== S3\u30a2\u30af\u30bb\u30b9\u8a3a\u65ad\u958b\u59cb ===\"\n\n    # \u8a8d\u8a3c\u60c5\u5831\u306e\u78ba\u8a8d\n    echo \"1. \u8a8d\u8a3c\u60c5\u5831\u306e\u78ba\u8a8d\"\n    aws sts get-caller-identity\n\n    # \u30d0\u30b1\u30c3\u30c8\u306e\u5b58\u5728\u78ba\u8a8d\n    echo \"2. \u30d0\u30b1\u30c3\u30c8\u306e\u5b58\u5728\u78ba\u8a8d\"\n    aws s3api head-bucket --bucket \"$bucket_name\" 2&gt;&amp;1\n\n    # \u30d0\u30b1\u30c3\u30c8\u306e\u4e00\u89a7\u8868\u793a\u6a29\u9650\u78ba\u8a8d\n    echo \"3. \u30d0\u30b1\u30c3\u30c8\u4e00\u89a7\u8868\u793a\u6a29\u9650\u306e\u78ba\u8a8d\"\n    aws s3 ls \"s3:\/\/$bucket_name\" 2&gt;&amp;1\n\n    # \u30d0\u30b1\u30c3\u30c8\u30dd\u30ea\u30b7\u30fc\u306e\u78ba\u8a8d\n    echo \"4. \u30d0\u30b1\u30c3\u30c8\u30dd\u30ea\u30b7\u30fc\u306e\u78ba\u8a8d\"\n    aws s3api get-bucket-policy --bucket \"$bucket_name\" 2&gt;&amp;1\n\n    echo \"=== \u8a3a\u65ad\u5b8c\u4e86 ===\"\n}\n\n# \u4f7f\u7528\u4f8b\ncheck_s3_access \"your-bucket-name\"<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u624b\u6cd5\u3092\u7406\u89e3\u3059\u308b\u3053\u3068\u3067\u3001AWS CLI S3\u64cd\u4f5c\u6642\u306e\u554f\u984c\u3092\u52b9\u7387\u7684\u306b\u89e3\u6c7a\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-40\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-41\">\u6697\u53f7\u5316\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u9069\u5207\u306a\u9078\u629e<\/h3>\n\n\n\n<p>S3\u3067\u306e\u30c7\u30fc\u30bf\u6697\u53f7\u5316\u306b\u306f\u3001\u30b5\u30fc\u30d0\u30fc\u30b5\u30a4\u30c9\u6697\u53f7\u5316\uff08SSE\uff09\u306e3\u3064\u306e\u4e3b\u8981\u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-42\">1. AWS S3\u7ba1\u7406\u30ad\u30fc\uff08SSE-S3\uff09\u306e\u4f7f\u7528<\/h4>\n\n\n\n<p>\u6700\u3082\u7c21\u5358\u306b\u5b9f\u88c5\u3067\u304d\u308b\u6697\u53f7\u5316\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># SSE-S3\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\naws s3 cp sensitive-file.txt s3:\/\/my-bucket\/ --sse AES256\n\n# \u30d0\u30b1\u30c3\u30c8\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u6697\u53f7\u5316\u8a2d\u5b9a\naws s3api put-bucket-encryption \\\n    --bucket my-bucket \\\n    --server-side-encryption-configuration '{\n        \"Rules\": [\n            {\n                \"ApplyServerSideEncryptionByDefault\": {\n                    \"SSEAlgorithm\": \"AES256\"\n                }\n            }\n        ]\n    }'<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-43\">2. AWS KMS\u7ba1\u7406\u30ad\u30fc\uff08SSE-KMS\uff09\u306e\u4f7f\u7528<\/h4>\n\n\n\n<p>\u3088\u308a\u9ad8\u5ea6\u306a\u9375\u7ba1\u7406\u3068\u76e3\u67fb\u6a5f\u80fd\u304c\u5fc5\u8981\u306a\u5834\u5408\u306b\u9069\u3057\u3066\u3044\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=\"\"># KMS\u30ad\u30fc\u3092\u4f7f\u7528\u3057\u305f\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\naws s3 cp confidential.pdf s3:\/\/my-bucket\/ \\\n    --sse aws:kms \\\n    --sse-kms-key-id alias\/my-kms-key\n\n# \u30ab\u30b9\u30bf\u30e0KMS\u30ad\u30fc\u306e\u4f5c\u6210\naws kms create-key --description \"S3 Encryption Key\"\n\n# \u30ad\u30fc\u30a8\u30a4\u30ea\u30a2\u30b9\u306e\u8a2d\u5b9a\naws kms create-alias \\\n    --alias-name alias\/s3-key \\\n    --target-key-id &lt;key-id&gt;<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-44\">3. \u30ab\u30b9\u30bf\u30de\u30fc\u63d0\u4f9b\u30ad\u30fc\uff08SSE-C\uff09\u306e\u4f7f\u7528<\/h4>\n\n\n\n<p>\u6700\u3082\u9ad8\u5ea6\u306a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u304c\u5fc5\u8981\u306a\u5834\u5408\u306b\u4f7f\u7528\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=\"\"># \u30ab\u30b9\u30bf\u30de\u30fc\u30ad\u30fc\u3092\u4f7f\u7528\u3057\u305f\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\naws s3 cp secret.txt s3:\/\/my-bucket\/ \\\n    --sse-c AES256 \\\n    --sse-c-key \"$(openssl rand -base64 32)\" \\\n    --sse-c-key-md5 \"$(openssl rand -base64 32 | openssl md5 -binary | base64)\"<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-45\">\u30a2\u30af\u30bb\u30b9\u5236\u5fa1\u3068\u653f\u7b56\u8a2d\u5b9a\u306e\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-46\">1. \u6700\u5c0f\u6a29\u9650\u306e\u539f\u5247\u306b\u57fa\u3065\u304fIAM\u30dd\u30ea\u30b7\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=\"\">{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Sid\": \"MinimumS3Permissions\",\n            \"Effect\": \"Allow\",\n            \"Action\": [\n                \"s3:PutObject\",\n                \"s3:GetObject\",\n                \"s3:ListBucket\"\n            ],\n            \"Resource\": [\n                \"arn:aws:s3:::my-bucket\/uploads\/*\"\n            ],\n            \"Condition\": {\n                \"StringEquals\": {\n                    \"s3:x-amz-server-side-encryption\": \"AES256\"\n                }\n            }\n        }\n    ]\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-47\">2. \u30d0\u30b1\u30c3\u30c8\u30dd\u30ea\u30b7\u30fc\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/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=\"\">{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Sid\": \"EnforceTLS\",\n            \"Effect\": \"Deny\",\n            \"Principal\": \"*\",\n            \"Action\": \"s3:*\",\n            \"Resource\": [\n                \"arn:aws:s3:::my-bucket\",\n                \"arn:aws:s3:::my-bucket\/*\"\n            ],\n            \"Condition\": {\n                \"Bool\": {\n                    \"aws:SecureTransport\": \"false\"\n                }\n            }\n        },\n        {\n            \"Sid\": \"EnforceEncryption\",\n            \"Effect\": \"Deny\",\n            \"Principal\": \"*\",\n            \"Action\": \"s3:PutObject\",\n            \"Resource\": \"arn:aws:s3:::my-bucket\/*\",\n            \"Condition\": {\n                \"StringNotEquals\": {\n                    \"s3:x-amz-server-side-encryption\": \"AES256\"\n                }\n            }\n        }\n    ]\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-48\">3. \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306e\u5b9f\u88c5\u30b9\u30af\u30ea\u30d7\u30c8<\/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=\"\">#!\/bin\/bash\n\nsecure_bucket() {\n    local bucket_name=\"$1\"\n\n    # \u30d1\u30d6\u30ea\u30c3\u30af\u30a2\u30af\u30bb\u30b9\u306e\u30d6\u30ed\u30c3\u30af\n    aws s3api put-public-access-block \\\n        --bucket \"$bucket_name\" \\\n        --public-access-block-configuration '{\n            \"BlockPublicAcls\": true,\n            \"IgnorePublicAcls\": true,\n            \"BlockPublicPolicy\": true,\n            \"RestrictPublicBuckets\": true\n        }'\n\n    # \u30d0\u30fc\u30b8\u30e7\u30cb\u30f3\u30b0\u306e\u6709\u52b9\u5316\n    aws s3api put-bucket-versioning \\\n        --bucket \"$bucket_name\" \\\n        --versioning-configuration Status=Enabled\n\n    # \u30c7\u30d5\u30a9\u30eb\u30c8\u6697\u53f7\u5316\u306e\u8a2d\u5b9a\n    aws s3api put-bucket-encryption \\\n        --bucket \"$bucket_name\" \\\n        --server-side-encryption-configuration '{\n            \"Rules\": [\n                {\n                    \"ApplyServerSideEncryptionByDefault\": {\n                        \"SSEAlgorithm\": \"AES256\"\n                    }\n                }\n            ]\n        }'\n\n    # \u30bb\u30ad\u30e5\u30a2\u306a\u8ee2\u9001\u306e\u5f37\u5236\n    aws s3api put-bucket-policy \\\n        --bucket \"$bucket_name\" \\\n        --policy '{\n            \"Version\": \"2012-10-17\",\n            \"Statement\": [\n                {\n                    \"Sid\": \"EnforceTLSOnly\",\n                    \"Effect\": \"Deny\",\n                    \"Principal\": \"*\",\n                    \"Action\": \"s3:*\",\n                    \"Resource\": [\n                        \"arn:aws:s3:::'\"$bucket_name\"'\",\n                        \"arn:aws:s3:::'\"$bucket_name\"'\/*\"\n                    ],\n                    \"Condition\": {\n                        \"Bool\": {\n                            \"aws:SecureTransport\": \"false\"\n                        }\n                    }\n                }\n            ]\n        }'\n}\n\n# \u30d0\u30b1\u30c3\u30c8\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8a2d\u5b9a\u3092\u78ba\u8a8d\u3059\u308b\u30b9\u30af\u30ea\u30d7\u30c8\ncheck_bucket_security() {\n    local bucket_name=\"$1\"\n\n    echo \"=== \u30d0\u30b1\u30c3\u30c8\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8a3a\u65ad\u958b\u59cb ===\"\n\n    # \u30d1\u30d6\u30ea\u30c3\u30af\u30a2\u30af\u30bb\u30b9\u8a2d\u5b9a\u306e\u78ba\u8a8d\n    echo \"1. \u30d1\u30d6\u30ea\u30c3\u30af\u30a2\u30af\u30bb\u30b9\u8a2d\u5b9a:\"\n    aws s3api get-public-access-block --bucket \"$bucket_name\"\n\n    # \u6697\u53f7\u5316\u8a2d\u5b9a\u306e\u78ba\u8a8d\n    echo \"2. \u6697\u53f7\u5316\u8a2d\u5b9a:\"\n    aws s3api get-bucket-encryption --bucket \"$bucket_name\"\n\n    # \u30d0\u30fc\u30b8\u30e7\u30cb\u30f3\u30b0\u8a2d\u5b9a\u306e\u78ba\u8a8d\n    echo \"3. \u30d0\u30fc\u30b8\u30e7\u30cb\u30f3\u30b0\u8a2d\u5b9a:\"\n    aws s3api get-bucket-versioning --bucket \"$bucket_name\"\n\n    # \u30d0\u30b1\u30c3\u30c8\u30dd\u30ea\u30b7\u30fc\u306e\u78ba\u8a8d\n    echo \"4. \u30d0\u30b1\u30c3\u30c8\u30dd\u30ea\u30b7\u30fc:\"\n    aws s3api get-bucket-policy --bucket \"$bucket_name\"\n\n    echo \"=== \u8a3a\u65ad\u5b8c\u4e86 ===\"\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u9069\u5207\u306b\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3067\u3001S3\u3067\u306e\u30c7\u30fc\u30bf\u4fdd\u8b77\u3092\u78ba\u5b9f\u306a\u3082\u306e\u306b\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u81ea\u52d5\u5316\u3068CI\/CD\u7d71\u5408\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-49\">\u81ea\u52d5\u5316\u3068CI\/CD\u7d71\u5408<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-50\">\u30b7\u30a7\u30eb\u30b9\u30af\u30ea\u30d7\u30c8\u3067\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3092\u81ea\u52d5\u5316\u3059\u308b<\/h3>\n\n\n\n<p>\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3084\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u306a\u3069\u3001\u5b9a\u671f\u7684\u306aS3\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u4f5c\u696d\u3092\u81ea\u52d5\u5316\u3059\u308b\u65b9\u6cd5\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-51\">\u57fa\u672c\u7684\u306a\u81ea\u52d5\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u30b9\u30af\u30ea\u30d7\u30c8<\/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=\"\">#!\/bin\/bash\n\n# \u8a2d\u5b9a\u5909\u6570\nSOURCE_DIR=\"\/path\/to\/source\"\nBUCKET_NAME=\"my-bucket\"\nLOG_FILE=\"\/var\/log\/s3-upload.log\"\n\n# \u30ed\u30b0\u51fa\u529b\u95a2\u6570\nlog_message() {\n    echo \"[$(date '+%Y-%m-%d %H:%M:%S')] $1\" | tee -a \"$LOG_FILE\"\n}\n\n# \u30e1\u30a4\u30f3\u306e\u51e6\u7406\u95a2\u6570\nupload_to_s3() {\n    local source_dir=\"$1\"\n    local bucket=\"$2\"\n\n    # \u524d\u51e6\u7406\uff1a\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5b58\u5728\u78ba\u8a8d\n    if [ ! -d \"$source_dir\" ]; then\n        log_message \"\u30a8\u30e9\u30fc: \u30bd\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304c\u5b58\u5728\u3057\u307e\u305b\u3093\"\n        return 1\n    }\n\n    # S3\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u5b9f\u884c\n    log_message \"\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u958b\u59cb: $source_dir \u2192 s3:\/\/$bucket\/\"\n\n    aws s3 sync \"$source_dir\" \"s3:\/\/$bucket\/\" \\\n        --delete \\\n        --exclude \"*.tmp\" \\\n        --metadata \"upload-date=$(date +%Y-%m-%d)\" \\\n        2&gt;&gt; \"$LOG_FILE\"\n\n    if [ $? -eq 0 ]; then\n        log_message \"\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u6210\u529f\"\n        return 0\n    else\n        log_message \"\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u5931\u6557\"\n        return 1\n    fi\n}\n\n# \u30b9\u30af\u30ea\u30d7\u30c8\u5b9f\u884c\nupload_to_s3 \"$SOURCE_DIR\" \"$BUCKET_NAME\"<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-52\">\u9ad8\u5ea6\u306a\u81ea\u52d5\u5316\u30b9\u30af\u30ea\u30d7\u30c8<\/h4>\n\n\n\n<p>\u3088\u308a\u5b9f\u8df5\u7684\u306a\u6a5f\u80fd\u3092\u5099\u3048\u305f\u30b9\u30af\u30ea\u30d7\u30c8\u306e\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=\"\">#!\/bin\/bash\n\n# \u8a2d\u5b9a\nCONFIG_FILE=\"s3_upload_config.json\"\nMAX_RETRIES=3\nSLEEP_TIME=5\n\n# \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u8fbc\u307f\nif [ -f \"$CONFIG_FILE\" ]; then\n    BUCKET_NAME=$(jq -r '.bucket_name' \"$CONFIG_FILE\")\n    SOURCE_DIR=$(jq -r '.source_directory' \"$CONFIG_FILE\")\n    EXCLUDE_PATTERNS=$(jq -r '.exclude_patterns[]' \"$CONFIG_FILE\")\nelse\n    echo \"\u30a8\u30e9\u30fc: \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\"\n    exit 1\nfi\n\n# \u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u95a2\u6570\nupload_with_retry() {\n    local file=\"$1\"\n    local bucket_path=\"$2\"\n    local retry_count=0\n\n    while [ $retry_count -lt $MAX_RETRIES ]; do\n        if aws s3 cp \"$file\" \"s3:\/\/$BUCKET_NAME\/$bucket_path\" \\\n            --metadata \"checksum=$(md5sum \"$file\" | cut -d' ' -f1)\"; then\n            echo \"\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u6210\u529f: $file\"\n            return 0\n        else\n            retry_count=$((retry_count + 1))\n            echo \"\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u5931\u6557: \u518d\u8a66\u884c $retry_count\/$MAX_RETRIES\"\n            sleep $SLEEP_TIME\n        fi\n    done\n\n    return 1\n}\n\n# \u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u95a2\u6570\nprocess_files() {\n    find \"$SOURCE_DIR\" -type f | while read -r file; do\n        # \u9664\u5916\u30d1\u30bf\u30fc\u30f3\u306e\u30c1\u30a7\u30c3\u30af\n        local should_skip=false\n        for pattern in $EXCLUDE_PATTERNS; do\n            if [[ \"$file\" == *\"$pattern\"* ]]; then\n                should_skip=true\n                break\n            fi\n        done\n\n        if [ \"$should_skip\" = false ]; then\n            # \u76f8\u5bfe\u30d1\u30b9\u306e\u8a08\u7b97\n            local relative_path=\"${file#$SOURCE_DIR\/}\"\n            upload_with_retry \"$file\" \"$relative_path\"\n        fi\n    done\n}\n\n# \u30e1\u30a4\u30f3\u51e6\u7406\nmain() {\n    echo \"\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u51e6\u7406\u958b\u59cb: $(date)\"\n\n    # AWS\u8a8d\u8a3c\u78ba\u8a8d\n    if ! aws sts get-caller-identity &amp;&gt;\/dev\/null; then\n        echo \"\u30a8\u30e9\u30fc: AWS\u8a8d\u8a3c\u60c5\u5831\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\"\n        exit 1\n    }\n\n    # \u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u5b9f\u884c\n    process_files\n\n    echo \"\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u51e6\u7406\u5b8c\u4e86: $(date)\"\n}\n\nmain<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-53\">GitHub Actions\u3067\u306eS3\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u8a2d\u5b9a\u4f8b<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-54\">\u57fa\u672c\u7684\u306a\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\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=\"\">name: S3 Deploy\n\non:\n  push:\n    branches: [ main ]\n  pull_request:\n    branches: [ main ]\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: \u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u30c1\u30a7\u30c3\u30af\u30a2\u30a6\u30c8\n        uses: actions\/checkout@v2\n\n      - name: AWS\u8a8d\u8a3c\u60c5\u5831\u306e\u8a2d\u5b9a\n        uses: aws-actions\/configure-aws-credentials@v1\n        with:\n          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}\n          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}\n          aws-region: ap-northeast-1\n\n      - name: \u30d3\u30eb\u30c9\n        run: |\n          npm install\n          npm run build\n\n      - name: S3\u3078\u306e\u30c7\u30d7\u30ed\u30a4\n        run: |\n          aws s3 sync .\/dist s3:\/\/${{ secrets.AWS_S3_BUCKET }}\/ \\\n            --delete \\\n            --metadata \"github-sha=${{ github.sha }}\"<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-55\">\u74b0\u5883\u5225\u30c7\u30d7\u30ed\u30a4\u30ef\u30fc\u30af\u30d5\u30ed\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=\"\">name: Multi-Environment S3 Deploy\n\non:\n  push:\n    branches:\n      - develop\n      - staging\n      - main\n  workflow_dispatch:\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions\/checkout@v2\n\n      - name: \u74b0\u5883\u5909\u6570\u306e\u8a2d\u5b9a\n        id: env\n        run: |\n          if [[ ${{ github.ref }} == 'refs\/heads\/main' ]]; then\n            echo \"::set-output name=bucket::${{ secrets.PROD_S3_BUCKET }}\"\n            echo \"::set-output name=environment::production\"\n          elif [[ ${{ github.ref }} == 'refs\/heads\/staging' ]]; then\n            echo \"::set-output name=bucket::${{ secrets.STAGING_S3_BUCKET }}\"\n            echo \"::set-output name=environment::staging\"\n          else\n            echo \"::set-output name=bucket::${{ secrets.DEV_S3_BUCKET }}\"\n            echo \"::set-output name=environment::development\"\n          fi\n\n      - name: AWS\u8a8d\u8a3c\u60c5\u5831\u306e\u8a2d\u5b9a\n        uses: aws-actions\/configure-aws-credentials@v1\n        with:\n          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}\n          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}\n          aws-region: ap-northeast-1\n\n      - name: \u30d3\u30eb\u30c9\u3068\u30c7\u30d7\u30ed\u30a4\n        env:\n          BUCKET_NAME: ${{ steps.env.outputs.bucket }}\n          ENVIRONMENT: ${{ steps.env.outputs.environment }}\n        run: |\n          # \u30d3\u30eb\u30c9\u51e6\u7406\n          npm install\n          npm run build\n\n          # \u30c7\u30d7\u30ed\u30a4\u51e6\u7406\n          aws s3 sync .\/dist s3:\/\/$BUCKET_NAME\/ \\\n            --delete \\\n            --metadata \"{\\\"environment\\\":\\\"$ENVIRONMENT\\\",\\\"github-sha\\\":\\\"${{ github.sha }}\\\"}\"\n\n          # CloudFront\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u30af\u30ea\u30a2\uff08\u5fc5\u8981\u306a\u5834\u5408\uff09\n          if [ \"$ENVIRONMENT\" = \"production\" ]; then\n            aws cloudfront create-invalidation \\\n              --distribution-id ${{ secrets.CLOUDFRONT_DIST_ID }} \\\n              --paths \"\/*\"\n          fi<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u3068\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u8a2d\u5b9a\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001S3\u3078\u306e\u30d5\u30a1\u30a4\u30eb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3092\u52b9\u7387\u7684\u306b\u81ea\u52d5\u5316\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u3068\u30b3\u30b9\u30c8\u7ba1\u7406\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-56\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u3068\u30b3\u30b9\u30c8\u7ba1\u7406<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-57\">\u8ee2\u9001\u901f\u5ea6\u3092\u5411\u4e0a\u3055\u305b\u308b\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-58\">1. \u30de\u30eb\u30c1\u30d1\u30fc\u30c8\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u306e\u6700\u9069\u5316<\/h4>\n\n\n\n<p>AWS CLI\u306e\u8ee2\u9001\u8a2d\u5b9a\u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3059\u308b\u3053\u3068\u3067\u3001\u5927\u5bb9\u91cf\u30d5\u30a1\u30a4\u30eb\u306e\u8ee2\u9001\u52b9\u7387\u3092\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\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=\"\"># ~\/.aws\/config\u306b\u4ee5\u4e0b\u306e\u8a2d\u5b9a\u3092\u8ffd\u52a0<\/pre>\n\n\n[default]\n\n\n\n<p>s3 = multipart_threshold = 64MB # \u30de\u30eb\u30c1\u30d1\u30fc\u30c8\u8ee2\u9001\u3092\u958b\u59cb\u3059\u308b\u30b5\u30a4\u30ba multipart_chunksize = 16MB # \u5404\u30d1\u30fc\u30c8\u306e\u30b5\u30a4\u30ba max_concurrent_requests = 20 # \u540c\u6642\u30ea\u30af\u30a8\u30b9\u30c8\u6570 max_queue_size = 10000 # \u8ee2\u9001\u30ad\u30e5\u30fc\u306e\u30b5\u30a4\u30ba max_bandwidth = 50MB\/s # \u5e2f\u57df\u5236\u9650\uff08\u5fc5\u8981\u306a\u5834\u5408\uff09<\/p>\n\n\n\n<p>\u5b9f\u88c5\u4f8b\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=\"\">#!\/bin\/bash\n\n# \u5927\u5bb9\u91cf\u30d5\u30a1\u30a4\u30eb\u8ee2\u9001\u306e\u6700\u9069\u5316\u95a2\u6570\noptimize_large_file_transfer() {\n    local file=\"$1\"\n    local bucket=\"$2\"\n    local file_size=$(stat -f%z \"$file\")\n\n    # \u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba\u306b\u5fdc\u3058\u305f\u6700\u9069\u306a\u30c1\u30e3\u30f3\u30af\u30b5\u30a4\u30ba\u3092\u8a08\u7b97\n    local chunk_size=16\n    if [ $file_size -gt 1073741824 ]; then  # 1GB\u8d85\n        chunk_size=64\n    fi\n\n    aws s3 cp \"$file\" \"s3:\/\/$bucket\/\" \\\n        --multipart-threshold 64MB \\\n        --multipart-chunksize ${chunk_size}MB \\\n        --expected-size $file_size\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-59\">2. \u4e26\u5217\u51e6\u7406\u306e\u6d3b\u7528<\/h4>\n\n\n\n<p>\u8907\u6570\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u52b9\u7387\u7684\u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\u305f\u3081\u306e\u4e26\u5217\u51e6\u7406\u5b9f\u88c5\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=\"\">#!\/bin\/bash\n\n# \u4e26\u5217\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u51e6\u7406\nparallel_upload() {\n    local source_dir=\"$1\"\n    local bucket=\"$2\"\n    local max_procs=10\n\n    # find\u306e\u7d50\u679c\u3092\u30d7\u30ed\u30bb\u30b9\u7f6e\u63db\u3067xargs\u306b\u6e21\u3059\n    find \"$source_dir\" -type f -print0 | \\\n    xargs -0 -P $max_procs -I {} \\\n    bash -c 'aws s3 cp \"{}\" \"s3:\/\/'\"$bucket\"'\/${1#'\"$source_dir\"'\/}\"' _\n}\n\n# \u4f7f\u7528\u4f8b\nparallel_upload \"\/local\/path\" \"my-bucket\"<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-60\">3. \u8ee2\u9001\u901f\u5ea6\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u30b9\u30af\u30ea\u30d7\u30c8<\/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=\"\">#!\/bin\/bash\n\n# \u8ee2\u9001\u901f\u5ea6\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\nmonitor_transfer_speed() {\n    local start_time=$(date +%s)\n    local start_size=$(aws s3 ls s3:\/\/$1 --recursive | awk '{sum+=$3} END{print sum}')\n\n    while true; do\n        sleep 10\n        local current_time=$(date +%s)\n        local current_size=$(aws s3 ls s3:\/\/$1 --recursive | awk '{sum+=$3} END{print sum}')\n        local elapsed=$((current_time - start_time))\n        local transferred=$((current_size - start_size))\n        local speed=$((transferred \/ elapsed))\n\n        echo \"\u8ee2\u9001\u901f\u5ea6: $((speed\/1024\/1024)) MB\/s\"\n    done\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-61\">\u30b9\u30c8\u30ec\u30fc\u30b8\u30af\u30e9\u30b9\u306e\u9078\u629e\u3068\u30b3\u30b9\u30c8\u524a\u6e1b\u306e\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-62\">1. \u30e9\u30a4\u30d5\u30b5\u30a4\u30af\u30eb\u30eb\u30fc\u30eb\u306e\u8a2d\u5b9a<\/h4>\n\n\n\n<p>\u30b3\u30b9\u30c8\u52b9\u7387\u306e\u826f\u3044\u30b9\u30c8\u30ec\u30fc\u30b8\u7ba1\u7406\u306e\u305f\u3081\u306e\u8a2d\u5b9a\u4f8b\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=\"\"># \u30e9\u30a4\u30d5\u30b5\u30a4\u30af\u30eb\u30eb\u30fc\u30eb\u306e\u4f5c\u6210\naws s3api put-bucket-lifecycle-configuration \\\n    --bucket my-bucket \\\n    --lifecycle-configuration '{\n        \"Rules\": [\n            {\n                \"ID\": \"MoveToIA\",\n                \"Status\": \"Enabled\",\n                \"Filter\": {\n                    \"Prefix\": \"data\/\"\n                },\n                \"Transitions\": [\n                    {\n                        \"Days\": 30,\n                        \"StorageClass\": \"STANDARD_IA\"\n                    },\n                    {\n                        \"Days\": 90,\n                        \"StorageClass\": \"GLACIER\"\n                    }\n                ]\n            }\n        ]\n    }'<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-63\">2. \u30a4\u30f3\u30c6\u30ea\u30b8\u30a7\u30f3\u30c8\u968e\u5c64\u5316\u306e\u5b9f\u88c5<\/h4>\n\n\n\n<p>\u30a2\u30af\u30bb\u30b9\u30d1\u30bf\u30fc\u30f3\u306b\u57fa\u3065\u304f\u30b9\u30c8\u30ec\u30fc\u30b8\u30af\u30e9\u30b9\u306e\u81ea\u52d5\u9078\u629e\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=\"\">#!\/bin\/bash\n\n# \u30a2\u30af\u30bb\u30b9\u983b\u5ea6\u306b\u57fa\u3065\u304f\u30b9\u30c8\u30ec\u30fc\u30b8\u30af\u30e9\u30b9\u6700\u9069\u5316\noptimize_storage_class() {\n    local bucket=\"$1\"\n    local prefix=\"$2\"\n\n    # \u30a2\u30af\u30bb\u30b9\u30ed\u30b0\u306e\u5206\u6790\n    aws s3api get-bucket-logging --bucket \"$bucket\"\n\n    # \u30a2\u30af\u30bb\u30b9\u983b\u5ea6\u306e\u4f4e\u3044\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u7279\u5b9a\n    aws s3api list-objects-v2 --bucket \"$bucket\" --prefix \"$prefix\" \\\n        --query 'Contents[?LastModified&lt;=`2024-01-28`].[Key]' --output text | \\\n    while read -r key; do\n        # IA\u5c64\u3078\u306e\u79fb\u884c\n        aws s3api copy-object \\\n            --bucket \"$bucket\" \\\n            --copy-source \"$bucket\/$key\" \\\n            --key \"$key\" \\\n            --storage-class STANDARD_IA\n    done\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-64\">3. \u30b3\u30b9\u30c8\u5206\u6790\u3068\u30ec\u30dd\u30fc\u30c8\u751f\u6210<\/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=\"\">#!\/bin\/bash\n\n# S3\u4f7f\u7528\u91cf\u3068\u30b3\u30b9\u30c8\u306e\u5206\u6790\nanalyze_s3_costs() {\n    local bucket=\"$1\"\n\n    echo \"=== S3 \u30b3\u30b9\u30c8\u5206\u6790\u30ec\u30dd\u30fc\u30c8 ===\"\n\n    # \u30d0\u30b1\u30c3\u30c8\u30b5\u30a4\u30ba\u306e\u53d6\u5f97\n    echo \"\u7dcf\u5bb9\u91cf\uff1a\"\n    aws s3 ls s3:\/\/$bucket --recursive --human-readable --summarize | tail -n 2\n\n    # \u30b9\u30c8\u30ec\u30fc\u30b8\u30af\u30e9\u30b9\u5225\u306e\u5206\u5e03\n    echo -e \"\\n\u30b9\u30c8\u30ec\u30fc\u30b8\u30af\u30e9\u30b9\u5225\u5206\u5e03\uff1a\"\n    aws s3api list-objects-v2 --bucket $bucket \\\n        --query 'Contents[].StorageClass' \\\n        --output text | sort | uniq -c\n\n    # \u6700\u8fd1\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\n    echo -e \"\\n\u6700\u8fd1\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\uff08\u904e\u53bb7\u65e5\u9593\uff09\uff1a\"\n    aws s3api list-objects-v2 --bucket $bucket \\\n        --query \"Contents[?LastModified&gt;='2024-01-21'].{Key:Key,Size:Size}\" \\\n        --output table\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-65\">\u30b3\u30b9\u30c8\u6700\u9069\u5316\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u9069\u5207\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u30af\u30e9\u30b9\u306e\u9078\u629e<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u983b\u7e41\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u30c7\u30fc\u30bf \u2192 STANDARD<\/li>\n\n\n\n<li>\u30a2\u30af\u30bb\u30b9\u983b\u5ea6\u304c\u4f4e\u3044\u30c7\u30fc\u30bf \u2192 STANDARD_IA<\/li>\n\n\n\n<li>\u30a2\u30fc\u30ab\u30a4\u30d6\u30c7\u30fc\u30bf \u2192 GLACIER<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e9\u30a4\u30d5\u30b5\u30a4\u30af\u30eb\u7ba1\u7406\u306e\u81ea\u52d5\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u53e4\u3044\u30c7\u30fc\u30bf\u306e\u81ea\u52d5\u30a2\u30fc\u30ab\u30a4\u30d6<\/li>\n\n\n\n<li>\u4e0d\u8981\u306a\u30c7\u30fc\u30bf\u306e\u81ea\u52d5\u524a\u9664<\/li>\n\n\n\n<li>\u30d0\u30fc\u30b8\u30e7\u30cb\u30f3\u30b0\u3068\u306e\u7d44\u307f\u5408\u308f\u305b<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8ee2\u9001\u30b3\u30b9\u30c8\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30ea\u30fc\u30b8\u30e7\u30f3\u9593\u8ee2\u9001\u306e\u6700\u5c0f\u5316<\/li>\n\n\n\n<li>CloudFront\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u30d0\u30c3\u30c1\u51e6\u7406\u306e\u6d3b\u7528<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u6700\u9069\u5316\u624b\u6cd5\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u7dad\u6301\u3057\u306a\u304c\u3089\u30b3\u30b9\u30c8\u3092\u52b9\u7387\u7684\u306b\u7ba1\u7406\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Warning: Undefined array key &#8220;is_admin&#8221; in \/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/ &#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":{"0":"post-2398","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-aws","7":"nothumb"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2398","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=2398"}],"version-history":[{"count":1,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2398\/revisions"}],"predecessor-version":[{"id":2399,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2398\/revisions\/2399"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2398"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2398"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2398"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}