2016-08-29 19 views
2

AWS EC2インスタンスが起動するたびにコードを実行します。コードはAmazon S3からデータをプルダウンし、データを処理してS3にデータをコピーします。これを行うためのメイクファイルを作成しました。これは、インスタンスにログインしているときに呼び出すと問題なく動作します。私は/ect/rc.local(このスクリプトは、インスタンスが起動するたびに実行される)にスクリプトを置いて、makefileを呼び出します。このスクリプトは、インスタンスの起動時に正常に実行されます。私が抱えている問題は、makefileが起動スクリプトから呼び出されたときに、データをs3にコピーしたりs3にコピーしたりしないということです。私はhereを読んでアクセスキーを設定するとWindowsサーバーでこの問題が解決されるが、これは私にとってはうまくいかない。ログファイルでは、出力は常にメイクファイルのコードの最初の行であるため、awsコマンドを呼び出すときにコードが停止するように見えます。以下は私のログファイルが言うことである:ここではAWS EC2インスタンス起動スクリプトでのAWSコマンドライン関数の使用

aws s3 sync s3:<s3 bucket to get data from> <location to save data to> 

は私のメイクファイルからrelelvantコードです:ここでは

### Download all data 
get_data: 
     aws s3 sync s3:<s3 bucket to get data from> <location to save data to> 

### Copy data back to s3 
copy_data_to_s3: 
     aws s3 sync <location of data to copy to s3> s3:<s3 bucket data is copied to> 

は/etc/rc.localの中に私のスクリプトです:

#!/bin/bash 
# 
# rc.local 
# 
make -f <location of makefile>/Makefile > <location to save log file>/log.txt 
exit 0 

どんな助けもありがとう。

答えて

3

AWSコマンドラインを設定すると、資格情報と地域が~/.aws/...に格納されます。しかし、起動時にコマンドを実行すると、rc.localから、それはあなたとして実行されていません。

表示される問題は、AWS CLIが資格情報を見つけることができないことです。

オプション1:(優先)

はローカルに保存されたAWSの資格情報を設定しないでください

だから、あなたはオプションのカップルを持っています。代わりに、IAMロールを使用してEC2インスタンスを起動します。これを行うと、インスタンスに保管するための信任状は必要ありません。 AWS CLIは、IAMロール内の資格情報を単に「見つける」。

オプション2:rc.localから

(働くことができる)あなたのアカウントでスクリプトを実行します。このようにして、格納されたクレデンシャルを見つけることができる。

オプション1

+0

おかげでマットを使用しているもの、あなたがやりたい行うには、より安全な方法、私は今これを試してみて、あなたはそれがどのように動作するか知っているつもりです。 – Gabriel

+0

まあ、相対的なセキュリティは、いくつかのことに依存します。インスタンスをインスタンスロールから削除することはできないため、インスタンスにログオンできるユーザーはすべて、インスタンスロール内で同じAWSリソース特権を持ちます。資格情報が安全な場所に書き込まれている場合、すべてのユーザーがAWS権限を活用できるわけではありません。オプション1は、ほとんどの状況では依然として優れていますが、信頼度の低い複数のユーザーがホスト上でシェルにアクセスする場合は、オプション2が望ましい場合があります。 –

+0

私はオプション1を試みました。私は役割を作成し、AmazonS3FullAccessポリシーを添付しました。さらに、私はPolicy Simulatorに行き、getObjectとputObjectを実行し、両方が許可されていることを示しました。私は新しいインスタンスを作成し、その役割を付けました。しかし、それはまだ動作していません。ログファイルは同じ出力を持ち、データはインスタンスに保存されません。今私はオプション2を試してみる。 – Gabriel

関連する問題