Рубрики
Uncategorized

Непрерывный AWS усиливает развертывание

Достаточно ли два блога подобных подобных теме, чтобы называть это серией блога? Допустим да и продолжайте нашу … Помечено с AWS, DevOps, Bash, Cloud.

Достаточно ли два блога подобных подобных теме, чтобы называть это серией блога? Давайте скажем, да и продолжайте наше путешествие в мире развертывания предприятия, где вы не можете использовать уже сделанные интеграции автоматизации Evens, из-за конфигурации компании VPN.

Опять не круто.

Во всяком случае, нахождение решений проблем — это навык # 1 программного обеспечения инженера, поэтому давайте погрузимся о том, как решать этому. AWS Amplify — это сервис для мобильных и веб-приложений для мобильных и веб-приложений, но функция, который получил мой интерес, является статический хостинг. Я хотел использовать усиление, чтобы развернуть Nuxt.js Статическое приложение, со встроенным глобальным доступом и интеграцией на экосистему AWS, усиление — отличная альтернатива для NetLify и Vercel для компаний, таких как большие счета-фактуры хостинга. Усилительнее быть довольно недавним (2018), я жестко было бы проще развернуть на нем, чем на упругой фасоне, но я был замечательно неверным.

Мне очень много времени потребовалось слишком много времени, чтобы написать сценарий развертывания для него, поскольку документация не пропускает много важной информации, вероятно, потому что я один из немногих людей на Земле, которые не могут использовать встроенную интеграцию репозитории для включения автоматического Развертывание.

Сценарий развертывания, с которым я оказался из 10 шагов, да, 10 шагов:

  • Создание .zip. архив
  • Убедитесь, что точно такой же архив уже развернут
  • Загрузить архив на S3
  • Проверьте состояние последней работы усилителя
  • Остановить последнюю работу, если она все еще работает
  • Создать усиление развертывания
  • Загрузить архив AWS Amplify Url развертывания URL
  • Начать развертывание
  • Опрос статус задания развертывания до конца
  • Убедитесь, что развертывание успешно

Вот полный пример для проекта Nuxtjs:

#!/bin/bash

archive="archive.zip"
s3_bucket="elasticbeanstalk-eu-west-3-something"
amplify_id="something"
git_branch=$(git rev-parse --abbrev-ref HEAD)

if [ -f "$archive" ] ; then
    printf "Delete previously created archive\n"
    rm "$archive"
fi

# We create the Nuxtjs dist/ build directory  
printf "Make bundle build\n"
yarn run build

# Create the archive of the dist/ directory
printf "Create the code archive\n"  
zip -q -r $archive dist/*

# Check that the latest archive on s3 is not the same as the one we just created
# to avoid useless deployments
printf "Generate current deploy checksum\n"
CURRENT_MD5=$(find dist/ -type f -exec md5sum {} \; | sort -k 2 | md5sum)

printf "Verify latest deploy checksum\n"
LATEST_MD5=$(aws s3api head-object --bucket $s3_bucket --key $archive \
  | jq -r '.Metadata.md5')

if [ "$CURRENT_MD5" = "$LATEST_MD5" ]; then
    # No deploy required
    printf "The Latest project version is already deployed\n"
else
    # Save the archive to S3 with the MD5 checksum in metadata to simplify 
    # checks in the next deployment
    aws s3 cp $archive s3://$s3_bucket/ --metadata md5="$CURRENT_MD5"

    # Get the latest Amplify job
    printf "Get latest Amplify job\n"
    aws amplify list-jobs \
        --app-id $amplify_id \
        --branch-name $git_branch \
        --max-items 1 > amplify-last-job.json

    # Store latest Amplify job status and id
    AMPLIFY_LAST_JOB_STATUS=$(cat amplify-last-job.json \
        | jq -r '.jobSummaries[].status')
    AMPLIFY_LAST_JOB_ID=$(cat amplify-last-job.json \
        | jq -r '.jobSummaries[].jobId')

    # Kill the last job if it is still pending from a previous deploy
    if [ "$AMPLIFY_LAST_JOB_STATUS" = "PENDING" ]; then
        aws amplify stop-job \
            --app-id $amplify_id \
            --branch-name $git_branch \
            --job-id $AMPLIFY_LAST_JOB_ID
    fi

    # Create a Amplify deployment
    printf "Create Amplify deployment\n"
    aws amplify create-deployment \
        --app-id $amplify_id \
        --branch-name $git_branch > amplify-deploy.json

    # Retrieve the newly created deployment ID and zip upload URL
    AMPLIFY_ZIP_UPLOAD_URL=$(cat amplify-deploy.json | jq -r '.zipUploadUrl')
    AMPLIFY_JOB_ID=$(cat amplify-deploy.json | jq -r '.jobId')

    # Upload the archive to Amplify
    printf "Upload archive\n"
    curl -H "Content-Type: application/zip" \
        $AMPLIFY_ZIP_UPLOAD_URL \
        --upload-file $archive

    # Start the deployment
    printf "Start Amplify deployment\n"
    aws amplify start-deployment \
        --app-id $amplify_id \
        --branch-name $git_branch \
        --job-id $AMPLIFY_JOB_ID

    while :
    do
        sleep 10

        # Poll the deployment job status every 10 seconds until it's not pending
        # anymore
        STATUS=$(aws amplify get-job \
            --app-id $amplify_id \
            --branch-name $git_branch \
            --job-id $AMPLIFY_JOB_ID \
            | jq -r '.job.summary.status')

        if [ $STATUS != 'PENDING' ]; then
          break
       fi
    done

    printf "Amplify deployment status $STATUS\n"
fi

Я скучаю по этому времени, когда все это заняло, был FTP, а пучок PHP-файлов.

Оригинал: «https://dev.to/nicolasbeauvais/continuous-aws-amplify-deployment-22d0»