in

AWS CodeArtifact agrega soporte para paquetes Rust con Cargo | Amazon Web Services

A partir de hoy, los desarrolladores de Rust pueden almacenar y acceder a sus bibliotecas (conocidas como cajas en el mundo de Rust) en AWS CodeArtifact.

El desarrollo de software moderno depende en gran medida de paquetes de código preescritos para acelerar el desarrollo. Estos paquetes, que pueden llegar a ser cientos para una sola aplicación, abordan tareas de programación comunes y pueden crearse internamente u obtenerse de fuentes externas. Si bien estos paquetes ayudan significativamente a acelerar el desarrollo, su uso presenta dos desafíos principales para las organizaciones: problemas legales y de seguridad.

Desde el punto de vista legal, las organizaciones deben asegurarse de que cuentan con licencias compatibles con estos paquetes de terceros y de que no infringen los derechos de propiedad intelectual. La seguridad es otro riesgo, ya que las vulnerabilidades de estos paquetes podrían aprovecharse para comprometer una aplicación. Una táctica conocida, el ataque a la cadena de suministro, consiste en inyectar vulnerabilidades en proyectos populares de código abierto.

Para abordar estos desafíos, las organizaciones pueden configurar repositorios de paquetes privados. Estos repositorios almacenan paquetes aprobados previamente y examinados por equipos legales y de seguridad, lo que limita el riesgo de exposición legal o de seguridad. Aquí es donde entra en juego CodeArtifact.

AWS CodeArtifact es un servicio de repositorio de artefactos totalmente administrado, diseñado para almacenar, publicar y compartir de forma segura paquetes de software utilizados en el desarrollo de aplicaciones. Admite formatos y administradores de paquetes populares, como npm, PyPI, Experto, NuGetSwiftPM y Rubygem, lo que permite una fácil integración en los flujos de trabajo de desarrollo existentes. Ayuda a mejorar la seguridad a través del acceso controlado y facilita la colaboración entre equipos. CodeArtifact ayuda a mantener un ciclo de vida de desarrollo de software consistente, seguro y eficiente al integrarse con AWS Identity and Access Management (IAM) y herramientas de integración continua e implementación continua (CI/CD).

Por octavo año consecutivo, Óxido ha encabezado la lista como «el lenguaje de programación más deseado» en Encuesta anual para desarrolladores de Stack Overflowcon más del 80 por ciento de los desarrolladores informando que les gustaría volver a usar el lenguaje el próximo año. La creciente popularidad de Rust se debe a su capacidad de combinar el rendimiento y la seguridad de la memoria de lenguajes de sistemas como C++ con características que facilitan la escritura de código confiable y simultáneo. Esto, junto con un rico ecosistema y un fuerte enfoque en la colaboración de la comunidad, hace de Rust una opción atractiva para los desarrolladores que trabajan en sistemas y aplicaciones de alto rendimiento.

Los desarrolladores de Rust confían en Cargael administrador de paquetes oficial, para administrar las dependencias de los paquetes. Cargo simplifica el proceso de búsqueda, descarga e integración de bibliotecas preescritas en sus proyectos. Esto no solo ahorra tiempo al eliminar la administración manual de dependencias, sino que también garantiza la compatibilidad y la seguridad. El sólido sistema de resolución de dependencias de Cargo aborda los posibles conflictos entre las diferentes versiones de las bibliotecas y, como muchas de ellas provienen de un registro seleccionado, los desarrolladores pueden estar más seguros de la calidad y la seguridad del código. Este enfoque en la eficiencia y la confiabilidad hace de Cargo una herramienta esencial para crear aplicaciones Rust.

Vamos a crear un repositorio CodeArtifact para mis cajas
En esta demostración, utilizo la interfaz de línea de comandos de AWS (AWS CLI) y la consola de administración de AWS para crear dos repositorios. Configuro el primer repositorio para descargar paquetes públicos desde el repositorio oficial. cajas.io Repositorio. Configuro el segundo repositorio para descargar paquetes solo del primero. Esta configuración de repositorio dual es la forma recomendada de administrar repositorios y conexiones externas; consulte la documentación de CodeArtifact para administrar conexiones externas. Para citar la documentación:

“Se recomienda tener un repositorio por dominio con una conexión externa a un repositorio público determinado. Para conectar otros repositorios al repositorio público, agregue el repositorio con la conexión externa como un enlace ascendente a ellos”.

Esbocé este diagrama para ilustrar la configuración.

Repositorios de artefactos de código para carga

Los dominios y repositorios se pueden crear desde la línea de comandos o desde la consola. Elijo la línea de comandos. En la terminal de shell, escribo:

CODEARTIFACT_DOMAIN=stormacq-test

# Create an internal-facing repository: crates-io-store
aws codeartifact create-repository \
   --domain $CODEARTIFACT_DOMAIN   \
   --repository crates-io-store

# Associate the internal-facing repository crates-io-store to the public crates-io
aws codeartifact associate-external-connection \
--domain $CODEARTIFACT_DOMAIN \
--repository crates-io-store  \
--external-connection public:crates-io

# Create a second internal-facing repository: cargo-repo 
# and connect it to upstream crates-io-store just created
aws codeartifact create-repository \
   --domain $CODEARTIFACT_DOMAIN   \
   --repository cargo-repo         \
   --upstreams '{"repositoryName":"crates-io-store"}'	 

A continuación, como desarrollador, quiero que mi máquina local obtenga las cajas del repositorio interno (cargo-repo) Acabo de crearlo.

Yo configuro cargo para obtener bibliotecas del repositorio interno en lugar del repositorio público crates.io. Para ello, creo un config.toml archivo que apunta al repositorio interno de CodeArtifact.

# First, I retrieve the URI of the repo
REPO_ENDPOINT=$(aws codeartifact get-repository-endpoint \
                           --domain $CODEARTIFACT_DOMAIN \ 
                           --repository cargo-repo       \
                           --format cargo                \
                           --output text)

# at this stage, REPO_ENDPOINT is https://stormacq-test-012345678912.d.codeartifact.us-west-2.amazonaws.com/cargo/cargo-repo/

# Next, I create the cargo config file
cat  ~/.cargo/config.toml
[registries.cargo-repo]
index = "sparse+$REPO_ENDPOINT"
credential-provider = "cargo:token-from-stdout aws codeartifact get-authorization-token --domain $CODEARTIFACT_DOMAIN --query authorizationToken --output text"

[registry]
default = "cargo-repo"

[source.crates-io]
replace-with = "cargo-repo"
EOF

Tenga en cuenta que las dos variables de entorno se reemplazan cuando creo el archivo de configuración. cargo no admite variables de entorno en su configuración.

A partir de ahora, en esta máquina, cada vez que invoco cargo para agregar una caja, cargo obtendrá un token de autorización de CodeArtifact para comunicarse con el interno cargo-repo repositorio. Debo tener privilegios de IAM para llamar al get-authorization-token API de CodeArtifact además de permisos para leer/publicar paquetes según el comando que uso. Si está ejecutando esta configuración desde una máquina de compilación para su canalización de integración continua (CI), su máquina de compilación debe tener los permisos adecuados para hacerlo.

Ahora puedo probar esta configuración y agregar una caja a mi proyecto local.

$ cargo add regex
    Updating `codeartifact` index
      Adding regex v1.10.4 to dependencies
             Features:
             + perf
             + perf-backtrack
             + perf-cache
             + perf-dfa
             + perf-inline
             + perf-literal
             + perf-onepass
             + std
             + unicode
             + unicode-age
             + unicode-bool
             + unicode-case
             + unicode-gencat
             + unicode-perl
             + unicode-script
             + unicode-segment
             - logging
             - pattern
             - perf-dfa-full
             - unstable
             - use_std
    Updating `cargo-repo` index

# Build the project to trigger the download of the crate
$ cargo build
  Downloaded memchr v2.7.2 (registry `cargo-repo`)
  Downloaded regex-syntax v0.8.3 (registry `cargo-repo`)
  Downloaded regex v1.10.4 (registry `cargo-repo`)
  Downloaded aho-corasick v1.1.3 (registry `cargo-repo`)
  Downloaded regex-automata v0.4.6 (registry `cargo-repo`)
  Downloaded 5 crates (1.5 MB) in 1.99s
   Compiling memchr v2.7.2 (registry `cargo-repo`)
   Compiling regex-syntax v0.8.3 (registry `cargo-repo`)
   Compiling aho-corasick v1.1.3 (registry `cargo-repo`)
   Compiling regex-automata v0.4.6 (registry `cargo-repo`)
   Compiling regex v1.10.4 (registry `cargo-repo`)
   Compiling hello_world v0.1.0 (/home/ec2-user/hello_world)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 16.60s

Puedo verificar que CodeArtifact descargó el paquete y sus dependencias del repositorio público de origen. Me conecto a la consola de CodeArtifact y verifico la lista de paquetes disponibles en cualquiera de los repositorios que creé. En esta etapa, la lista de paquetes debería ser idéntica en los dos repositorios.

Lista de paquetes de carga de CodeArtifact

Publicar un paquete privado en el repositorio
Ahora que sé que el enlace ascendente funciona como se esperaba, publiquemos un paquete privado en mi cargo-repo repositorio para ponerlo a disposición de otros equipos de mi organización.

Para ello, utilizo la herramienta estándar de Rust. cargocomo siempre. Antes de hacerlo, agrego y confirmo los archivos del proyecto en el gitrepositorio.

$  git add . && git commit -m "initial commit"
 5 files changed, 1855 insertions(+)
create mode 100644 .gitignore
create mode 100644 Cargo.lock
create mode 100644 Cargo.toml
create mode 100644 commands.sh
create mode 100644 src/main.rs

$  cargo publish 
    Updating `codeartifact` index
   Packaging hello_world v0.1.0 (/home/ec2-user/hello_world)
    Updating crates.io index
    Updating `codeartifact` index
   Verifying hello_world v0.1.0 (/home/ec2-user/hello_world)
   Compiling libc v0.2.155
... (redacted for brevity) ....
   Compiling hello_world v0.1.0 (/home/ec2-user/hello_world/target/package/hello_world-0.1.0)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 03s
    Packaged 5 files, 44.1KiB (11.5KiB compressed)
   Uploading hello_world v0.1.0 (/home/ec2-user/hello_world)
    Uploaded hello_world v0.1.0 to registry `cargo-repo`
note: waiting for `hello_world v0.1.0` to be available at registry `cargo-repo`.
You may press ctrl-c to skip waiting; the crate should be available shortly.
   Published hello_world v0.1.0 at registry `cargo-repo`

Por último, uso la consola para verificar la hello_world La caja ya está disponible en el cargo-repo.

Paquete de carga de CodeArtifact Hola mundo

Precios y disponibilidad
Ahora puede almacenar sus bibliotecas de Rust en las 13 regiones de AWS donde CodeArtifact está disponible. No hay ningún costo adicional para los paquetes de Rust. Las tres dimensiones de facturación son el almacenamiento (medido en GB por mes), la cantidad de solicitudes y la transferencia de datos a Internet o a otras regiones de AWS. La transferencia de datos a los servicios de AWS en la misma región no se cobra, lo que significa que puede ejecutar sus trabajos de integración y entrega continuas (CI/CD) en Amazon Elastic Compute Cloud (Amazon EC2) o AWS CodeBuild, por ejemplo, sin incurrir en un cargo por la transferencia de datos de CodeArtifact. Como es habitual, la página de precios tiene los detalles.

¡Ahora ve y crea tus aplicaciones Rust y sube tus cajas privadas a CodeArtifact!

–séb



Fuente

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

GIPHY App Key not set. Please check settings

¿Necesitas una nueva Mac? Este Prime Day es el mejor momento para comprar una

Los concesionarios de automóviles sufren interrupciones de servicio que duran varios días tras ciberataques a un proveedor de software

Los concesionarios de automóviles sufren interrupciones de servicio que duran varios días tras ciberataques a un proveedor de software