LoginSignup
1
2

More than 5 years have passed since last update.

AppEngineからAWSに接続する

Posted at

諸事情により、AppEngineからAWSに接続することになったのですが、
エラーにより多大な時間を費やしてしまったので、自分用メモを兼ねて。

やりたかったこと

GCP上のAppEngineから、AWS上のDynamoDBに接続。
(無事にAppEngineも東京リージョン使えるようになってよかった!)

GCP側

  • AppEngineのみ
    • standard environment
    • RuntimeはPython 2.7
    • フレームワークはFlask

AWS側

  • DynamoDBのみ

やってみる

AppEngineのコード

app.yaml
application: xxxxxx
module: xxxxx
runtime: python27
version: initial

handlers:
- url: .*
  script: main.app

env_variables:
  AWS_DEFAULT_REGION: 'ap-northeast-1'
  AWS_ACCESS_KEY_ID: 'XXXXXXXXXXX'
  AWS_SECRET_ACCESS_KEY: 'XXXXXXXX'
main.py
from flask import Flask, request, jsonify
import logging, json
import boto3

app = Flask(__name__)

@app.route('/<user_id>')
def dynamotest(user_id):
    dynamodb = boto3.resource("dynamodb")
    table = dynamodb.Table('table_name')
    response = table.get_item(Key = {"user_id":user_id})
    logging.info(response)
    return jsonify(Result=response)

実行してみる

エラー!
NameError: global name 'ssl' is not defined.

同じコードをローカルだったりGCEだったりで動かすと全く問題ないのに、AppEngineだと動かない。

解決方法

app.yamlに以下を追記すれば解決

libraries:
- name: ssl
  version: "latest"

分かってしまえばどうってことないのですが、なんだかんだこれでむっちゃ時間を浪費しました。
sslのライブラリは明示的に書かないとダメっぽい。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2