2016-07-05 22 views
0

Ich habe ein funktionierendes Python/Boto-Skript, das eine Nachricht an meine AWS SQS-Warteschlange sendet. Der Nachrichtentext ist jedoch in das Skript fest codiert.AWS SQS: Senden dynamischer Nachricht mit Boto

ich erstellt eine Datei ~/Datei mit dem Namen, der

$ cat ~/file 
Username 'encrypted_password_string' 
zwei Werte enthält, würde ich meine Boto Skript gefällt (siehe unten) eine Nachricht an meine AWS SQS-Warteschlange zu senden, die diese beiden Werte enthält.

Kann jemand bitte beraten, wie Sie mein Skript unten ändern, so dass der Nachrichtentext an SQS den Inhalt der Datei ~/Datei enthält. Bitte beachten Sie auch die Sonderzeichen nehmen, die

Beispiel in einem verschlüsselten Passwort-String vorhanden ist: ~/Datei Benutzername d5MopV/EsfSKk8BExCyLHFwNfBrOTzQ1

#!/usr/bin/env python 

conf = { 
    "sqs-access-key": "xxxx", 
    "sqs-secret-key": "xxxx", 
    "sqs-queue-name": "UserPassChange", 
    "sqs-region": "xxxx", 
    "sqs-path": "sqssend" 
} 

import boto.sqs 
conn = boto.sqs.connect_to_region(
     conf.get('sqs-region'), 
     aws_access_key_id  = conf.get('sqs-access-key'), 
     aws_secret_access_key = conf.get('sqs-secret-key') 
) 

q = conn.create_queue(conf.get('sqs-queue-name')) 

from boto.sqs.message import RawMessage 
m = RawMessage() 
m.set_body('hardcoded message') 
retval = q.write(m) 
print 'added message, got retval: %s' % retval 

einen Weg, um daran zu arbeiten:

in der Skript ich habe

import commands 

dann hinzugefügt,

USERNAME = commands.getoutput("echo $(who am i | awk '{print $1}')")  
PASS = commands.getoutput("cat /tmp/.s") 

und fügte dann diese Werte in meinem Nachrichtentext:

MSG = RawMessage()  
MSG.set_body(json.dumps({'pass': PASS, 'user': USERNAME})) 
+0

Zuerst ** STOPP mit Boto, starten boto3 mit **. Sobald Sie in boto3 sind, müssen Sie nur noch dem folgenden Beispiel folgen: http://boto3.readthedocs.io/en/latest/guide/sqs.html Denken Sie daran, dass boto3 eine hohe Ressourcenmethode boto3.resource() und Außerdem können Sie die boto3.client() - Methode auf niedriger Ebene verwenden. Denken Sie daran, sie zu dokumentieren, wenn Sie einen Wrapper schreiben wollen. – mootmoot

+0

danke mootmoot aber das beantwortet nicht die Frage, wie ich dynamische Werte in mein oben genanntes Skript eingeben kann. – KarlH

+0

Ehrlich gesagt, sollten Sie Ihre Frage und Ihre Absicht klären. Es ist seltsam, dass Sie "Wer bin ich" verwenden, um den Benutzernamen zu erhalten, aber nicht in Ihrer Frage erwähnt. Dann springt es plötzlich auf '/ tmp/.s'. Bitte klärt es auf oder riskiert, mod down zu sein. – mootmoot

Antwort

0

Das folgende Beispiel zeigt, wie Boto3 verwenden, um eine Datei an einen Empfänger zu senden.

test_sqs.py

import boto3 
from moto import mock_sqs 

@mock_sqs 
def test_sqs(): 
    sqs = boto3.resource('sqs', 'us-east-1') 
    queue = sqs.create_queue(QueueName='votes') 

    queue.send_message(MessageBody=open('beer.txt').read()) 

    messages = queue.receive_messages() 
    assert len(messages) == 1 
    assert messages[0].body == 'tasty\n'