728x90

개요

NCP에 API요청을 보내기 위해서는 시그니처, 타임스탬프, 시크릿키, 엑세스키 등이 필요하다. 여기서 시그니처와 타임스탬프가 얻기가 조금 까다로웠다. 그래서 다른 분들은 이런 시행착오를 겪지 마시라고 이렇게 적어본다.

 

시그니처 생성

네이버 클라우드 플랫폼에서 제공하는 API 공식 문서에서 제공하는 Bash 스크립트이다. 이것을 사용해서 시그니처를 생성하자

function makeSignature() {
	nl=$'\\n'

	TIMESTAMP=$(echo $(($(date +%s%N)/1000000)))
	ACCESSKEY="{accessKey}"				# access key id (from portal or Sub Account)
	SECRETKEY="{secretKey}"				# secret key (from portal or Sub Account)

	METHOD="GET"
	URI="/photos/puppy.jpg?query1=&query2"

	SIG="$METHOD"' '"$URI"${nl}
	SIG+="$TIMESTAMP"${nl}
	SIG+="$ACCESSKEY"

	SIGNATURE=$(echo -n -e "$SIG"|iconv -t utf8 |openssl dgst -sha256 -hmac $SECRETKEY -binary|openssl enc -base64)
}

{accessKey}, {secretKey}는 각자 계정에서 발급 받은 키를 넣는다.

그리고 URI에는 공식 문서에서 각자 원하는 요청을 찾는다. 나는 SourceBuild에 "빌드 시작" API를 사용하고 싶어서 찾은 결과 밑에와 같다.

API URL에 보면 {SOURCEBUILD_API_URL}이 보일 것이다. 이것은 각 API의 개요에 들어가 보면 나와 있다.

https://sourcebuild.apigw.ntruss.com/api/v1  <- 이게 {SOURCEBUILD_API_URL} 가 된다.

 

이제 위에 Bash로 돌아가서 그러면 URI에 무엇을 넣어야 할것인가?

바로 

/api/v1/project/{projectId}/build

이거를 넣어야 한다. (여기서 많이 헤맸다)

시그니처만 잘 생성 됐다면 바로 완성 코드를 보자.

 

완성 코드

function makeSignature() {
	nl=$'\\n'

	TIMESTAMP=$(echo $(($(date +%s%N)/1000000)))
	ACCESSKEY="{accessKey}"				# access key id (from portal or Sub Account)
	SECRETKEY="{secretKey}"				# secret key (from portal or Sub Account)

	METHOD="GET"
	URI="/photos/puppy.jpg?query1=&query2"

	SIG="$METHOD"' '"$URI"${nl}
	SIG+="$TIMESTAMP"${nl}
	SIG+="$ACCESSKEY"

	SIGNATURE=$(echo -n -e "$SIG"|iconv -t utf8 |openssl dgst -sha256 -hmac $SECRETKEY -binary|openssl enc -base64)

	my_list=("${TIMESTAMP}","${SIGNATURE}")
	
	echo "${my_list[@]}"
}

ret_value=$(makeSignature)

IFS=',' read -ra vStr <<< "$ret_value"

curl -i -X POST \
-H "x-ncp-apigw-timestamp:${vStr[0]}" \
-H "x-ncp-iam-access-key:{accessKey}" \
-H "x-ncp-apigw-signature-v2:${vStr[1]}" \
'https://sourcebuild.apigw.ntruss.com/api/v1/project/{projectId}/build'

 

이렇게 하면 API call이 된다. 

 

※ 그리고 시그니처를 생성할 때 TIMESTAMP와 API 요청할 때 넣는 TIMESTAMP가 같아야 한다.

 

 

참고

- https://api.ncloud-docs.com/docs/common-ncpapi

- https://api.ncloud-docs.com/docs/devtools-sourcebuild-build

728x90

문제 발생

Github Actions로 bash 를 사용해서 api 요청을 해야하는 작업 도중 다른 bash 컴파일러에서는 되는데 깃헙 액션에서만 안되어서 곰곰히 고민했는데 케릭터 하나가 빠져서 되지 않았다.

 

문제 해결

- 수정 전

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: checkout
        uses: actions/checkout@v3

      - name: trigger to NCP
        shell: bash
        run: 
          function makeSignature() {
            nl=$'\\n'

 

- 수정 후

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: checkout
        uses: actions/checkout@v3

      - name: trigger to NCP
        shell: bash
        run: |
          function makeSignature() {
            nl=$'\\n'

 

수정 전, 후에서 차이를 알겠는가? "run" 오른쪽에 '|' 가 있고 없고의 차이이다. '|'가 있어야 bash가 돌아가는 것이었다.. 이것 때문에 얼마나 삽질을 했는지..ㅠ

728x90

Pinpoint가 필요한 이유

시스템의 성능을 분석/진단/추적하는 플랫폼으로써 애플리케이션의 상태를 진단해준다. 클라우드에 배포 되어 있는 애플리케이션이 잘 작동하고 있는지, 현재 상태는 어떤지, 문제가 일어났다면 문제 발생 지점도 한 눈에 쉽게알 수 있게 해준다.

 

적용기

1. Repository 생성 클릭

 

2. Repository 설정

레포지토리 이름을 설정하고 다음을 누른다.

그리고 관리자 ID, 비밀번호, 이름을 설정해준다. 설정한 관리자 ID와 비밀번호는 추후 Pinpoint 대시보드에 접속할 때 사용된다.

 

3. 레포지토리 생성 후 화면

레포지토리가 생성 된 후 상태에 “운영중”이라고 뜨면 완전히 생성된 것이다.

그 이후 URL 컬럼에 “바로가기”를 클릭하면

 

이 화면이 나올 것인데, 2번에서 설정한 정보들을 입력해주어야 한다.

 

4. 로그인 후

다음 순서대로 하자

첫 번째, 맨 오른쪽에 톱니바퀴를 눌러준 후

두 번째, installation을 클릭한다.

 

5. installation 클릭 후

이런 화면이 나온다.

다음 순서대로 하자

  1. 원하는 애플리케이션이름을 설정 후 “Check” 클릭
  2. 원하는 Agent ID를 설정 후 “Check” 클릭  (1, 2번을 하면 5번에 결과가 반영 된다. 반영된 5번은 좀이따 4번 까지 다 마친 후 사용한다.)
  3. 해당 url을 Pinpoint를 적용하고자 하는 서버에 가서
    • 다음 명령어로 원하는 곳에 다운 받아주자. (나는 /usr/libs 에 다운 받았다.)
    • 그리고 아래 명령어로 압축을 풀어주자.
      • tar -zxvf agent.tar.gz
  4. 압축을 풀면
    • pinpoint-agent-2.2.3-NCP-RC1 폴더가 생긴다.
    • 해당 폴더에 가면 pinpoint.licence 파일이 보일건데 이 파일에 특정 key를 넣어야한다. (참고로 pinpoint.licence 파일이 비어있었다. 거기에 key를 채워 넣자.) 
      • vim pinpoint.licence
      • 명령어를 입력 한 후 위 사진 4번에 있는 바코드에 마우스를 갖다대면 key가 보일 것이다. 그것을 pinpoint.licence 파일에 write하고 저장하자.
  5. 저장을 한 후
    • java -jar -javaagent:pinpoint폴더 경로/pinpoint-bootstrap-2.2.3-NCP-RC1.jar -Dpinpoint.applicationName=1번에서 설정한 앱이름 -Dpinpoint.agentId=2번에서 설정한 아이디 서버파일.jar
    • 이 명령어를 터미널에 입력하고 엔터를 누르면 Pinpoint가 설정된 서버가 실행된다.
      • 나같은 경우는 다음 명령어를 입력했다.
      • nohup /usr/lib/jdk-16.0.2/bin/java -jar -javaagent:/pinpoint-agent-2.2.3-NCP-RC1/pinpoint-bootstrap-2.2.3-NCP-RC1.jar -Dpinpoint.applicationName=skka -Dpinpoint.agentId=aipooh8882 /root/deploy/build/libs/skka-0.0.1-SNAPSHOT.jar &
      • nohup으로 백그라운드에서 실행하게끔 했다. 왜냐하면 SourceDeploy에서 백그라운드로 하지 않으면 영원히 Deploy작업이 끝나지 않았기 때문이다.
  6. 서버가 돌아간 후 다시 대시보드로 와서

애플리케이션 목록에 방금 자신이 클라우드에서 실행한 애플리케이션이 생긴것을 볼 수 있다.

클릭하면 애플리케이션 상태를 보여주는 대시보드를 볼 수 있다.

 

 

참고: https://guide.ncloud-docs.com/docs/pinpointcloud-repository

+ Recent posts