AWS Lambda에서 EC2 인스턴스에서 세운 postgres Docker 컨테이너에 액세스

5824 단어 EC2람다psycopg2AWS

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 첫 체험이었기 때문에 감동했다(웃음)

그런 다음 동일한 런타임 psycopg2-3.8의 이름을 psycopg2로 변경하고 압축합니다.

레이어에 추가하면 좋다고 생각했지만, import 할 수 없었기 때문에 (왜?) 이하의 액션 버튼으로부터 zip 파일을 업로드했다.



액션 버튼을 눌러 업로드.



그런 다음 lambda_function.py를 만듭니다.
현재의 상태는 이런 느낌.



VPC 설정



콘솔 화면을 조금 아래로 스크롤하면 VPC 설정란이 있다.



편집을 클릭하고 VPC, 서브넷(하나만 선택한다고 주의되지만 무시), 보안 그룹을 설정한다.
보안 그룹은 기본값을 사용했습니다. (EC2 인스턴스에 붙인 보안 그룹도 기본이었기 때문에 이것으로 좋은 것 같습니다)

액세스 권한



Lambda 함수를 생성할 때 AWS가 새로 생성한 역할에 대한 두 가지 정책 AmazonEC2FullAccessAWSLambdaVPCAccessExecutionRole 를 부착했다. 사실은 더 엄격하게 하는 것이 좋다고 생각한다. 자세한 내용은 공식 문서에 썼다.



후에는 테스트 버튼을 눌러 아래 그림과 같이 결과가 나오면 OK.



참고 기사



공식 문서
htps : // / cs. 아 ws. 아마존. 이 m / 그럼 _ jp / ぁ mb다 / ㅁ st / dg / 콘후 쿠라 치온 - vpc. HTML

psycopg2를 로컬 또는 AWS Lambda에서 동일하게 사용
htps : // 이 m / re d 쇼가 / ms / 195d3 세 3 후아 5f29171c0

Docker로 PostgreSQL 환경 구축
htps : // m / r r / ms / b44653 a 5 fcd1072852 c0

좋은 웹페이지 즐겨찾기