DevOps
  • Introduction
  • Setting
    • Terminal
      • Tmux
    • WSL+Ubuntu
    • [NeoVIM]
      • install & 활용방법
      • error 처리
      • LazyVIM
        • install & 활용방법
    • ssh
    • mysql
    • package관리
  • Fundamental(basic)
    • Network
      • https
  • [GitOps]
    • [SCM]
      • [Github]
        • center-managed
      • bitbucket
      • AWS-codeCommit
  • roadmap
    • devops
    • kubernetes
    • AWS
    • MLOPS
  • Cloud
    • [AWS]
      • aws sso script
      • tagging 자동화
      • 동일cidr에서 VPC 연결
      • 무중단서비스를 위한 고려사항
    • [GCP]
      • [GCP] GCP의 VPC
      • [GCP] GCP의 ALB
      • [GCP] OIDC와 OAUTH를 활용한 github action
      • [GCP] Composer 설명
      • [GCP] gmail-api
      • [GCP] DataLake
      • [GCP] Cloud 관리형 계정&role
      • [[GCP] private환경
        • DNS 설정으로 google api 및 colab-notebook 사용 하기
        • intelligence 설정으로 google api 및 colab-notebook 사용 하기
  • [kubernetes]
    • [cloud 기반]
      • csr
  • InfraAsCode
    • terraform
  • 코드로 그리는 다이어그램
    • CodeAsDiagram
      • example
    • Mermaid
    • PDFtoImage
  • AutoMation
  • [ETC]
    • Magic_Trackpad Window설치
Powered by GitBook
On this page

AutoMation

PreviousPDFtoImageNext[ETC]

Last updated 1 year ago

octet api token

💡 octet 을 api 로 연동 하기 위해서는 JWT토큰이 필요 하며 토큰의 수명은 3개월이다 따라서 3개월 이전에 토큰을 교환 해야 한다. 기존에는 구글 달력에 등록을 하고 3개월이 되기 전에 수작업으로 진행을 하다보니 시기를 놓치게 되면 바로 장애로 이어지는 문제점이 있었다.

이에 Octet API 토큰을 자동으로 갱신해 주는 배치 시스템을 개발 하였다.

octet api token = octet id + pw + 만료일자로 구성된것으로 추측 된다.

dev / stg 같은 경우 같은 Domain Endpoint로 되어 있지만 토큰 값에 id가 포함되어 있어

실제 트랜젝션이 account로 분리 된다.

  • octet api token 자동 변경 script

    #!/bin/bash
    Slack_URI1="https://hooks.slack.com/services/TCU73U2KC/B03U"
    Slack_URI2="https://hooks.slack.com/services/TCU73U2KC/B04GU:
    DOMAIN=https://dev.blockchainapi.pro
    env=dev
    REGION=ap-northeast-2
    OT="dorian-service-${env}-secret_octet_api_key_app"
    
    # Octet 기존 Token 값 조회
    
    echo "AWS SSM octet key loading"
    OCTET_API_KEY=$(aws ssm get-parameter --region ${REGION} --name "${OT}" --query "Parameter.Value" --with-decryption --output text)
    
    TOKEN_INFO=$(curl -X GET "${DOMAIN}/v1/user/tokeninfo" -H "Authorization: ${OCTET_API_KEY}" |jq -r '.formatDate')
    
    echo "After TOKEN Set Time =  ${TOKEN_INFO}" 
    
    sleep 3
    
    # Octet 신규 Token 발급 및 교체
    
    TOKEN_SET=v1/user/issue-token 
    NEW_TOKEN=$(curl  -X POST "${DOMAIN}/${TOKEN_SET}" -H "Authorization: ${OCTET_API_KEY}"  | jq -r '.token')
    sleep 3
    
    echo "PUT SSM octet token value"
    aws ssm put-parameter --region ${REGION} --name "${OT}" --value "${NEW_TOKEN}" --type "SecureString" --key-id "alias/dorian-service-${env}" --overwrite
    
    sleep 5
    
    OT="dorian-service-${env}-secret_octet_api_key_app"
    OCTET_API_KEY=$(aws ssm get-parameter --region ${REGION} --name "${OT}" --query "Parameter.Value" --with-decryption --output text)
    
    NEW_TOKEN_INFO=$(curl -X GET "${DOMAIN}/v1/user/tokeninfo" -H "Authorization: ${OCTET_API_KEY}" |jq -r .formatDate)
    echo "New TOKEN Set Time =  ${NEW_TOKEN_INFO}" 
    
    SVC=service-${env}-an2-dorian-service-ecs-app
    aws ecs update-service --cluster  dorian-service-${env}  --service ${SVC}  --task-definition  task-${env}-an2-dorian-service-ecs-app --force-new-deployment --no-cli-pager
    
    sleep 5
    
    #update-service 검증
    
    COUNT=0
    while [ $COUNT -lt 15 ]
      do
        STATUS=(`aws ecs describe-services --cluster dorian-service-${env} --services $SVC --no-cli-pager | jq -r '.services[].deployments[].status'`)
        ROLLOUTSTATE=(`aws ecs describe-services --cluster dorian-service-${env} --services $SVC --no-cli-pager | jq -r '.services[].deployments[].rolloutState'`)
        UPDATEDTIME=(`aws ecs describe-services --cluster dorian-service-${env} --services $SVC --no-cli-pager | jq -r '.services[].deployments[].updatedAt' | cut -d '.' -f 1`)
        echo ${UPDATEDTIME[0]}
        UTCTOKST=$(date +%Y-%m-%d\ %H:%M:%S -d "${UPDATEDTIME[0]} 9 hour")
        echo $UTCTOKST
          if [ ${STATUS[0]} == PRIMARY ]
            then
              if [ ${ROLLOUTSTATE[0]} == COMPLETED ]
                then
                  MESSAGE=$(echo "재기동 완료 시간은 $UTCTOKST 입니다.")
    
    MSG_TEXT="
    [ ${env} ]Octet API Token Change! 
    Before Token Set Date : ${TOKEN_INFO}
    After Token Set Date  : ${NEW_TOKEN_INFO}
    New Token Value : ${OCTET_API_KEY}
    1. Octet API 토큰 업데이트 완료
    2. ECS 서비스 업데이트 완료
      -> ${MESSAGE}
    서비스 점검 부탁 드립니다.
    "
    
                  curl -X POST --data-urlencode "payload={\"channel\": \"#infra_monitoring\", \"username\": \"DevOpsBot\",  \"text\":  \"${MSG_TEXT}\" , \"icon_emoji\": \":sonic:\"}" $Slack_URI1
                  curl -X POST --data-urlencode "payload={\"channel\": \"#dorian-service-infra-monitoring-dev-stg\", \"username\": \"DevOpsBot\",  \"text\":  \"${MSG_TEXT}\" , \"icon_emoji\": \":sonic:\"}" $Slack_URI2
                  break
                else 
                COUNT=$(($COUNT+1))
                echo $COUNT
              fi
          fi
        sleep 60
      done
    
      if [ $COUNT == 15 ]
        then
    MSG_TEXT_FAIL="
    [ ${env} ]Octet API Token Change Failed! 
    -> ECS 재기동 유효 시간이 초과 되었습니다. K-Stadium DevOps 담당자 확인 부탁 드립니다.
    "
    
          curl -X POST --data-urlencode "payload={\"channel\": \"#infra_monitoring\", \"username\": \"DevOpsBot\",  \"text\":  \"${MSG_TEXT_FAIL}\" , \"icon_emoji\": \":sonic:\"}" $Slack_URI1
          curl -X POST --data-urlencode "payload={\"channel\": \"#dorian-service-infra-monitoring-dev-stg\", \"username\": \"DevOpsBot\",  \"text\":  \"${MSG_TEXT_FAIL}\" , \"icon_emoji\": \":sonic:\"}" $Slack_URI2
      fi
  • octet api token 자동 변경을 위한 Dockerfile

    FROM  amazon/aws-cli
    CMD mkdir /app
    WORKDIR /app
    COPY . .
    ENV REGION ap-northeast-2
    ENV DOMAIN https://dev.blockchainapi.pro
    ENV env dev
    RUN ["yum", "-y", "install", "jq"]
    ENTRYPOINT ["/bin/bash", "/app/octet-token-change.sh"]

배치 → 옥텟 키 토큰 변경 코드 분석