Skip to content

[Hosting] monorepo에서 amplify continuous deployment를 세팅하는 현실적인 방법

TaeSeong Park edited this page Jun 12, 2020 · 1 revision

Amplify 빌드 이미지는 생각보다 똑똑하지 않다

Amplify의 빌드 이미지 안에는 아무런 AWS credential 정보가 없는 상태이다.

빌드 할 때 aws-exports.js를 계속 못 찾는 이유이다..

그래서 amplify pull 커맨드를 써서 받아와야 하고, ACCESS_KEY_ID와 SECRET_ACCESS_KEY 등의 민감 정보가 주입된 것을 파라미터로 붙여야 한다.

그렇게 진행하는 방법은 amplify headless mode이다.

직접적으로 amplify.yml에 저런 커맨드를 넣어서 20차례 가량 따옴표를 넣어보고 빼보고, newline을 넣어보고 뺴 보았으나 자꾸 에러를 뱉어서 배포가 되지 않았다.

답답해서 amplify-console repository의 issue#750에 정리해 올려놓았다.

그동안 포기할까 다른 방법을 또 강구해볼까 하다가 마지막으로 생각 해 낸 것이 쉘 스크립트를 활용 해 보자 이다.

amplify project file을 얻기 위한 쉘 스크립트 생성

Amplify 자체 환경변수 를 참고하여 주의해서 네이밍을 하도록 한다

amplify-pull.sh

#!/usr/bin/env bash

AMPLIFY="'{\
\"projectName\":\"${PROJECT_NAME}\",\
\"appId\":\"${AWS_APP_ID}\",\
\"envName\":\"${ENV_NAME}\",\
\"defaultEditor\":\"code\"\
}'"
AWSCLOUDFORMATIONCONFIG="{\
\"configLevel\":\"project\",\
\"useProfile\":false,\
\"profileName\":\"default\",\
\"accessKeyId\":\"${ACCESS_KEY_ID}\",\
\"secretAccessKey\":\"${SECRET_ACCESS_KEY}\",\
\"region\":\"${REGION}\"\
}"
PROVIDERS="'{\
\"awscloudformation\":${AWSCLOUDFORMATIONCONFIG}\
}'"

cmd="amplify pull --amplify ${AMPLIFY} --providers ${PROVIDERS} --yes"
echo $cmd
eval $cmd

그리고 amplify.yml에다가 위의 쉘 스크립트를 실행시키는 커맨드를 추가토록 한다.

version: 0.1
frontend:
  phases:
    preBuild:
      commands:
        - cd frontend/kendra-button-front
        - chmod +x amplify-pull.sh
        - ./amplify-pull.sh
    build:
      commands:
        - find . -name "aws-exports.js"
        - yarn
        - yarn build
  artifacts:
    baseDirectory: frontend/kendra-button-front/src/out
    files:
      - '**/*'
  cache:
    paths: []

그러면 빌드도 잘 되고, 배포가 잘 된다..

다른 방법

아얘 aws-exports.js를 쉘 스크립트로 만들어 버리는 것이다.

나에게 맞는 환경변수를 맞춰놓고,

aws-resource-maker.sh

#!/usr/bin/env bash

file="aws-exports.js"
echo "const awsmobile = {" >> $file
echo "    \"aws_project_region\": \"${REGION}\"," >> $file
echo "    \"aws_cognito_identity_pool_id\": \"${COGNITO_IDENTITY_POOL_ID}\"," >> $file
echo "    \"aws_cognito_region\": \"${COGNITO_REGION}\"," >> $file
echo "    \"aws_user_pools_id\": \"${USER_POOLS_ID}\"," >> $file
echo "    \"aws_user_pools_web_client_id\": \"${USER_POOLS_WEB_CLIENT_ID}\"," >> $file
echo "    \"oauth\": {}" >> $file
echo "};" >> $file
echo ""
echo "export default awsmobile;" >> $file

cat $file

amplify.yml

version: 0.1
frontend:
  phases:
    preBuild:
      commands:
        - cd frontend/kendra-button-front
        - chmod +x aws-resource-maker.sh
        - ./aws-resource-maker.sh
    build:
      commands:
        - find . -name "aws-exports.js"
        - yarn
        - yarn build
  artifacts:
    baseDirectory: frontend/kendra-button-front/src/out
    files:
      - '**/*'
  cache:
    paths: []