LoginSignup
0
2

More than 3 years have passed since last update.

AWS LambdaでEC2インスタンスで立てたpostgres Dockerコンテナにアクセスする

Posted at

EC2にpostgres Dockerを立てる

EC2でDocker postgresを立てる。
以下の記事が参考になった。

docker run -d --name postgres -e POSTGRES_PASSWORD=test -p 5432:5432 postgres

Lambda 関数

lambda のランタイムには Python 3.8 を用いた。
コードは以下の通り。
xxx.xxx.xxx.xxx にはEC2インスタンスのプライベートIPを入力する。


import json
import psycopg2


def execute_sql(sql):
    connection = psycopg2.connect(host='xxx.xxx.xxx.xxx',
                                  user='postgres',
                                  password='test',
                                  dbname='postgres',
                                  port=5432)
    cursor = connection.cursor()
    cursor.execute(sql)
    result = cursor.fetchall()
    return result


def lambda_handler(event, context):
    sql = 'select * from testtable;'
    result = execute_sql(sql)
    print(result)
    return {
        'statusCode': 200,
        'body': json.dumps(result)
    }

psycopg2 import準備

上記コードだけでは psycopg2 を使用できない。

をForkし、ローカルにリポジトリを取り込む。Fork 初体験だったので感動した(笑)

次にランタイムの同じ psycopg2-3.8 の名前を psycopg2 に変更し圧縮する。

レイヤーに追加すれば良いと思ったのだが、importできなかったので(なぜ?)以下のアクションボタンからzipファイルをアップロードした。

image.png

アクションボタンを押してアップロード。

image.png

続いて、lambda_function.py を作成する。
現在の状態はこんな感じ。

image.png

VPC の設定

コンソール画面を少し下にスクロールすると VPC 設定欄がある。

image.png

編集をクリックし、VPC、サブネット(一つだけしか選択しないと注意されるが無視)、セキュリティグループを設定する。
セキュリティグループはデフォルトを用いた。(EC2インスタンスに付けたセキュリティグループもデフォルトだったので、これで良いみたい)

アクセス権限

Lambda 関数を作成する際 AWS が新規に作成したロールに 2つのポリシー AmazonEC2FullAccess
AWSLambdaVPCAccessExecutionRole をアタッチした。本当はもっと厳しくした方が良いと思う。詳細は公式ドキュメントに書いてあった。

image.png

後はテストボタンを押して以下の画像のように結果が出ればOK。

image.png

参考記事

公式ドキュメント
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-vpc.html

psycopg2をローカルでもAWS Lambda上でも同じように使う
https://qiita.com/redshoga/items/195d3ce3faa5f29171c0

DockerでPostgreSQL環境を構築する
https://qiita.com/kurkuru/items/b44653a5fcd1072852c0

0
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
0
2