CosmosDB 및 devcontainers로 로컬 개발 개선
5275 단어 cosmosdbazurevscodejavascript
물론
NODE_TLS_REJECT_UNAUTHORIZED
로 SSL을 비활성화하는 것은 큰 고통이 아니었지만 더러운 작은 해결 방법처럼 느껴졌고 닷넷 프로젝트에도 걸림돌이 되었습니다.FSharp.CosmosDb에서 사용하는 devcontainer에 CosmosDB 에뮬레이터를 추가해야겠다는 생각이 들었습니다. 작업할 때 사이에 사용했던 Azure 리소스를 계속 삭제했기 때문입니다. 그러나 연결 문자열에 대해 계정 호스트를
https://cosmos:8081
로 설정하면 자체 서명된 인증서가 거부되어 쿼리를 수행하지 못합니다.인증서를 설치할 때가 된 것 같습니다.
에뮬레이터는 다음을 사용하여 가져올 수 있는 잘 알려진 엔드포인트에서 인증서를 제공합니다
cURL
.curl -k https://$ipaddr:8081/_explorer/emulator.pem > emulatorcert.crt
하지만 언제 실행해야 하며 Cosmos 에뮬레이터 컨테이너의 IP는 무엇입니까?
인증서 설치
컨테이너가 시작될 때까지 기다려야 하므로
postCreateCommand
파일에서 devcontainer.json
를 사용하고 bash 스크립트를 호출하도록 합니다. bash 스크립트는 다음과 같습니다.#!/usr/bin/env bash
set -euxo pipefail
ipAddress=https://$(docker inspect cosmos -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'):8081
# Try to get the emulator cert in a loop
until sudo curl -ksf "${ipAddress}/_explorer/emulator.pem" -o '/usr/local/share/ca-certificates/emulator.crt'; do
echo "Downloading cert from $ipAddress"
sleep 1
done
sudo update-ca-certificates
에뮬레이터의 IP를 얻기 위해
docker inspect
를 사용하고 docker-compose
에서 컨테이너의 이름을 설정했습니다. , Compose 이름 컨테이너 방식을 기반으로 하지만 이것이 가장 안전함) JSON 응답에서 IP를 가져오는 템플릿을 제공합니다 - cosmos
. 이것은 프로토콜/포트 정보와 결합되어 IP 주소에 대한 변수를 만든 다음 인증서를 described here으로 다운로드하고 설치합니다.연결 정보 설정
인증서가 설치된 상태에서 사용할 수 있도록 연결 문자열 정보를 설정하는 것이 편리할 수 있습니다. 처음에는 환경 변수(bash 변수로 IP가 있으므로)를 사용하고
{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}
NuGet 패키지와 함께 로드하여 bash 스크립트 끝에 Microsoft.Extensions.Configuration.EnvironmentVariables
를 추가하거나 변수는 dotnet 구성 시스템으로 구문 분석하기가 더 쉽지만 export ipAddress
s에서 변수를 내보낼 수 없습니다(this issue 참조).테이블에서 벗어났기 때문에 대체 솔루션은 정보를 디스크의 파일로 덤프하는 것입니다. 내 프로젝트에 대한 dotnet 접근 방식은 다음과 같습니다. 프로젝트 요구 사항에 맞게 파일(및 해당 콘텐츠)을 조정하기만 하면 됩니다.
if [! -f ./samples/FSharp.CosmosDb.Samples/appsettings.Development.json]
then
echo '{ "Cosmos": { "EndPoint" : "'$ipAddress'" } }' >> ./samples/FSharp.CosmosDb.Samples/appsettings.Development.json
fi
참고:
postCreateCommand
파일에 코스모스에 대한 액세스 키가 있지만 원하는 경우 여기에 덤프할 수도 있습니다.이를 통해 컨테이너가 시작되면 Cosmos에 대한 연결이 애플리케이션에서 사용할 준비가 됩니다.
요약
이 게시물에서는 VS Code devcontainer를 사용하여 앱 컨테이너와 Docker CosmosDB 에뮬레이터를 나란히 실행하는 방법을 살펴보았습니다. 내 프로젝트에 대해 게시한 전체 정의can be found here .
이제 이 작업을 수행하는 방법을 알아냈으므로 Node.js 앱에 대한 SSL 유효성 검사를 비활성화할 필요가 없도록 다시 돌아가서 다른 저장소를 개조하여 로컬에서 실행하는 것이 더 안전하도록 할 것입니다. .
부록
이 게시물을 작성하고 일부 JavaScript/Node.js 프로젝트로 돌아가서 확인해보니 유효하지 않은 인증서로 인해 여전히 실패하고 있는 것으로 나타났습니다. Linux에서 실행되는 dotnet 애플리케이션은 인증서 저장소를 존중하지만 Node.js 앱은 그렇지 않은 것 같습니다. 따라서 read the docs fully 환경 변수를 사용하여 인증서를 명시적으로 추가해야 하므로
docker-compose
를 NODE_EXTRA_CA_CERTS
에 추가했습니다. ) 섹션"NODE_EXTRA_CA_CERTS": "/usr/local/share/ca-certificates/emulator.crt"
파일... 한숨.
Reference
이 문제에 관하여(CosmosDB 및 devcontainers로 로컬 개발 개선), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/azure/improved-local-dev-with-cosmosdb-and-devcontainers-4ip4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)