AWS Fargate의 Amazon Elastic Container Service(Amazon ECS) 작업에서 데이터베이스에 연결하고 싶습니다.
해결 방법
사전 요구 사항:
**참고:**다음 예에서는 MySQL을 엔진 유형으로 사용합니다. 엔진 유형에 대한 자세한 내용은 Amazon RDS 시작하기를 참조하세요.
태스크를 데이터베이스에 연결
다음 단계를 완료합니다.
- MySQL 데이터베이스에 연결하는 Python 스크립트를 생성합니다. 다음 예제 rds.py 스크립트는 Amazon CloudWatch에 대한 데이터베이스 연결 결과를 전송합니다.
import pymysqlimport os
Database_endpoint = os.environ['ENDPOINT']
Username = os.environ['USER']
Password = os.environ['PASS']
try:
print("Connecting to " + Database_endpoint)
db = pymysql.connect(host = Database_endpoint, user = Username, password = Password)
print("Connection successful to " + Database_endpoint)
db.close()
except Exception as e:
print("Connection unsuccessful due to " + str(e))
**참고:**엔드포인트, 사용자, 패스를 데이터베이스 값으로 바꿉니다.
- 이미지를 어셈블하기 위해, 필요한 명령이 포함된 Dockerfile을 생성합니다. 예를 들면 다음과 같습니다.
FROM pythonRUN pip install pymysql cryptography
COPY rds.py /
CMD [ "python", "/rds.py" ]
중요: rds.py 스크립트와 도커파일을 동일한 폴더에 저장하세요.
- Amazon ECR 리포지토리를 만든 다음, 도커 이미지를 해당 리포지토리로 푸시합니다.
- 작업 정의를 생성한 다음, Docker 이미지를 컨테이너 이미지로 추가합니다. 예를 들면 다음과 같습니다.
{
"executionRoleArn": "arn:aws:iam::account_ID:role/ecsTaskExecutionRole",
"containerDefinitions": [
{
"name": "sample-app",
"image": "YOUR-ECR-Repository-URL",
"essential": true
}
],
"requiresCompatibilities": [
"FARGATE"
],
"networkMode": "awsvpc",
"cpu": "256",
"memory": "512",
"family": "sample-app"
}
참고: 작업 정의에서 엔드포인트, 사용자 및 패스 환경 변수의 값을 설정합니다. 이러한 값을 환경 변수로 직접 전달하거나 AWS Secrets Manager의 보안 정보에서 값을 검색할 수 있습니다. 자세한 내용은 Amazon ECS 작업에서 비밀 또는 민감한 정보를 컨테이너에 안전하게 전달하려면 어떻게 해야 하나요?를 참조하세요.
- Amazon ECS 콘솔을 엽니다.
- 탐색 창에서 작업 정의를 선택합니다.
- 작업 정의를 선택하고, 작업을 선택한 다음, 작업 실행을 선택합니다.
- 시작 유형에서 FARGATE를 선택합니다.
- 클러스터의 경우 작업 정의에 사용할 클러스터를 선택합니다.
- 작업 수에 복사하려는 작업 수를 입력합니다.
- VPC 및 보안 그룹 섹션에서, 클러스터 VPC의 경우 Amazon Virtual Private Cloud(VPC)를 선택합니다.
- 서브넷의 경우, 서브넷을 선택합니다.
- 보안 그룹의 경우, 보안 그룹을 하나 이상 선택합니다.
- 작업 실행을 선택합니다.
rds.py 스크립트는 작업을 중지하고 다음 메시지를 반환합니다.
"Essential container in task exited."
태스크가 데이터베이스에 연결되어 있는지 확인
다음 단계를 완료합니다.
- Amazon ECS 콘솔을 엽니다.
- 탐색 창에서 Clusters를 선택한 다음 클러스터를 선택합니다.
- 태스크 탭을 선택합니다.
- 원하는 작업 상태에서 중지된 작업 목록을 확인하려면 중지됨을 선택합니다.
- 중지된 작업을 선택합니다.
- 중지된 작업의 세부 정보 탭의 컨테이너 섹션에서 해당 섹션을 확장합니다.
- CloudWatch에서 로그 보기를 선택합니다.
CloudWatch 콘솔에 다음 메시지가 표시됩니다.
"Connection successful to [사용자의 엔드포인트]"