今日はEC2からs3のデータを取得したいと思います。
wgetするだけだって?いやいや、それはファイルが公開されている場合だけですよね。
というわけでaws-cliを使って取得してみたいと思います。amazon linux AMIをしようしているばあいは初期から入っていますが、CentOSなどのAMIの場合はaws-cliを頑張って導入する必要があるみたいです。
1 2 |
$ aws s3 cp s3://your_s3_name/directory_name/file_name local_file_name Unable to locate credentials |
コマンドを探してきて、さっそくローカルにファイルコピーを試してみたのですがcredientialが無いため上記のようなエラーとなりました。
s3の中身を参照可能なcredientialをインスタンスに定義すれば良いようです。ただし、定義するにはIAM Roleの設定が必要なようです。
awsメニューから「Identity & Access Management」を押下して、左ペインにある「Roles」を選択、「Create New Role」を押下します。ここから「S3からファイルを取得できる権限」を作成します。
Set Role Nameと、ルール名を入力する欄が出てきますので、今回は「s3access」としました。
次のSelect Role Type ですが、今回はEC2に対して付与する権限を作成するので Amazon EC2を選択します。
次の Attach Policy ですが、ファイルを読むだけなら「AmazonS3ReadOnlyAcess」のみで十分です。
最後にReview画面でチェックして、問題なければ「Create Role」を押下します。
以上でIAMの作成は完了です。
権限の付与方法ですが
- ec2にsshでアクセスして「aws configure」コマンドで付与する
- ec2の起動時にIAMを選択する欄で先ほど作成したIAMを設定する。
の2通りがあるようですが、aws configureについて詳細が書かれているサイトが少なかったこと、自動化のために本作業を実施しているため、後者の付与方法でやってみたいと思います。
EC2のインスタンス作成時にIAM Roleの設定欄があるので「s3access」を選択するだけです。
先ほどのコマンド、今度は動作しました。
1 2 3 4 |
aws s3 cp s3://s3_name/folder_name/hogehoge.rpm hogehoge.rpm download: s3://s3_name/folder_name/hogehoge.rpm to ./hogehoge.rpm $ ls hogehoge.rpm |
ちなみに、S3の設定で一般公開する「Permissions Grantee: Everyone」などがあると思いますが、同じAWSアカウントであれば「Grantee: aws」だけで上記のコマンドでダウンロードできるようです。