aws cli
mit einem absoluten Pfad ein.
-- / usr / local / bin / aws s3 cp s3: //hoge/fuga/foo.txt bar.txt
.Ich habe "boto" nicht verwendet, weil ich das Gefühl hatte, einen Fehler zu bekommen, weil ich nur Zugang zum Boden des Eimers hatte.
$ aws s3 cp s3://hoge/fuga/foo_20160711.txt .
Ich möchte die Datei aus S3 bringen. Der Dateiname ändert sich jeden Tag je nach Datum. Wenn der Download erfolgreich ist, verarbeiten Sie den Import und irgendwie. Ich werde es vorerst mit Python nennen.
fetch.py
import datetime
import os
import stat
import subprocess
import tempfile
def main():
fd, tmp = tempfile.mkstemp()
os.close(fd)
os.chmod(tmp, stat.S_IRWXU | stat.S_IROTH)
filename = 'foo_{}.txt'.format(datetie.datetime.now().strftime('%Y%m%d'))
subprocess.check_call([
'aws',
's3',
'cp',
's3://hoge/fuga/{}'.format(filename),
tmp,
'--quiet',
])
do_something(tmp)
if __name__ == '__main__':
main()
Machen Sie einen Code wie diesen. Ich habe es von der Kommandozeile aus ausgeführt und bestätigt, dass es funktioniert, also habe ich es in crontab geworfen.
0 1 * * * /usr/local/bin/python /home/vagrant/fetch.py
Es war nicht gut
Wenn ich mir den Ausführungsverlauf ansehe, erhalte ich normalerweise eine Fehlermeldung. Es wird gesagt, dass der Befehl aws
nicht existiert. Übrigens habe ich irgendwo gehört, dass sich die Konfigurationsdatei von "awscli" im Ausgangsverzeichnis befindet, sodass die Konfiguration nur gelesen werden kann, wenn das Ausgangsverzeichnis genau in der Umgebungsvariablen angegeben ist. Da jedoch gesagt wird, dass es überhaupt keinen Befehl "aws" gibt, haben wir das Problem der Umgebungsvariablen nicht erreicht. Vielleicht gibt es keinen "Pfad". Ich denke, es kann gelöst werden, indem man "PATH" hinzufügt oder den Ort des Befehls direkt angibt.
subprocess.check_call ()
--Suchen Sie nach dem Befehl aws, mit dem Sie direkt darauf verweisenHOME=/home/vagrant
0 1 * * * /usr/local/bin/python /home/vagrant/fetch.py
fetch.py
import datetime
import os
import stat
import subprocess
import tempfile
def do_something(name):
return
def main():
fd, tmp = tempfile.mkstemp()
os.close(fd)
os.chmod(tmp, stat.S_IRWXU | stat.S_IROTH)
filename = 'foo_{}.txt'.format(datetie.datetime.now().strftime('%Y%m%d'))
subprocess.check_call([
'/usr/local/bin/aws',
's3',
'cp',
's3://hoge/fuga/{}'.format(filename),
tmp,
'--quiet',
], env=os.environ.copy())
do_something(tmp)
if __name__ == '__main__':
main()
Es hat fast funktioniert.
Recommended Posts