728x90
반응형
NCP 에서는 지원하지 않는 기능!
AWS 에서는 시크릿 키를 관리할 수 있는 기능을 제공해준다.
사용자의 이름, 암호 주소, 데이터베이스 이름, 포트 등을 설정하게 끔 되어 있는데 이 부분에는 사용하는 DB 에 대한 정보를 넣어준다.
Region : ap-northeast-2 ← 아시아 / 서울
생성후 python3 로 바꿔서 샘플코드 복사 붙여넣기
common → aws.py
# Use this code snippet in your app.
# If you need more information about configurations
# or implementing the sample code, visit the AWS docs:
# <https://aws.amazon.com/developer/language/python/>
import boto3
from botocore.exceptions import ClientError
def get_secret():
secret_name = "like/lion/lecture"
region_name = "us-east-1"
# Create a Secrets Manager client
session = boto3.session.Session()
client = session.client(
service_name='secretsmanager',
region_name=region_name
)
try:
get_secret_value_response = client.get_secret_value(
SecretId=secret_name
)
except ClientError as e:
# For a list of exceptions thrown, see
# <https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html>
raise e
# Decrypts secret using the associated KMS key.
secret = get_secret_value_response['SecretString']
# Your code goes here.
boto3 설치
pip install boto3
python3 freeze | grep boto3 >> requirements.txt
이제 데이터베이스에 접근할 때 AWS 에서 인증키를 보유하고 있는 사람인지에 대한 검증이 들어간다.
from common.aws import get_secret
AWS_SECRET_NAME= os.getenv("AWS_SECRET_NAME", "like/lion/lecture")
secret = get_secret(AWS_SECRET_NAME)
...
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': secret.get('dbname', 'postgres'),
'USER': secret.get('username', 'postgres'),
'PASSWORD': secret.get('password', 'postgres'),
'HOST': secret.get('host', 'db'),
'OPTIONS' : {
'options': '-c search_path=likelion,public'
},
}
}
...
# Use this code snippet in your app.
# If you need more information about configurations
# or implementing the sample code, visit the AWS docs:
# <https://aws.amazon.com/developer/language/python/>
import json
import boto3
from botocore.exceptions import ClientError
# secret_name 을 str 형태로 받아버리면 ?
def get_secret(secret_name:str) -> dict:
# secret_name = "like/lion/lecture"
region_name = "us-east-1"
# Create a Secrets Manager client
session = boto3.session.Session()
client = session.client(
service_name='secretsmanager',
region_name=region_name
)
try:
get_secret_value_response = client.get_secret_value(
SecretId=secret_name
)
except ClientError as e:
# For a list of exceptions thrown, see
# <https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html>
raise e
# Decrypts secret using the associated KMS key.
secret = get_secret_value_response['SecretString']
# Your code goes here.
return json.loads(secret)
서버에서 사용해보기
서버에서도 AWS CLI 를 설치하고 access Key 를 등록해야한다.
curl "<https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip>" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --version
#
$ aws --version
aws-cli/2.13.7 Python/3.11.4 Linux/5.4.0-99-generic exe/x86_64.ubuntu.20 prompt/off
AWS 인증
aws configure
#
AWS Access Key ID
AWS Secret Access Key
Default region name
Default output format
새 암호키 생성
settings.py 에서 똑같이 적용 시키되 주소를 /prod 로 !
docker-compose -f ../docker-compose.prod.yml up --build -d
docker-compose logs
lion-app-dc | Connecting to database...
lion-app-dc | PostgreSQL is available
lion-app-dc | secret: {"username":"lion","password":"postgres123!@#","engine":"postgres","host":"175.45.205.103","port":"5432","dbname":"lionforum"}
lion-app-dc | type of secret: <class 'str'>
lion-app-dc | secret: {'username': 'lion', 'password': 'postgres123!@#', 'engine': 'postgres', 'host': '175.45.205.103', 'port': '5432', 'dbname': 'lionforum'}
lion-app-dc | type of secret: <class 'dict'>
로그를 보면 제대로 주고 받고 있는지 확인이 기능
728x90
반응형
'Dev. > Cloud' 카테고리의 다른 글
[Cloud] CD - NCP: Rollback tag (0) | 2023.08.22 |
---|---|
[Cloud] CD - NCP: Load balancer (0) | 2023.08.22 |
[Cloud] 배포 - NCP : 클라우드 서버에서 DB 띄우기: NoSQL (0) | 2023.08.15 |
[Cloud] 배포 - NCP : 로컬 서버에서 DB 띄우기: NoSQL (0) | 2023.08.14 |
[Cloud] 배포 - NCP : 클라우드 서버에서 DB 띄우기 (0) | 2023.08.14 |
댓글