【dynamodb】 로컬 환경의 데이터를 GUI로 확인할 때까지

개요



dynamodb를 로컬 환경에서 취급하고 있을 때 GUI에서 데이터 확인을 하고 싶었으므로, 조사해 보았더니 dynamodb-admin 라는 것이 있었다. 이번에는 dynamodb-admin 를 다룰 수 있는 instructure/dynamo-local-admin 라는 Docker 이미지가 있었기 때문에 이것을 이용한다.
여기서 사용하는 소스 코드는 GitHub 에 업하고 있으므로 자유롭게 부디.

주제



dynamo-local-admin 시작



docker-compose를 이용해 기동한다. yml 파일과 실행 명령은 다음과 같습니다.

docker-compose.yml
version: "3"
services:
    dynamo-admin:
        image: instructure/dynamo-local-admin
        ports:
            - "8008:8000"

시작 명령
docker-compose up -d --build

부팅 후 http://localhost:8008에 액세스하면 즉시 사용할 수 있습니다.



테이블을 만들고 GUI로 확인



실제로 프로그램에서 테이블을 작성해 본다. 나는 프로그램으로부터 테이블 작성을 실시하는데 고생을 했으므로 이 부분은 마찬가지로 고생하고 있는 분에게의 메세지가 되면 기쁘다. 어디에 어려움을 겪었는지 boto3의 인스턴스를 만들 때 endpoint_url=http://localhost:8008 되어 있는지 확인 CLI에서 테이블 확인 코드도 아래에 게시). 조사해 보면 몇개의 기사로 인스턴스를 작성할 때 region_name 를 지정하고 있는 기사가 있었으므로 시험에 us-east-1 버렸다. 완전히 초기화되어 버렸다.
그러나 이것으로부터 동일한 endpoint_url=http://localhost:8008 테이블을 확인할 수 있는 것이 아닐까 생각했다.
다만, 어느 공간을 모르기 때문에 region_name 컨테이너에 들어가 보아 region_name 를 조사해 보았더니 instructure/dynamo-local-admin 가 설정되어 있었다. 그 때문에, 컨테이너를 조작하는 측에서는 region_name (은)는 http://localhost:8000 (을)를 하고 있으면(자) 좋다고 생각했다(8008->8000에 포워딩 되고 있기 때문에 8008을 지정).
실제로 region_name 의 설정에서는 잘 가지 않고 http://localhost:8008 를 지정하면 GUI 로부터 확인을 할 수 있게 되었다.
이것으로부터, http://localhost:8008 의 지정은 주소라든지 포워딩 된다든가 그런 것은 아니고, 어떤 네임스페이스로 해 가는가 하는 이야기인 뿐이라, 알았다. 뭐 확실히 http://localhost:8000 를 지정하고 있는 시점에서 조작하고 싶은 컴퓨터를 지정하고 있는 것이므로, region_name 그럼 그 컴퓨터의 어느 공간을 이용할까라는 이야기가 되기 때문에 포워딩 되지 않는 것도 당연하다 라고 납득했다. 라는 것은, 어쩌면 endpoint_url 컨테이너측에서도 컨테이너를 조작하는 측에서도 region_name 같은 헨테코인 문자열을 instructure/dynamo-local-admin 에 넣어도 접속할 수 있을지도, 라고 시도하고 있지 않았지만 생각했다.

이하에 테이블을 작성하는 프로그램을 기재한다.

create_movies.py
import boto3

client = boto3.client('dynamodb', endpoint_url='http://localhost:8008', region_name='localhost:8000')

table = client.create_table(
    TableName='Movies',
    KeySchema=[
        {
            'AttributeName': 'id',
            'KeyType': 'HASH'  #Partition key
        },
        {
            'AttributeName': 'title',
            'KeyType': 'RANGE'  #Sort key
        }
    ],
    AttributeDefinitions=[
        {
            'AttributeName': 'id',
            'AttributeType': 'N'
        },
        {
            'AttributeName': 'title',
            'AttributeType': 'S'
        },

    ],
    ProvisionedThroughput={
        'ReadCapacityUnits': 10,
        'WriteCapacityUnits': 10
    }
)


테이블 작성의 프로그램을 움직이면 다음과 같이 되어 테이블이 작성되고 있는 것을 확인할 수 있었다.



또한, 여기까지 오면 나머지는 간단하고, 데이터의 입력은 이하로 할 수 있다.

movies_put.py
import boto3

dynamodb = boto3.resource('dynamodb', region_name='localhost:8000', endpoint_url="http://localhost:8008")

table = dynamodb.Table('Movies')

response = table.put_item(
  Item={
      'id': 1,
      'title': "hello",
  }
)

기타



테이블 일람은 이하에서 확인할 수 있다.

show_all.py
import boto3

client = boto3.client('dynamodb', endpoint_url='http://localhost:8008', region_name='localhost:8000')
response = client.list_tables()
print(response)

참고

좋은 웹페이지 즐겨찾기