AWS CLIを使ってCentOS7からS3へファイル転送する方法

現在(2019/4/13)AWS Innovate 2019が開催中ですね!自分の登録だけはしました。w

その流れでは全然関係ないですが、たまたま仕事で外部のAWSのS3にデータ連携する機会があったので、その時調べた内容をメモしておきます。

OSのバージョンは「CentOS Linux release 7.6.1810 (Core)」になります。

今回説明するデータ連携には事前準備として3つの手順が必要です。

  1. 連携先(AWS S3)の接続情報を共有してもらう
  2. 連携元サーバ(自分のサーバ)にAWS CLIを設定しておく
  3. 接続情報をもとにprofileを作成する

データ連携する方法はprofileを作成する以外にいくつかありますが、個人的にはprofileを作成したほうが、接続先ごとに切り替えることができるので便利だと思います。

まずは接続情報の共有について説明していきます。

接続情報の共有

自分のサーバ(連携元)からAWSのS3(連携先)にファイルを転送するには、S3から発行される接続情報を連携元のサーバに共有し設定しておく必要があります。

これは後々の手順のprofile作成時に必要になります。

連携元より以下の情報を連携先に共有しておいてください。

  • 接続元グローバルIP一覧
  • 利用環境(本番のみ/検証のみ/本番・検証)
  • 利用サービス名

 

連携先から連携元に以下のアクセス情報を共有します。

  • S3 アドレス
  • アクセスキー/シークレットキー

 

AWS CLIの設定

AWS CLIは正式名称「AWSコマンドラインインターフェース」といい、その名の通り自分のサーバからコマンドを利用して、AWSを操作できるアプリです。S3へのファイル転送もAWS CLIを使って可能になります。

接続元サーバにAWS CLIのインストールを行います。

Windowsへのインストールの場合

下記サイトにアクセスし、 インストーラをダウンロードし、実行します。

 http://aws.amazon.com/jp/cli/

 

Mac、Linuxへのインストールの場合

インストールにはPythonが必要になります。さらにバージョンが2.6.5以降ものでなくてはなりません。

pythonをまずインストールしてください。(方法は割愛、ここに載ってるよ)。

バージョンを確認します。

$ python --version

実際にawscliを使うには「pip」を使う必要があります。ただしこのpip、 Python3.4以上(Python2の場合は2.7.9以上)であれば、プレインストールされています。

 

awscliをインストールします。

$ sudo pip install awscli

以上です。

 

補足:pipのインストール

pipがあるか確認します。

$ python -m pip -V
または
$ pip -V

インストールされていなければpipをインストールします。

$ sudo curl -kL https://bootstrap.pypa.io/get-pip.py | python

 

ここで注意点ですが、以下のエラーが出た場合があります。

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 1622k  100 1622k    0     0  11.5M      0 --:--:-- --:--:-- --:--:-- 11.6M
Collecting pip
  Using cached https://files.pythonhosted.org/packages/c2/d7/90f34*******************************************************/pip-18.1-py2.py3-none-any.whl
Collecting wheel
  Using cached https://files.pythonhosted.org/packages/ff/47/1dfa4*******************************************************/wheel-0.32.3-py2.py3-none-any.whl
Installing collected packages: pip, wheel
Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/usr/lib/python2.7/site-packages/pip-18.1.dist-info'
Consider using the `--user` option or check the permissions.

どうやらsudoを使っていたのでファイルを落としてきたところがroot権限にも関わらず、pythonは自分のユーザでやっていたのが悪かったっぽいです、

面倒なのでインストールと実行を別々に動かすようにします。

$ cd ~/
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
$ sudo python get-pip.py

 

profileの作成

CLIのコンフィグを行います。

profileを追加することで、その設定をprofileから読みだすことができます。

$aws configure --profile samplePro
  
AWS Access Key ID [None]: xxxxxxxxxx   <-AWSの管理者から共有してもらった接続情報
AWS Secret Access Key [None]: xxxxxxxxxx <-AWSの管理者から共有してもらった接続情報
Default region name [None]: ap-northeast-1
Default output format [None]: json

説明:

プロファイルへ”samplePro”と設定します※環境に合わせて任意で設定してください

連携先から発行しているAccess Key,Secret Access Key を入力してください

以下固定値となります:ap-northeast-1  :json

 

profileが正常に作成されたか確認します。

$ aws configure list
$ aws configure list --profile samplePro
 
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                  samplePro           manual    --profile
access_key     ****************---- shared-credentials-file
secret_key     ****************---- shared-credentials-file
    region           ap-northeast-1      config-file    ~/.aws/config

 

ファイルの転送方法

コピーコマンドを実行して、AWSのS3へファイルを転送してみます。

以下のコマンドでアップロードを行ってください

$ aws s3 cp [File Name] [S3 アドレス] --profile [Profile Name] --sse

※S3のアドレスは「s3://[bucket]/[prefix]/[object]」となります。prefix とはディレクトリ、objectはフォルダみたいなものと考えてください。

 

最後にコマンドを実行した際の成功例を失敗例を紹介します。

以下のメッセージが返ってくるので、自分のプログラムに組み込む場合は、エラーハンドリングなどに利用できます。

 

S3コマンド例:

$ sudo aws s3 cp [コピー元のファイルパス] s3://[S3のURL] --profile [Profile Name] --sse

$ sudo aws s3 cp /var/tmp/sample.csv s3://testsite/tmp/sample.csv --profile smaplePro --sse

コマンド成功例:

$ aws s3 cp /var/tmp/sample.csv s3://testsite/tmp/sample.csv --profile smaplePro --sse

upload: ../../../../../var/tmp/sample.csv to s3://testsite/tmp/sample.csv

コマンド失敗例:

$ aws s3 cp /var/tmp/sample.csv s3://testsite/tmp/sample.csv --profile smaplePro --sse

upload failed: ../../../../../var/tmp/sample.csv to s3://testsite/tmp/sample.csv A client error (AccessDenied) occurred when calling the PutObject operation: Access Denied

 

転送失敗時は「upload failed: ~」となるので、このメッセージをもとにエラーの判別をしてもいいかもしれません。



投稿日:2019-04-13    更新日:2019-06-05

[スポンサーリンク]

サイト内検索
プロフィール

プロフィール

[Name : じゃぶじゃぶ(@jbjb_2019)]
都内で社内SEをしているおじさん。
仕事で得られる知識だけでは限界を感じ、 WEBの勉強がてらITブログを開始。
サーバからWEBサイトまでフルスクラッチで開発しました。
現在は勉強のモチベーションを保つために活用中。
興味があることを雑記的に書いていきます。

[スポンサーリンク]

[スポンサードリンク]