2013-04-10 73 views
2

下面的代碼是爲使用用戶數據創建新的AWS EC2實例而創建的shell腳本文件。如何使用用戶數據將文件從EC2傳遞到S3和S3到EC2

在此代碼中,它創建新實例並執行cd/home並創建以pravin命名的dirctory。

但之後它既不從s3下載文件也不上載到S3。

該代碼有什麼問題(s3cmd取得和放置代碼)。

用於此目的的AMI預先配置了AWS EC2命令行API和s3cmd。

str=$"#! /bin/bash" 
str+=$"\ncd /home" 
str+=$"\nmkdir pravin" 
str+=$"\ns3cmd get inputFile.txt s3://bucketName/inputFile.txt" 
str+=$\ns3cmd put resultFile.txt s3://bucketName/outputFile.txt" 

echo "$str"|base64 
ud=`echo -e "$str" |base64` 
echo "$ud" 

export JAVA_HOME=/usr 
export EC2_HOME=/home/ec2-api-tools-1.6.7.1 
export PATH=$PATH:$EC2_HOME/bin 
export AWS_ACCESS_KEY=accesskey 
export AWS_SECRET_KEY=secretkey 
if [ "$3" = "us-east-1" ] 
then 
ec2-run-instances ami-fa791231 -t t1.micro -g groupName -n 1 -k Key1 -d "$ud" --region $3 --instance-initiated-shutdown-behavior terminate 
else 
    echo "Not Valid region" 
fi 
+1

我不會與社區共享的密鑰你的方式做... :) – billerby 2013-04-10 11:13:15

+0

您還應該使用IAM角色,而不是通過訪問和祕密密鑰(不只是將它們發佈到公共論壇)。請參閱:http://aws.typepad.com/aws/2012/06/iam-roles-for-ec2-instances-simplified-secure-access-to-aws-service-apis-from-ec2.html – Guy 2013-04-10 16:59:55

+0

我可以嗎將s3cmd和s3fs命令作爲用戶數據傳遞給EC2實例? – Pravin 2013-04-21 11:56:28

回答

0

您的「s3cmd get」命令有問題。你有參數順序倒退。從 「s3cmd --help」 輸出:

Put file into bucket 
     s3cmd put FILE [FILE...] s3://BUCKET[/PREFIX] 

Get file from bucket 
     s3cmd get s3://BUCKET/OBJECT LOCAL_FILE 

你可以看到,你需要改變你的get命令:

str+=$"\ns3cmd get s3://bucketName/inputFile.txt inputFile.txt" 

注意的是,S3:// URI至上,前文件名。這應該解決這個問題。你的代碼也似乎缺少一個報價爲put命令:

str+=$"\ns3cmd put resultFile.txt s3://bucketName/outputFile.txt"