[PYTHON] Créer un référentiel privé avec AWS CodeArtifact

Juin 2020 Les frères AWS Code renaissent soudainement. Son nom est AWS CodeArtifact. Un service de référentiel privé qui vous permet de stocker, publier et partager en toute sécurité des packages logiciels. Il est déjà généralement disponible dans la région de Tokyo et est compatible avec VPC Endpoint.

:rocket: Introducing AWS CodeArtifact: A fully managed software artifact repository service https://aws.amazon.com/jp/about-aws/whats-new/2020/06/introducing-aws-codeartifact-a-fully-managed-software-artifact-repository-service/

Des outils et services similaires incluent JFrog Artifactory et GitHub Package Registry, Je pense qu'Azure Artifacts est célèbre.

De quoi es-tu heureux

Il existe deux principaux avantages d'un gestionnaire de référentiels comme AWS CodeArtifact.

1. Cache du référentiel officiel

Lors du développement de logiciels, créez un écosystème tel que des gestionnaires de packages pour différentes langues Il est devenu courant de l'utiliser.

CodeArtifact peut être utilisé comme proxy pour les gestionnaires de packages correspondants tels que maven et npm. Les administrateurs peuvent contrôler l'accès aux packages et sont approuvés pour une utilisation au sein de l'organisation Seuls les derniers packages seront disponibles pour les développeurs.

En outre, selon les politiques de votre organisation, vous ne pourrez peut-être pas accéder librement au référentiel public. En utilisant VPC Endpoint, il a été mis en cache dans CodeArtifact sans passer par Internet. Vous pouvez accéder au package. Vous pouvez également vous attendre à une réduction du temps de téléchargement.

Depuis juin 2020, les connexions externes suivantes sont prises en charge. Cela semble être le minimum par rapport aux services d'autres entreprises, mais j'attends avec impatience les futures mises à jour.

Type Description
npm npm public registry
Python Python Package Index
Maven Maven Central
Maven Google Android repository
Maven Gradle plugins repository
Maven CommonsWare Android repository

2. Gérez vos propres packages

CodeArtifact fournit un emplacement central pour stocker les packages créés au sein de votre organisation. Parce que les packages stockés peuvent être partagés en toute sécurité et mis à la disposition des gestionnaires de packages existants Cela réduira le temps de développement.

Concepts importants à retenir dans CodeArtifact

Dépôt

Vous pouvez créer plusieurs référentiels dans votre compte. (Maximum 100) Un référentiel peut contenir des packages dans plusieurs langues prises en charge. Le référentiel est l'unité du point de terminaison lorsqu'il est accédé à partir de chaque gestionnaire de packages.

domaine

CodeArtifact est un concept unique. Gérez chaque référentiel dans un seul domaine.

Chaque package est utilisé via un référentiel, mais les données réelles ne sont pas un référentiel Il est enregistré dans le domaine. Packages spécifiques dans plusieurs référentiels au sein du même domaine Même si vous l'utilisez, il ne sera enregistré qu'une seule fois quel que soit le nombre de référentiels. En d'autres termes, les frais de stockage ne seront pas dupliqués.

Les domaines sont également disponibles pour les comptes croisés. Créez un domaine commun pour votre organisation Chaque compte peut utiliser son propre référentiel. image.png

Dépôt en amont

Chaque référentiel peut être défini sur un autre référentiel en tant que référentiel en amont. Cela en fait un référentiel commun au sein de l'organisation, un référentiel pour les équipes de développement, etc. Même s'ils sont séparés, le client peut y accéder à partir d'un seul point de terminaison. image.png

Politique de domaine et politique de référentiel

Il peut être défini dans le format json familier.

Paramètres de stratégie de domaine pour les comptes au sein de votre organisation ou des principaux IAM spécifiques Vous pouvez autoriser l'accès au domaine.

De même, si vous définissez une politique de ressources, pour les utilisateurs qui peuvent accéder au référentiel et pour le référentiel Vous pouvez spécifier les actions qui peuvent être effectuées. Par conséquent, dans le cas de l'exemple de configuration ci-dessus, seule l'autorisation de lecture au sein de l'organisation est définie dans le référentiel partagé de l'organisation. Le référentiel de l'équipe de développement peut être configuré pour autoriser uniquement les membres de développement à lire et écrire.

Essayer

Création de domaines et de référentiels

Sélectionnez Créer un référentiel en haut de la console CodeArtifact. image.png Entrez le nom du référentiel et dans les paramètres du référentiel public en amont Sélectionnez le référentiel officiel à mettre en cache. image.png Sélectionnez ensuite le domaine dans lequel vous souhaitez enregistrer le référentiel. Nous n'avons pas encore créé de domaine pour ce compte, alors spécifiez un nom de domaine et créez-en un nouveau. Des paramètres supplémentaires vous permettent de choisir la clé KMS à utiliser pour le chiffrement, CMK gérée ou spécifique. image.png Enfin, vérifiez les paramètres et créez un référentiel et un domaine. image.png Comme vous pouvez le voir dans le flux de packages, dans l'assistant de création de référentiel Seuls les référentiels publics en amont sont disponibles pour la sélection. Pour définir un autre référentiel comme référentiel en amont, cliquez sur Modifier après avoir créé le référentiel Doit être réglé. image.png

Comment connecter le référentiel

AWS CLI v2.0.21 ou version ultérieure est requise pour obtenir les informations de connexion du référentiel créé. Vous pouvez vérifier la commande de connexion spécifique pour chaque outil à partir de l'écran du référentiel de la console. image.png Par exemple, dans le cas de pip, c'est comme suit. L'option --domain-owner est facultative pour le compte qui a créé le domaine.

$ aws codeartifact login --tool pip --repository my-repo --domain my-domain --domain-owner 0123456789012
Successfully logged in to codeartifact for pip.

En interne, il semble que l'ensemble de configuration de pip définit automatiquement global.index-url. Vous pouvez voir les points de terminaison du référentiel avec les informations d'identification dans la liste de configuration pip. Ces informations d'identification expirent après 12 heures et doivent être effectuées à chaque fois.

Vous pouvez également utiliser la commande aws codeartifact get-authorisation-token pour obtenir uniquement le jeton d'authentification. Vous pouvez également pipette manuellement l'ensemble de configuration.

Il semble que la commande de déconnexion n'est pas préparée, donc pour l'annuler Il semble qu'il n'y ait pas d'autre choix que d'exécuter pip config unset global.index-url.

Cache du référentiel public

Si vous essayez d'installer l'AWS SAM CLI, vous verrez qu'elle est téléchargée à partir de CodeArtifact.

$ pip install -U aws-sam-cli
Collecting aws-sam-cli
  Downloading https://my-domain-123456789012.d.codeartifact.ap-northeast-1.amazonaws.com/pypi/my-repo/simple/aws-sam-cli/0.52.0/aws_sam_cli-0.52.0-py3-none-any.whl (443kB)

Vous pouvez également voir qu'il est enregistré dans le référentiel créé sur la console. En fait, le référentiel public en amont, pypi-store, se connecte et met en cache PyPI. image.png

Partager votre propre forfait

Voici le didacticiel du guide de l'utilisateur de Python Packaging Essayez de télécharger un exemple de projet dans CodeArtifact.

Clonez https://github.com/pypa/sampleproject.

$ git clone https://github.com/pypa/sampleproject.git
Cloning into 'sampleproject'...
remote: Enumerating objects: 21, done.
remote: Counting objects: 100% (21/21), done.
remote: Compressing objects: 100% (19/19), done.
remote: Total 441 (delta 7), reused 6 (delta 1), pack-reused 420
Receiving objects: 100% (441/441), 116.64 KiB | 365.00 KiB/s, done.
Resolving deltas: 100% (216/216), done.

Package avec la commande suivante.

$ cd sampleproject
$ python setup.py bdist_wheel

Pour Python, de la ficelle est nécessaire pour télécharger le package, alors installez-le.

$ pip install -U twine

Définissez les informations d'identification de la ficelle avec la commande de connexion. En interne, les paramètres de connexion CodeArtifact sont ajoutés à ~ / .pypirc.

$ aws codeartifact login --tool twine --repository my-repo --domain my-domain
Successfully logged in to codeartifact for twine.

Téléchargez sur CodeArtifact avec la commande suivante.

$ twine upload -r codeartifact dist/*
Uploading distributions to https://my-domain-123456789012.d.codeartifact.ap-northeast-1.amazonaws.com/pypi/my-repo/
Uploading sampleproject-1.3.1-py3-none-any.whl

J'ai pu confirmer qu'il a également été téléchargé sur la console. Vous pouvez facilement partager votre propre package. image.png

référence

** Page produit AWS CodeArtifact ** https://aws.amazon.com/jp/codeartifact/ CodeArtifact User Guide https://docs.aws.amazon.com/codeartifact/latest/ug/welcome.html ** Publier / télécharger une bibliothèque créée en Python vers PyPI ** https://qiita.com/icoxfog417/items/edba14600323df6bf5e0

c'est tout. Je suis heureux que vous puissiez l'utiliser comme référence.

Recommended Posts

Créer un référentiel privé avec AWS CodeArtifact
Créer un référentiel pypi local
Créer une couche pour AWS Lambda Python dans Docker
Créer un répertoire avec python
[AWS] Créer une API avec API Gateway + Lambda
Créez un environnement virtuel avec Python!
Créez un stepper de poisson avec numpy.random
Créer un téléchargeur de fichiers avec Django
Diffusez du contenu privé avec AWS CloudFront
[AWS Hands-on] Créons un service d'identification des célébrités avec une architecture sans serveur!
Créez un DMP privé sans coût initial ni développement avec BigQuery
Comment créer une API de machine learning sans serveur avec AWS Lambda
Créer un décorateur de fonction Python avec Class
Créez une image factice avec Python + PIL.
[Python] Créez un environnement virtuel avec Anaconda
Créons un groupe gratuit avec Python
Créer une application graphique avec Tkinter de Python
Émettre une URL signée avec AWS SQS
Créer un gros fichier texte avec shellscript
Créer une machine virtuelle avec un fichier YAML (KVM)
Créer un compteur de fréquence de mots avec Python 3.4
Comment créer un référentiel à partir d'un média
Créer un voisin le plus proche de connexion avec NetworkX
Créer un service Web avec Docker + Flask
Créez un compteur de voiture avec Raspberry Pi
Créez une image diabolique avec le script de Blender
Créer une matrice avec PythonGUI (zone de texte)
Créer un graphique avec des bordures supprimées avec matplotlib
[AWS] Créez un environnement Python Lambda avec CodeStar et faites Hello World
Créons une fonction de chat avec Vue.js + AWS Lambda + dynamo DB [Paramètres AWS]
Créer un cadre avec un arrière-plan transparent avec tkinter [Python]
[AWS SAM] Créer une API avec DynamoDB + Lambda + API Gateway
Créez un environnement WardPress sur AWS avec Pulumi
Créez un bot avec AWS Lambda qui démarre / arrête automatiquement les instances avec des balises spécifiques
Essayez Tensorflow avec une instance GPU sur AWS
Créer un fichier exécutable GUI créé avec tkinter
Créer un LINE BOT avec Minette pour Python
Créez une interface utilisateur de jeu à partir de zéro avec pygame2!
Créer un fichier PDF avec une taille de page aléatoire
Créer un environnement virtuel avec conda avec Python
Créer une page qui se charge indéfiniment avec python
[Note] Créez une classe de fuseau horaire sur une ligne avec python
Vous pouvez facilement créer une interface graphique même avec Python
Créer un environnement de construction python3 avec Sublime Text3
Installation de Pipenv avec ssh à partir du référentiel Bitbucket privé
Créez un système de synthèse bon marché avec des composants AWS
Créer un babillard avec Heroku, Flask, SQL Alchemy
Créez un tableau de bord pour les appareils réseau avec Django!
Créer une matrice avec PythonGUI (combo tkinter)
Créer une barre de couleurs avec Python + Qt (PySide)
Étapes pour créer un bot Twitter avec Python
Créer un arbre de décision à partir de 0 avec Python (1. Présentation)
Créer une nouvelle page en confluence avec Python
Créer un widget avec une couleur spécifiée avec Python + Qt (PySide)
Procédure de création d'application multi-plateforme avec kivy
Créez une application Hello World avec un seul fichier avec django
AWS Step Functions pour apprendre avec un exemple
Créer un fichier au format Photoshop (.psd) avec python
Facile à créer une application console Python avec Click