2017-02-22 6 views
1

AWSラムダでジョブをスケジュールしようとしていますが、そこからデータを取得するのはJson APIです。 JSONファイルをamazon S3に毎回転送したいと思います.SAMバケットとaws lambda関数を適切なIAMロールで設定しました。私はPythonでAWSラムダ関数を書いています。コードはEC2インスタンス上で正常に動作しますが、AWS Lambdaに入れてもS3へファイルを転送することはありません。awsラムダでbashコマンドを実行する方法

import os 


def lambda_handler(event, context): 
    #changing the directory to /tmp 
    os.chdir("/tmp") 
    print "loading function" 
    #downloading file to 
    os.system("wget https://jsonplaceholder.typicode.com/posts/1 -P /tmp") 
    #using aws-cli to transfer file to amazon S3 
    os.system("aws s3 sync . s3://targetbucket") 

「aws lambda」の新機能です。私は何のエラーも出ませんが、それは私に期待される出力を与えていません。

答えて

2

AWSラムダはデフォルトでaws cliを持っていません。

deployment packageawscliに作成するか、またはPython boto3ライブラリを使用して作成することができます。

import boto3 

s3client = boto3.client('s3') 
for filename in os.listdir('/tmp'): # assuming there will not be any sub-directories 
    fpath = os.path.join('/tmp',filename) 
    if os.path.isfile(fpath): 
     s3client.upload_file(fpath, 'targetbucket', filename) 
+0

ご返信ありがとうございます。あなたのコードは正常に動作しています。 - os.system( "wget https://jsonplaceholder.typicode.com/posts/1 -P/tmp")を使用してファイルをダウンロードできないようです。 bashコマンドを使用するには、展開パッケージを作成する必要があります。 os.system( "bashコマンド")? – liferacer

+0

@Navjotラムダで 'wget'が動作するかどうかは決して確認していません。そうでなければ 'urllib'モジュールを利用することができます。 'urllib.urlretrieve(" https://jsonplaceholder.typicode.com/posts/1 "、" file.json ")' – franklinsijo

+0

うん これはurllibで動作します。あなたの提案をありがとう。私は、展開パッケージの一部としてwgetとawscliを展開する必要があると思います。 – liferacer

関連する問題