2021-11-26に更新

AWS S3って何なんだぜ(^~^)?

ひょろ~(^~^) 公開下書き

記事ナビゲーション

📖 AWS記事まとめ

本文

ramen-tabero-futsu2.png
「 AWS S3 が ログファイル置くのにいいと聞いたんで調べるぜ」

kifuwarabe-futsu.png
「 Python boto3 があれば何でもできるだろう」

📖 Amazon S3 examples

ohkina-hiyoko-futsu2.png
「 👆 こんなドキュメントが役に立つのかしら?」

ramen-tabero-futsu2.png
「 概念が分からん。 buckets って何?」

kifuwarabe-futsu.png
「 バケットの中に オブジェクトが入っているらしいぜ。 バケットは100個まで作れるらしい。
オブジェクトというのは ファイルのことのようだぜ」

ramen-tabero-futsu2.png
「 じゃあ バケットは ディレクトリーみたいなもんか」

ohkina-hiyoko-futsu2.png
「 オブジェクト名 というのは 特に付けたいものがなければ ファイル名にしとけばいいらしいわよ」

ramen-tabero-futsu2.png
「 じゃあ それは ファイルだぜ」

ohkina-hiyoko-futsu2.png
「 オブジェクト には JSONみたいなキー、バリュー ペアのデータを付けることができるらしいわよ」

ramen-tabero-futsu2.png
「 それは ファイルのプロパティ だぜ」

📖 Listing contents of a bucket with boto3

ramen-tabero-futsu2.png
「 👆 ターミナルに接続して最初にやりたいコマンドは ls だろ。
その オブジェクト とやらを一覧する方法を知っとこうぜ」

kifuwarabe-futsu.png
「 触ってみないと なんだか分からないな」

ramen-tabero-futsu2.png
「 で、わたしが AWS S3 を使うには どういう行動を取ったらいいんだぜ?
天井に向かって 口をポカーンと開けて 念仏を唱えると AWS S3 の方から迎えがくるのかだぜ?」

ohkina-hiyoko-futsu2.png
「 使います、という意志が どこかへ伝わる必要があるんじゃないの?」

20211126blog255.png

ramen-tabero-futsu2.png
「 S3 というのがあるな」

20211126blog256.png

kifuwarabe-futsu.png
「 👆 すでにお父んが利用した跡があるぜ」

ramen-tabero-futsu2.png
「 ハンズオン動画見てたしな。なんかしたっけな?」

20211126blog257.png

ramen-tabero-futsu2.png
「 👆 バケットの中は空だぜ」

ohkina-hiyoko-futsu2.png
「 じゃあ 試しに アップロード ボタンを押して ファイルをアップロードしてみなさいよ」

20211126blog258.png

ramen-tabero-futsu2.png
「 👆 muzudho-h4b というのがバケット名かだぜ。 なんだぜこの奇妙なバケット名は?」

20211126blog259a1.png

ramen-tabero-futsu2.png
「 👆 ドラッグ&ドロップで テキストファイルを投げ込むぜ」

20211126blog260.png

ramen-tabero-futsu2.png
「 👆 アップロードできたんじゃないか?」

kifuwarabe-futsu.png
「 じゃあ Pythonスクリプトで同じことをやるには どうやるんだぜ?
特に ユーザー認証の部分がだぜ」

📖 Uploading files

ramen-tabero-futsu2.png
「 👆 ユーザー認証的なコードを書いている風には見えないぜ」

ohkina-hiyoko-futsu2.png
「 パスワードを Git Hub にコミットしちゃう人がいるのよ。
スクリプトとか、プロジェクトの中に ユーザー認証コードを書かないのが セキュリティ対策の1つなのよ」

ramen-tabero-futsu2.png
「 ローカルPCに AWSクレデンシャル のファイルを置いてるのを勝手に探して見に言ってくれるのかだぜ? 不思議だな」

kifuwarabe-futsu.png
「 ユーザーディレクトリの下の .aws ディレクトリーが定位置なのかだぜ?」

upload_file.py:

import argparse
import logging
import boto3
from botocore.exceptions import ClientError
import os


def upload_file(file_name, bucket, object_name=None):
    """Upload a file to an S3 bucket

    :param file_name: File to upload
    :param bucket: Bucket to upload to
    :param object_name: S3 object name. If not specified then file_name is used
    :return: True if file was uploaded, else False
    """

    # If S3 object_name was not specified, use file_name
    if object_name is None:
        object_name = os.path.basename(file_name)

    # Upload the file
    s3_client = boto3.client('s3')
    try:
        _response = s3_client.upload_file(file_name, bucket, object_name)
    except ClientError as e:
        logging.error(e)
        return False
    return True


# Test
# python.exe -m upload_file --target hello-world.txt --bucket muzudho-h4b
#                                    ---------------
#                                    This file to upload
#                                                             -----------
#                                                             Bucket name
if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='AWS S3 Practice.')
    parser.add_argument('--target', help='This file to upload')
    parser.add_argument('--bucket', help='Bucket name')
    args = parser.parse_args()

    upload_file(args.target, args.bucket)
    pass

ramen-tabero-futsu2.png
「 👆 こんな感じでスクリプトを書いて」

python.exe -m upload_file --target hello-world.txt --bucket muzudho-h4b

ramen-tabero-futsu2.png
「 👆 はい実行」

20211126blog261.png

ramen-tabero-futsu2.png
「 👆 アップロードできてるな。 これ、中身は確認できるのかだぜ?」

ramen-tabero-futsu2.png
「 なんか 開く を押してもファイルがダウンロードされてくるぜ。 ダウンロードするしかなくない?」

kifuwarabe-futsu.png
「 ただの ファイル置き場 なんだろ」

ohkina-hiyoko-futsu2.png
「 じゃあ ファイルの投げつけ方は 覚えたわね」

AWS S3 を使うことを考えたロガーとは

ramen-tabero-futsu2.png
「 ローカルPCに 長々と ファイル書き込みをする ログの取り方を 変えなくてはいけないのかだぜ?」

kifuwarabe-futsu.png
「 S3 ができるの、ファイルを置くことと ファイルを取り出すことだけだろ」

ohkina-hiyoko-futsu2.png
「 例えば 将棋の対局1個分で ログファイル1個できる、とかかしら」

ramen-tabero-futsu2.png
「 そういうツクリに変えるか……」

ramen-tabero-futsu2.png
「 ログって もっと 広範囲で 細かなところにも入り込むようなものだろ。
対局1個分 とかで 区切れるものなのかだぜ?」

kifuwarabe-futsu.png
「 べつに タイムスパンで切ってもいいだろ」

Google Drive の方が 5分の1 ぐらいの安さらしい

ohkina-hiyoko-futsu2.png
「 Google Drive の方が、 AWS S3 より 5分の1 ぐらいの安さらしいわよ?」

ramen-tabero-futsu2.png
「 AWS S3 を使う気が無くなった……」

何度でもクリック!→

むずでょ

光速のアカウント凍結されちゃったんで……。ゲームプログラムを独習中なんだぜ☆電王戦IIに出た棋士もコンピューターもみんな好きだぜ☆▲(パソコン将棋)WCSC29一次予選36位、SDT5予選42位▲(パソコン囲碁)AI竜星戦予選16位

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

むずでょ の最近の記事