AWS Fargate에서 Amazon Elastic Container Service(Amazon ECS) 태스크로부터 데이터베이스를 연결하려고 합니다.
해결 방법
다음 단계를 완료하기 전에 Fargate에서 실행 중인 Amazon ECS 클러스터와 Amazon Relational Database Service(Amazon RDS) 데이터베이스가 있는지 확인합니다. Amazon ECS와 Amazon RDS에 통신 문제가 있는 경우 Amazon EC2 시작 유형과 Amazon RDS 데이터베이스에 대한 Amazon ECS 태스크 간 연결 문제 해결을 참조하세요.
참고: 다음 해결 방법은 MySQL을 엔진 유형으로 사용합니다.
태스크를 데이터베이스에 연결
1. MySQL 데이터베이스에 연결하는 Python 스크립트를 생성합니다.
다음 예제 rds.py 스크립트는 Amazon CloudWatch에 대한 데이터베이스 연결 결과를 출력합니다.
import pymysql
import 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)
except Exception as e:
print ("Connection unsuccessful due to "+str(e))
참고: ENDPOINT, USER 및 PASS를 사용자 데이터베이스 값으로 바꿉니다.
2. 이미지를 어셈블하는 데 필요한 명령이 포함된 Dockerfile을 생성합니다. 예를 들어, 다음과 같습니다.
FROM python
RUN pip install pymysql cryptography
COPY rds.py /
CMD [ "python", "/rds.py" ]
중요: rds.py 스크립트와 Dockerfile은 동일한 폴더에 배치해야 합니다.
3. Amazon ECR 리포지토리를 생성한 다음, 해당 리포지토리에 Docker 이미지를 푸시합니다.
4. 태스크 정의를 생성한 다음, 2단계의 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"
}
참고: 태스크 정의에서 ENDPOINT, USER 및 PASS 환경 변수 값을 설정합니다. 이러한 값을 환경 변수로 직접 전달하거나 AWS Secrets Manager의 보안 암호에서 검색할 수 있습니다. 자세한 내용은 보안 암호 또는 민감한 정보를 Amazon ECS 태스크의 컨테이너에 안전하게 전달하려면 어떻게 해야 하나요?를 참조하세요.
5. Amazon ECS 콘솔을 열고 탐색 창에서 [태스크 정의(Task Definitions)]를 선택합니다.
6. 태스크 정의를 선택하고 [작업(Actions)]을 선택한 다음 [태스크 실행(Run Task)]을 선택합니다.
7. [시작 유형(Launch type)]에서 [FARGATE]를 선택합니다.
8. [클러스터(Cluster)]에서 태스크 정의에 대한 클러스터를 선택합니다.
9. [태스크 수(Number of tasks)]에 복사한 태스크 수를 입력합니다.
10. [VPC 및 보안 그룹(VPC and security groups)] 섹션의 [클러스터 VPC(Cluster VPC)]에서 Amazon Virtual Private Cloud(Amazon VPC)를 선택합니다.
11. [서브넷(Subnets)]에서 사용자 서브넷을 선택합니다.
12. [보안 그룹(Security groups)]에서 하나 이상의 보안 그룹을 선택합니다.
13. [태스크 실행(Run Task)]을 선택합니다.
rds.py 스크립트는 태스크를 중지하고 다음 메시지를 반환합니다.
Essential container in task exited.
태스크가 데이터베이스에 연결되어 있는지 확인합니다.
1. Amazon ECS 콘솔을 엽니다.
2. 탐색 창에서 [클러스터(Clusters)]를 선택하고 사용자 클러스터를 선택합니다.
3. [태스크(Tasks)] 탭을 선택합니다.
4. [원하는 태스크 상태(Desired task status)]에서 [중지됨(Stopped)]을 선택하여 중지된 태스크 목록을 표시합니다.
5. 중지된 태스크를 선택합니다.
6. 중지된 태스크의 [세부 정보(Details)] 탭에 있는 [컨테이너(Containers)] 섹션에서 확장 아이콘을 선택합니다.
7. [CloudWatch에서 로그 보기(View logs in CloudWatch)]를 선택합니다.
Amazon CloudWatch 콘솔에 다음 메시지가 표시됩니다.
Connection successful to [Your Endpoint]
관련 정보
MySQL DB 인스턴스 생성 및 MySQL DB 인스턴스의 데이터베이스에 연결