반응형

 

DynodbDB partiQL

NoSQL은 처음이라 

사실 등록, 조회, 수정, 삭제 모두 처음이다.

 

DynamoDB는 기본 키를 사용하여 테이블의 각 항목을 고유하게 식별하므로 등록 시 주의 점은 

기본키만 중복 안되게 하면 됐었다.

 

업데이트 쿼리를 진행하다 보니 하다 보니 아래 문구가 나왔다.

Where clause does not contain a mandatory equality on all key attributes

RDBMS에선 가능한 업데이트가 안된다.

where절엔 구분이 가능한 키 값이 들어가야 된다고 한다.

 

업데이트 후엔 리턴 값 설정이 있다.

  • ALL OLD * - 업데이트 작업 전에 표시된 항목 속성을 모두 반환합니다.
  • MODIFIED OLD * - 업데이트 작업 전에 표시된 업데이트된 속성만 반환합니다.
  • ALL NEW * - 업데이트 작업 후에 표시되는 항목 속성을 모두 반환합니다.
  • MODIFIED NEW * - UpdateItem 작업 후에 표시되는 업데이트된 속성만 반환합니다.

일단은 ALL NEW *  설정으로 사용해보기로 했다.

 

MODIFIED OLD  옵션은 업데이트된 내용을 속성만 반환된다고 했는데, 

실제 변경된 건지 안된 건지 중요해 보이지 않는다. 기존 값과 업데이트 값이 같아도 값이 리턴된다.

기존 값과 업데이트 값이 같든 다르든 해당 업데이트되는 속성은 무조건 업데이트되는 거 같다.

 

업데이트 문에

각 항목마다 SET을 추가해주고, 각 항목이 배열 형식이 있어서 다음과 같은 옵션이 있다.

  • LIST_APPEND: 목록 형식에 값을 추가합니다.
  • SET_ADD: 숫자 또는 문자열 집합에 값을 추가합니다.
  • SET_DELETE: 숫자 또는 문자열 집합에서 값을 제거합니다.

 

 

반응형
반응형

DynomoDB local

dynamoDB 도커로 검색하면 아래 링크로 안내한다.

https://hub.docker.com/r/amazon/dynamodb-local

 

Docker Hub

 

hub.docker.com

 

Simply run docker run -p 8000:8000 amazon/dynamodb-local to execute DynamoDB locally.

 

저걸 믿고 실행한 후  aws-sdk를 이용하여 접속 테스트를 했는데,테이블 목록이 조회도가 안되는 것이다.

 

AWS NoSQL Workbanch로는 접속이 되고 조회가 되는데도 안됐다.

하루 온종일 찾아봤다.

 

docker run -p 8000:8000 amazon/dynamodb-local -jar DynamoDBLocal.jar -inMemory -sharedDb

-inMemory는 필요 없다.

inMemory는 옵션은 도커 껐다 켜면 데이터가 없어지는 거 같다.

 

중요한 건 -sharedDB 요거다.

저거 한 줄 때문에. 2일 정도 고생. 

반응형
반응형

SAM

API 로컬 테스트를 할 수 있게 

로컬에서 구동시켜봤다.

>sam local start-api

 

설치 후 오랜만에 구동해보는 건지 구동이 안됐다.

Traceback (most recent call last):
  File "D:\obj\windows-release\37amd64_Release\msi_python\zip_amd64\runpy.py", 
line 193, in _run_module_as_main
  File "D:\obj\windows-release\37amd64_Release\msi_python\zip_amd64\runpy.py", 
line 85, in _run_code
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\__main__.py", line 12, in <module>
    cli(prog_name="sam")
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\core.py", line 782, in main
    rv = self.invoke(ctx)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\decorators.py", line 73, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\lib\telemetry\metrics.py", line 96, in wrapped
    raise exception  # pylint: disable=raising-bad-type
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\lib\telemetry\metrics.py", line 62, in wrapped
    return_value = func(*args, **kwargs)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\commands\local\start_api\cli.py", line 86, in cli
    parameter_overrides,
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\commands\local\start_api\cli.py", line 142, in do_cli
    aws_profile=ctx.profile,
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\commands\local\cli_common\invoke_context.py", line 136, in __enter__
    if not self._container_manager.is_docker_reachable:
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\local\docker\manager.py", line 47, in is_docker_reachable
    self.docker_client.ping()
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\docker\client.py", line 187, in ping
    return self.api.ping(*args, **kwargs)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\docker\api\daemon.py", line 166, in ping
    return self._result(self._get(self._url('/_ping'))) == 'OK'
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\docker\utils\decorators.py", line 46, in inner
    return f(self, *args, **kwargs)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\docker\api\client.py", line 230, in _get
    return self.get(url, **self._set_request_timeout(kwargs))
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\requests\sessions.py", line 543, in get
    return self.request('GET', url, **kwargs)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\requests\sessions.py", line 530, in request
    resp = self.send(prep, **send_kwargs)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\requests\sessions.py", line 643, in send
    r = adapter.send(request, **kwargs)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\requests\adapters.py", line 449, in send
    timeout=timeout
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\urllib3\connectionpool.py", line 677, in urlopen
    chunked=chunked,
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\urllib3\connectionpool.py", line 392, in _make_request
    conn.request(method, url, **httplib_request_kw)
  File "D:\obj\windows-release\37amd64_Release\msi_python\zip_amd64\client.py", line 1252, in request
  File "D:\obj\windows-release\37amd64_Release\msi_python\zip_amd64\client.py", line 1298, in _send_request
  File "D:\obj\windows-release\37amd64_Release\msi_python\zip_amd64\client.py", line 1247, in endheaders
  File "D:\obj\windows-release\37amd64_Release\msi_python\zip_amd64\client.py", line 1026, in _send_output
  File "D:\obj\windows-release\37amd64_Release\msi_python\zip_amd64\client.py", line 966, in send
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\docker\transport\npipeconn.py", line 32, in connect
    sock.connect(self.npipe_path)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\docker\transport\npipesocket.py", line 23, in wrapped
    return f(self, *args, **kwargs)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\docker\transport\npipesocket.py", line 72, in connect
    raise e
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\docker\transport\npipesocket.py", line 59, in connect
    0
pywintypes.error: (2, 'CreateFile', '지정된 파일을 찾을 수 없습니다.')

위와 같이 에러가 표시되며 실행이 안됐다.

왜 실행이 안되지 하며

다시 설치 과정을 다시 짚어보다가 도커 실치 과정을 봤다.

도커를 실행하고 나니 제대로
서비스가 올라갔다.

 

Mounting HelloWorldFunction at http://127.0.0.1:3000/hello [GET]
You can now browse to the above endpoints to invoke your functions. You do not 
need to restart/reload SAM CLI while working on your functions, changes will be reflected instantly/automatically. You only need to restart SAM CLI if you update your AWS SAM template
2020-09-09 23:25:23  * Running on http://127.0.0.1:3000/ (Press CTRL+C to quit)

도커가 실행되지 않고 있어서 로컬 실행이 안되었던 것이다. 

 

서비스가 올라간 후 해당 서비스로 브라우저로 접속해보면
http://127.0.0.1:3000/hello
아래와 같이 도커 이미지를 마운트 하는 작업을 그때서야 시작하고 
도커에서 공유 폴더 수락하겠냐고 경고가 나오면 수락해줬다.

 

2020-09-09 23:30:52 127.0.0.1 - - [09/Sep/2020 23:30:52] "GET / HTTP/1
.1" 403 -
2020-09-09 23:30:52 127.0.0.1 - - [09/Sep/2020 23:30:52] "GET /favicon
.ico HTTP/1.1" 403 -
Invoking app.lambdaHandler (nodejs12.x)

Fetching lambci/lambda:nodejs12.x Docker container image.....................................................................................................................................................................................................................................................................................
Mounting C:\Users\ej\daonstar\nuxt\sam-app\.aws-sam\build\HelloWorldFunction as /var/task:ro,delegated inside runtime container
START RequestId: 01f99077-c224-1bdf-84fa-21ea94f2387b Version: $LATEST

END RequestId: 01f99077-c224-1bdf-84fa-21ea94f2387b
REPORT RequestId: 01f99077-c224-1bdf-84fa-21ea94f2387b     Init Duration: 
1312.10 ms      Duration: 6.05 ms       Billed Duration: 100 ms Memory Size: 128 MB    Max Memory Used: 40 MB  
No Content-Type given. Defaulting to 'application/json'.
2020-09-09 23:31:36 127.0.0.1 - - [09/Sep/2020 23:31:36] "GET /hello HTTP/
1.1" 200 -
2020-09-09 23:31:36 127.0.0.1 - - [09/Sep/2020 23:31:36] "GET /favicon
.ico HTTP/1.1" 403 -

 

 

로컬에 도커 대시보드의 화면이다.

관련 도커 이미지가 올라와 있다.

도커 대시보드 SAM local start-api

 

기본 예제를 시행해서인지 생각보단 쉽다.

결과는 브라우저에 아래와 같이 잘 나왔다.

{"message":"hello world"}

 

 

반응형

+ Recent posts