この質問は古いですが、今でも当てはまるので、最近の経験に基づいてより良い回答を試みます。
appengine の外部のプル タスク キューにアクセスすることは可能ですが、質問者が述べたように、良い例がないため、ここに詳細なガイドがあります。私の場合、新しいジョブを実行するためにキューをポーリングする必要があるカスタム python スクリプトがありました。
この方法を取る前に、独自のセキュリティを展開し、appengine タスクキュー呼び出しに対する単純な Web ラッパーを作成するオプションもあります。これに対処した後、そのルートに行きたくなりましたが、これが機能しているので、今のところ使用しています。
マシンのセットアップ
アカウントの設定
Google Cloud Consoleを使用して、登録済みアプリを作成します (まだ持っていない場合は、AppEngine プロジェクト -> API と認証 -> 登録済みアプリをクリックします。名前とアプリケーション タイプを入力し、デフォルトを受け入れます。が作成されたら、後で使用できるようにクライアント ID とクライアント シークレットをメモします。
また、同意画面を更新します (API と認証 -> 同意画面)。この同意画面は、初めて oauth 資格情報を設定する場合にのみ必要になることに注意してください。電子メール アドレスと製品名を入力する必要があります (ホームページの URL も入力しました)。
OAuth クレデンシャルの生成
資格情報ファイルを 1 回生成するだけで、Python スクリプトでの今後の呼び出しに使用されます。ブラウザーを開いて資格情報ファイルを生成するこの python コードを実行します。このコードのリファレンスはこちらです。
from oauth2client.tools import run
from oauth2client.client import OAuth2WebServerFlow
from oauth2client.file import Storage
import gflags
FLAGS = gflags.FLAGS
storage = Storage('credentials.json')
flow = OAuth2WebServerFlow(client_id='<your_client_id>',
client_secret='<your_client_secret>',
scope='https://www.googleapis.com/auth/taskqueue',
redirect_uri='urn:ietf:wg:oauth:2.0:oob')
credentials = run(flow, storage )
Taskqueue 呼び出しを行う
上記の oauth ステップで使用したメール アドレスを使用して、 AppEngine queue.yamlにプル キューを追加したことを確認してください。
from oauth2client.tools import run
from oauth2client.client import OAuth2WebServerFlow
from oauth2client.file import Storage
from apiclient.discovery import build
import httplib2
storage = Storage('credentials.json')
credentials = storage.get()
http = httplib2.Http()
http = credentials.authorize(http)
task_api = build('taskqueue', 'v1beta2')
tasks = task_api.tasks().lease(project='<your appengine project>',taskqueue='<pull queue name>', numTasks=1, leaseSecs=600).execute(http=http)
task = tasks['items'][0]
payload = task['payloadBase64']
payload = base64.b64decode(payload)
#then do your work and delete the task when done
task_api.tasks().delete(project='s~<your appengine project>',taskqueue='<pull queue name>', task=task['id']).execute(http=http)
タスク キューAPI リファレンス
- delete 呼び出しのプロジェクト名の前にあるプレフィックス「s~」に注意してください。これを追加した場合にのみ機能し、バグだと思います。
2014 年 7 月 1 日更新
したがって、実際には、サーバー間呼び出しを行う簡単な方法があります。この方法では、「フロー」(Google へのログオン) を使用してアクセス キーを取得する必要はありません。
マシンのセットアップ
アカウントの設定
- Google Cloud Consoleを使用して、登録済みアプリを作成します (まだ持っていない場合は、AppEngine プロジェクト -> API & Auth -> Credentials をクリックします。[新しいクライアント ID の作成] をクリックし、サービス アカウントを指定して、[クライアント ID の作成] をクリックします。ダウンロード ボックスがポップアップして秘密鍵をダウンロードし、これをコード ディレクトリ (または client_key.p12 として保存した場所) に保存します。Web インターフェイスで、クライアント ID と電子メールをメモします。
上記の資格情報コードを置き換えます
from oauth2client.client import SignedJwtAssertionCredentials
email = '<***>.gserviceaccount.com'
f = file('client_key.p12', 'rb')
key = f.read()
f.close()
credentials = SignedJwtAssertionCredentials(email,
key,
scope='https://www.googleapis.com/auth/taskqueue')