モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

目次目次を開く/閉じる

AWS コマンドラインツールの基本的な使い方

モーダルを閉じる

ステッカーを選択してください

お支払い手続きへ
モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

作成日作成日
2015/04/16
最終更新最終更新
2024/01/21
記事区分記事区分
一般公開

目次

    サーバーレスとDevOpsに注力中。AWSを使った効率的なインフラ構築が得意です。

    amazon.com のアカウントで利用できる Amazon Web Services (AWS) に関する操作を Web 画面からだけでなくコマンドラインツールからも行うために必要な知識をまとめます。AWS 全般を対象とした汎用的なコマンドラインツールの解説です。似たものに EC2 に特化した Java ベースのコマンドラインツールツールが存在しています。混乱しないように注意してください。

    IAM ユーザの作成

    Identity and Access Management (IAM) は限定的な権限をもったユーザを作成および管理するための仕組みです。コマンドラインツールから AWS を操作するときには IAM ユーザを事前に作成し、そのユーザの権限で処理を実行します。こちら の手順で IAM ユーザを作成して認証情報 (Access Key ID, Secret Access Key) を用意しましょう。

    インストール手順

    UNIX 系 OS にシステムインストールする手順を抜粋して記載します。その他のインストールパターンについてはこちらをご覧ください。Python 2.6.3 以降が必要です。

    python --version
    

    ダウンロードおよび解凍

    curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"
    unzip awscli-bundle.zip
    

    /usr/local/aws にインストールして実行ファイルへのシンボリックリンクは /usr/local/bin/aws として作成

    sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws
    

    ヘルプは以下のようにして閲覧できます。

    ./awscli-bundle/install -h
    

    問題なくインストールできたら以下のコマンドが有効になります。

    aws help
    

    初期設定

    基本的な用途であれば以下のコマンドにしたがって設定するだけです。

    aws configure
    
    • IAM ユーザの Access Key ID
    • IAM ユーザの Secret Access Key
    • 東京リージョン ap-northeast-1
    • 出力形式 json

    設定内容は以下のファイルに格納されます。

    • ~/.aws/config
    • ~/.aws/credentials

    簡易的には、以下のように環境変数に設定することもできます。

    export AWS_ACCESS_KEY_ID=XXXXXXXXXXXXXXXXXXXX
    export AWS_SECRET_ACCESS_KEY=YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
    

    正しく設定されていれば以下のコマンドが有効になります。

    aws ec2 describe-regions
    

    IAM ユーザが EC2 操作権限のあるグループに所属していなければ

    A client error (UnauthorizedOperation) occurred when calling the DescribeRegions operation: You are not authorized to perform this operation.

    などと表示されます。グループを作成して IAM ユーザを所属させましょう。また、プロキシ設定のためには環境変数を追加します。

    リファレンス

    EC2 コマンド例

    セキュリティグループの作成

    create-security-group

    aws ec2 create-security-group --group-name MySecurityGroup --description "My security group"
    

    delete-security-group

    aws ec2 delete-security-group --group-name MySecurityGroup
    

    セキュリティグループのファイアウォール設定

    TCP 22 番ポートをすべてのホストに対して開放する例 (authorize-security-group-ingress)

    aws ec2 authorize-security-group-ingress --group-name MySecurityGroup --protocol tcp --port 22 --cidr 0.0.0.0/0
    

    revoke-security-group-ingress

    aws ec2 revoke-security-group-ingress --group-name MySecurityGroup --protocol tcp --port 22 --cidr 0.0.0.0/0
    

    公開鍵および秘密鍵の生成

    create-key-pair

    aws ec2 create-key-pair --key-name my-key-pair
    

    何らかの手段で my-key-pair.pem を作成します。

    chmod 400 my-key-pair.pem
    

    delete-key-pair

    aws ec2 delete-key-pair --key-name my-key-pair
    

    インスタンスの起動

    run-instances

    aws ec2 run-instances --image-id ami-cbf90ecb \
    --count 1 --instance-type t2.micro --key-name my-key-pair \
    --security-groups MySecurityGroup
    

    インスタンス ID 一覧の取得例 (describe-instances)

    aws ec2 describe-instances --filters "Name=instance.group-name,Values=MySecurityGroup" \
    --output text | grep ^INSTANCES | cut -f8
    i-30f3b9c3
    i-d4f4be27
    

    名前タグを付与します (create-tags)

    aws ec2 create-tags --tags Key=Name,Value=myInstance --resources \
    `aws ec2 describe-instances --filters "Name=instance.group-name,Values=MySecurityGroup" \
    --output text | grep ^INSTANCES | cut -f8 | tr '\n' ' '`
    

    接続してみましょう。

    ssh -i my-key-pair.pem ec2-user@xxx.xxx.xxx.xxx
    

    インスタンスの削除

    即時削除されます。実行時には注意しましょう (terminate-instances)

    aws ec2 terminate-instances --instance-ids \
    `aws ec2 describe-instances --filters "Name=instance.group-name,Values=MySecurityGroup" \
    --output text | grep ^INSTANCES | cut -f8 | tr '\n' ' '`
    

    S3 コマンド例

    バケットのコピー

    sync

    us-west-2 リージョンにある my-us-west-2-bucket バケット内のオブジェクトを us-east-1 リージョンにある my-us-east-1-bucket バケット内にコピーします。更に --delete によってコピー先バケットにあるオブジェクトのうちコピー元バケットにないオブジェクトは、コピー先バケットから削除します。

    aws s3 sync s3://my-us-west-2-bucket s3://my-us-east-1-bucket --source-region us-west-2 --region us-east-1 --delete
    

    並列処理の設定を変更することで高速化できます。特に、マルチパートアップロードは断片が残存する危険性があるためなるべく使用しないようにする場合の例です。

    aws configure set default.s3.max_concurrent_requests 256
    aws configure set default.s3.max_queue_size 100000
    aws configure set default.s3.multipart_threshold 5GB
    aws configure set default.s3.multipart_chunksize 5GB
    

    Windows で利用する場合の文字コードの設定

    Windows の awscli は SJIS/cp932 で動作するように設定されています。Git Bash 等のターミナルで UTF-8 で処理する必要がある場合は、以下の方法で対処できます。

    情報を取得する際の文字化け

    コマンドプロンプト

    AWSCLIV2.msi (c:/Program Files/Amazon/AWSCLIV2/aws.exe)

    C:\Users\username>aws s3 ls s3://mybucket-20211017/
    2021-10-17 13:34:52          0 日本語.txt
    

    Python3

    C:\Users\username>python -m awscli s3 ls s3://mybucket-20211017/
    2021-10-17 13:34:52          0 日本語.txt
    

    Python2

    C:\Users\username>python2 -m awscli s3 ls s3://mybucket-20211017/
    C:\Python27\lib\site-packages\dateutil\parser\_parser.py:1183: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
      elif res.tzname and res.tzname in time.tzname:
    2021-10-17 13:34:52          0 日本語.txt
    

    UTF-8 ターミナル (文字化け)

    AWSCLIV2.msi

    $ aws s3 ls s3://mybucket-20211017/
    2021-10-17 13:34:52          0 ▒▒▒{▒▒.txt
    

    Python3

    $ python -m awscli s3 ls s3://mybucket-20211017/
    2021-10-17 13:34:52          0 ▒▒▒{▒▒.txt
    

    Python2

    $ python2 -m awscli s3 ls s3://mybucket-20211017/
    2021-10-17 13:34:52          0 ???.txt
    C:\Python27\lib\site-packages\dateutil\parser\_parser.py:1183: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
      elif res.tzname and res.tzname in time.tzname:
    

    解消方法 (UTF-8 ターミナルにおける情報取得時の文字化け)

    iconv による文字コードの変換

    AWSCLIV2.msi

    $ aws s3 ls s3://mybucket-20211017/ | iconv -f CP932 -t UTF-8
    2021-10-17 13:34:52          0 日本語.txt
    

    Python3

    $ python -m awscli s3 ls s3://mybucket-20211017/ | iconv -f CP932 -t UTF-8
    2021-10-17 13:34:52          0 日本語.txt
    

    PYTHONIOENCODING 環境変数の指定

    Python3

    $ PYTHONIOENCODING=utf-8 python -m awscli s3 ls s3://mybucket-20211017/
    2021-10-17 13:34:52          0 日本語.txt
    

    Python2

    $ PYTHONIOENCODING=utf-8 python2 -m awscli s3 ls s3://mybucket-20211017/
    2021-10-17 13:34:52          0 日本語.txt
    c:\Python27\lib\site-packages\dateutil\parser\_parser.py:1183: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
      elif res.tzname and res.tzname in time.tzname:
    

    引数に日本語を指定する際の文字化けおよびエラー

    コマンドプロンプト

    AWSCLIV2.msi

    C:\Users\username\Desktop>aws s3 cp 日本語.txt s3://mybucket-20211017/日本語.txt
    upload: .\日本語.txt to s3://mybucket-20211017/日本語.txt
    

    Python3

    C:\Users\username\Desktop>python -m awscli s3 cp 日本語.txt s3://mybucket-20211017/日本語.txt
    upload: .\日本語.txt to s3://mybucket-20211017/日本語.txt
    

    Python2

    C:\Users\username\Desktop>python2 -m awscli s3 cp 日本語.txt s3://mybucket-20211017/日本語.txt
    upload: .\日本語.txt to s3://mybucket-20211017/日本語.txt
    

    UTF-8 ターミナル (文字化け、エラー)

    AWSCLIV2.msi

    $ aws s3 cp 日本語.txt s3://mybucket-20211017/日本語.txt
    upload: .\▒▒▒{▒▒.txt to s3://mybucket-20211017/▒▒▒{▒▒.txt
    

    Python3

    $ python -m awscli s3 cp 日本語.txt s3://mybucket-20211017/日本語.txt
    upload: .\▒▒▒{▒▒.txt to s3://mybucket-20211017/▒▒▒{▒▒.txt
    

    Python2 の場合に限り、文字化けではなくエラーとなります。

    $ python2 -m awscli s3 cp 日本語.txt s3://mybucket-20211017/日本語.txt
    'utf8' codec can't decode byte 0x93 in position 0: invalid start byte
    

    解消方法 (引数に日本語を指定する際の文字化けおよびエラー)

    iconv による文字コードの変換

    AWSCLIV2.msi

    $ aws s3 cp 日本語.txt s3://mybucket-20211017/日本語.txt | iconv -f CP932 -t UTF-8
    upload: .\日本語.txt to s3://mybucket-20211017/日本語.txt
    

    Python3

    $ python -m awscli s3 cp 日本語.txt s3://mybucket-20211017/日本語.txt | iconv -f CP932 -t UTF-8
    upload: .\日本語.txt to s3://mybucket-20211017/日本語.txt
    

    PYTHONIOENCODING 環境変数の指定

    Python3

    $ PYTHONIOENCODING=UTF-8 python -m awscli s3 cp 日本語.txt s3://mybucket-20211017/日本語.txt
    upload: .\日本語.txt to s3://mybucket-20211017/日本語.txt
    

    Python2 (エラー)

    $ PYTHONIOENCODING=UTF-8 python2 -m awscli s3 cp 日本語.txt s3://mybucket-20211017/日本語.txt
    'utf8' codec can't decode byte 0x93 in position 0: invalid start byte
    

    Python2 の対処方法

    $ PYTHONIOENCODING=CP932 python2 -m awscli s3 cp 日本語.txt s3://mybucket-20211017/日本語.txt
    upload: .\▒▒▒{▒▒.txt to s3://mybucket-20211017/▒▒▒{▒▒.txt
    
    $ PYTHONIOENCODING=CP932 python2 -m awscli s3 cp 日本語.txt s3://mybucket-20211017/日本語.txt | iconv -f CP932 -t UTF-8
    upload: .\日本語.txt to s3://mybucket-20211017/日本語.txt
    

    Python2 awscli ソースコードの読解

    $ python2 -m awscli --debug s3 cp 日本語.txt s3://mybucket-20211017/日本語.txt
    
    Traceback (most recent call last):
      File "c:\Python27\lib\site-packages\awscli\clidriver.py", line 218, in main
        return command_table[parsed_args.command](remaining, parsed_args)
      File "c:\Python27\lib\site-packages\awscli\customizations\commands.py", line 190, in __call__
        parsed_globals)
      File "c:\Python27\lib\site-packages\awscli\customizations\commands.py", line 139, in __call__
        parsed_args, remaining = parser.parse_known_args(args)
      File "c:\Python27\lib\site-packages\awscli\argparser.py", line 200, in parse_known_args
        args, namespace)
      File "c:\Python27\lib\site-packages\awscli\argparser.py", line 115, in parse_known_args
        encoded.append(v.decode(terminal_encoding))
      File "c:\Python27\lib\encodings\utf_8.py", line 16, in decode
        return codecs.utf_8_decode(input, errors, True)
    UnicodeDecodeError: 'utf8' codec can't decode byte 0x93 in position 0: invalid start byte
    2021-10-17 14:14:08,292 - MainThread - awscli.clidriver - DEBUG - Exiting with rc 255
    
    'utf8' codec can't decode byte 0x93 in position 0: invalid start byte
    

    awscli\argparser.pyterminal_encoding = getattr(sys.stdin, 'encoding', 'utf-8')None となっていることが原因です。

    def parse_known_args(self, args, namespace=None):
        parsed, remaining = super(CLIArgParser, self).parse_known_args(args, namespace)
        terminal_encoding = getattr(sys.stdin, 'encoding', 'utf-8')  # ここが None となる。
        if terminal_encoding is None:
            # In some cases, sys.stdin won't have an encoding set,
            # (e.g if it's set to a StringIO).  In this case we just
            # default to utf-8.
            terminal_encoding = 'utf-8'  # utf-8 がセットされてしまいます。cp932 をセットすると正常に動作します。
        for arg, value in vars(parsed).items():
            if isinstance(value, six.binary_type):
                setattr(parsed, arg, value.decode(terminal_encoding))
            elif isinstance(value, list):
                encoded = []
                for v in value:
                    if isinstance(v, six.binary_type):
                        encoded.append(v.decode(terminal_encoding))
                    else:
                        encoded.append(v)
                setattr(parsed, arg, encoded)
        return parsed, remaining
    
    Likeボタン(off)0
    詳細設定を開く/閉じる
    アカウント プロフィール画像

    サーバーレスとDevOpsに注力中。AWSを使った効率的なインフラ構築が得意です。

    記事の執筆者にステッカーを贈る

    有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

    >>さらに詳しくステッカーを贈る
    ステッカーを贈る コンセプト画像

    Feedbacks

    Feedbacks コンセプト画像

      ログインするとコメントを投稿できます。

      ログインする

      関連記事

      • AWS EC2 インスタンスの選定方法
        準仮想化と完全仮想化 AWS のインスタンスタイプが準仮想化と完全仮想化のどちらの仮想化技術を採用したハードウェアであるかによって、使用できる AMI (OS) が異なるのは以下の理由によります。 準仮想化 ParaVirtualization (PV) において OS は自分が仮想化用のハードウェア上で動作していることを知っています。つまり仮想化用にカスタマイズされた専用の OS が必要になりま...
        yuki_coderyuki_coder8/30/2017に更新
        いいねアイコン画像0
      • OpenVPN で二つの VPC をつなぐための設定
        インターネット VPN (Virtual Private Network) には二拠点間の通信を暗号化する方式によって IPsec-VPN や SSL-VPN などがあります。OpenVPN は SSL-VPN の実装のひとつです。AWS VPC を二つ用意してそれらを OpenVPN で接続してみます。 VPC の構成 myvpc-1 (10.1.0.0/16) mysubnet-1-1 (10...
        takuyatakuya8/11/2017に更新
        いいねアイコン画像0
      • Windows Server EC2 インスタンスへの CAL インストール
        サムネイル画像-8bae43ea3b
        Windows サーバを AWS EC2 インスタンスとして起動した後は、RDP 接続が必要となります。RDP 接続を行なうためには Remote Desktop Services (RDS) ライセンスが必要となります。 Windows Server のライセンスは、管理用途の RDS 接続を許可しています。その際に RDS ライセンスは不要です。ただし、[同時接続数が 2 という制限があります...
        けんちゃんけんちゃん11/18/2023に更新
        いいねアイコン画像0
      • AWS Lambda の基本的な使い方
        サムネイル画像-9285163f6b
        AWS Lambda はイベントドリブンな「関数」を登録できるサービスです。例えば S3 に画像がアップロードされたときにサムネイル用のサイズに加工する処理が記述された関数を登録できます。基本的な使い方をまとめます。 事前準備 関数の登録はブラウザで AWS コンソールにログインして行うこともできますが、本ページでは AWS C
        yuki_coderyuki_coder1/18/2020に更新
        いいねアイコン画像0
      • AWS 落穂拾い (Data Engineering)
        Kinesis Kinesis Streams データは 3 AZ にレプリケーションされます。Amazon Kinesis Data Streams FAQs 24 時間 (既定値) から 1 年までデータ保持できます。[Changing the Data Retention Period](https://docs.aws.amazon
        yuki_coderyuki_coder12/22/2024に更新
        いいねアイコン画像0