Фон
Я должен признать, что я не фанат Codepipeline AWS. Даже сейчас, после нескольких проектов, где я сильно использовал Codepipeline, я все еще не большой поклонник. Для меня это довольно простое решение. Конечно, это может сделать работу, но в моем частном мире я использовал Travisci раньше и сейчас… Azure DevOps для развертывания AWS.
И одним из отличных преимуществ Azure DevOps являются артефакты, где вы можете хранить и публиковать свои пакеты. Что -то, что мы пропустили в AWS Codepipeline долгое время. До нынешнего момента.
AWS CODEARTIFACT
Недавно давно AWS объявил об этой услуге. Теперь это официально. И это действительно отличная новость. До сегодняшнего дня нам пришлось использовать обходные пути (давайте назовем это таким образом). S3 Buckets или создайте решение для артефактов самостоятельно.
Это больше не нужно. AWS CodearTifact занимает отличное место в службах CodePipeline. Первые 2G хранимых пакетов бесплатны (ежемесячно), также первые 100 тыс. Запросы бесплатны.
Давайте начнем
Что важно понять, это концепция домена. Больше объяснений в блоге Стива Робертса, здесь https://aws.amazon.com/blogs/aws/software-package-management-with-aws-codeartifact/ Анкет Важно помнить, что домен объединяет все репозитории. Таким образом, мы потребляем пакет из репозитория или даже несколько репозиториев, но на самом деле этот пакет хранится только один раз по домену. Это экономит пространство и возможные затраты.
Домен
Итак, давайте создадим домен! Мы можем сделать это из GUI AWS, но на этот раз я буду работать с CLI. Конечно, я предполагаю, что вы знаете, как настроить CLI, если нет, есть много статей, как это сделать. Помните, вам нужна новейшая версия AWSCLI, я рекомендую использовать версию 2.
Давайте проверим наши домены сейчас:
aws codeartifact list-domains { "domains": [] }
Вы должны получить пустой JSON.
Итак, пришло время создать первый домен. Процесс очень прост
aws codeartifact create-domain --domain mytestdomain { "domain": { "name": "mytestdomain", "owner": "012345678", "arn": "arn:aws:codeartifact:eu-west-1:0123456789:domain/mytestdomain", "status": "Active", "createdTime": "2020–06–28T10:46:50.193000+02:00", "encryptionKey": "arn:aws:kms:eu-west-1:0123456789:key/aaaa1111-aa11–1234–1234-aa11aa11aa11", "repositoryCount": 0, "assetSizeBytes": 0 } }
Вот и все! Давай проверем снова
aws codeartifact list-domains { "domains": [ { "name": "mytestdomain", "owner": "0123456789", "status": "Active", "encryptionKey": "arn:aws:kms:eu-west-1:0123456789:key/aaaa1111-aa11–1234–1234-aa11aa11aa11" } ] }
aws codeartifact describe-domain --domain mytestdomain { "domain": { "name": "mytestdomain", "owner": "0123456789", "arn": "arn:aws:codeartifact:eu-west-1: 0123456789:domain/mytestdomain", "status": "Active", "createdTime": "2020–06–28T10:46:50.193000+02:00", "encryptionKey": "arn:aws:kms:eu-west-1:0123456789:key/aaaa1111-aa11–1234–1234-aa11aa11aa11", "repositoryCount": 0, "assetSizeBytes": 0 } }
Репозиторий
Домен уже создан, поэтому мы можем создать репозиторий.
Но сначала нам нужно (снова), чтобы посмотреть на строительство здесь. Мы в домене. Теперь мы можем создать репозиторий, а затем репозиторий вверх по течению. По этому подходу вы можете отделить репозитории проекта (от Upstreams) и при этом иметь возможность получить доступ ко всем им с одной конечной точкой.
Итак, давайте сначала создадим репозиторий.
aws codeartifact create-repository --domain mytestdomain --repository "mymainrepo" --description "Main repository" { "repository": { "name": "mymainrepo", "administratorAccount": "01234567890", "domainName": "mytestdomain", "domainOwner": "01234567890", "arn": "arn:aws:codeartifact:eu-west-1: 01234567890:repository/mytestdomain/mymainrepo", "description": "Main repository", "upstreams": [], "externalConnections": [] } }
Конечно, мы можем посмотреть на это, используя:
aws codeartifact list-repositories aws codeartifact describe-repository --domain mytestdomain --repository mymainrepo
Чтобы войти в репозиторий, вы можете следовать инструкции, доступной в консоли графического интерфейса
Команда подключения проста (но длинная)
aws codeartifact login --tool pip --repository mymainrepo --domain mytestdomain --domain-owner 01234567890 Successfully logged in to codeartifact for pip.
Для настройки самого PIP нам нужно запустить две дополнительные команды. Первым, чтобы получить токен авторизации:
aws codeartifact get-authorization-token --domain mytestdomain --domain-owner 0123456789 --query authorizationToken --output text
Во -вторых, использовать его в нашей конфигурации PIP
pip config set global.index-url [https://aws:HEREGOESTHETOKEN@mytestdomain-0123456789.d.codeartifact.eu-west-1.amazonaws.com/pypi/mymainrepo/simple/](https://aws:HEREGOESTHETOKEN@mytestdomain-0123456789.d.codeartifact.eu-west-1.amazonaws.com/pypi/mymainrepo/simple/) Writing to C:\Users\pawel\AppData\Roaming\pip\pip.ini
Как видите, я использую PowerShell здесь.
Теперь мы можем проверить, если наш PIP обновлен, запустив список конфигурации PIP. Вы должны увидеть там свой знак.
Вверх по течению репозиторий
Давайте следуем за хорошей практикой, и теперь пришло время создать репозитории вверх по течению. Мы добавим NPM и PIP за один выстрел,
aws codeartifact update-repository --repository mymainrepo --domain mytestdomain --domain-owner 0123456789 --upstreams repositoryName=pypi-store repositoryName=npm-store { "repository": { "name": "mymainrepo", "administratorAccount": "0123456789", "domainName": "mytestdomain", "domainOwner": "0123456789", "arn": "arn:aws:codeartifact:eu-west-1:0123456789:repository/mytestdomain/mymainrepo", "description": "Main repository", "upstreams": [ { "repositoryName": "pypi-store" }, { "repositoryName": "npm-store" } ], "externalConnections": [] } }
Благодаря этому мы можем работать с одной конечной точкой для всех наших пакетов NPM и PIP. Если это работает для вас — это зависит от вас.
Помните о заказе поиска здесь. Если вы запрашиваете пакет, ваш запрос проходит через восходящие по течению в заказе Create-Repository (или обновлении-хранилище). Если вам любопытно, каков порядок, просто запустите Repair-Repository, и вы увидите вверх по течению в порядке поиска.
Внешние соединения
Когда мы заканчиваем наши репо, мы можем создавать внешние соединения с ними. Давайте сделаем это для обоих наших репо:
Для PIP:
aws codeartifact associate-external-connection --domain mytestdomain --domain-owner 0123456789 --repository pypi-store --external-connection "public:pypi"
И для NPM:
aws codeartifact associate-external-connection --domain mytestdomain --domain-owner 0123456789 --repository npm-store --external-connection "public:npmjs"
Хотя возможно, что вы получите ошибку, так как это соединение уже существует.
Давайте проверим наш новый блестящий репозиторий
Так. Мы готовы проверить наш репо. Мы собираемся установить немного пакета PIP. Я создал пустые виртуальные, поэтому мы можем установить, например, AWSCLI. Что мы ожидаем?
Позвольте мне пройти через эту схему. Мы хотим установить пакет x. Мы настроили нашу PIP на пути, сначала он смотрит на наш AWS CodeArtifact. Если запрашиваемый пакет нет, он подключится к основной публике и загрузите его для нас (со всеми зависимостями). И затем пакет будет установлен из нашего AWS Codeartifact Repo.
Давайте установим наш пакет тогда:
pip install awscli Looking in indexes: [https://aws:****@mytestdomain-0123456789.d.codeartifact.eu-west-1.amazonaws.com/pypi/mymainrepo/simple/](https://aws:****@mytestdomain-043144402336.d.codeartifact.eu-west-1.amazonaws.com/pypi/mymainrepo/simple/) Collecting awscli
Вы легко можете заметить, PIP пытается собрать пакет из нашего репозитория. Теперь пакет установлен, давайте проверим наш репозиторий:
И вуаля! Мы успешно создали, настроили и использовали нашу службу CodeArtifact!
Конечно, наши пакеты могут быть опубликованы в нашем репозитории. AWS Codebuild и Codedeploy могут использовать наш репозиторий. По сути, AWS Codepipeline, наконец, имеет правильное решение для артефактов!
Резюме
Мне очень нравится AWS Codeartifact. Это легко настроить, простой в использовании. Идея с доменами и вверх по течению довольно хорошая.
Сервис быстрый, надежный и управляется AWS. Чего еще ожидать? Я настоятельно рекомендую Codeartifact.
Важно, что его можно использовать снаружи. Не только перекрестный аккунт внутри AWS, но и в качестве правильного репозитория внешних пакетов.
В настоящее время он охватывает репозитории Python, Nodejs и Java (Edit: и C#), но я уверен, что мы скоро получим больше! Я написал эту статью на Medium около года назад. Время для миграции:)
Оригинал: «https://dev.to/pawelpiwosz/aws-codeartifact-the-long-awaited-feature-1lif»