Add your Ruby gems to AWS CodeArtifact


Voiced by Polly

Ruby builders can now use AWS CodeArtifact to securely retailer and retrieve their gems. CodeArtifact integrates with commonplace developer instruments like gem and bundler.

Functions usually use quite a few packages to hurry up improvement by offering reusable code for frequent duties like community entry, cryptography, or knowledge manipulation. Builders additionally embed SDKs–such because the AWS SDKs–to entry distant companies. These packages might come from inside your group or from third events like open supply tasks. Managing packages and dependencies is integral to software program improvement. Languages like Java, C#, JavaScript, Swift, and Python have instruments for downloading and resolving dependencies, and Ruby builders usually use gem and bundler.

Nevertheless, utilizing third-party packages presents authorized and safety challenges. Organizations should guarantee package deal licenses are suitable with their tasks and don’t violate mental property. They have to additionally confirm that the included code is protected and doesn’t introduce vulnerabilities, a tactic generally known as a provide chain assault. To deal with these challenges, organizations usually use non-public package deal servers. Builders can solely use packages vetted by safety and authorized groups made out there via non-public repositories.

CodeArtifact is a managed service that enables the protected distribution of packages to inner developer groups with out managing the underlying infrastructure. CodeArtifact now helps Ruby gems along with npm, PyPI, Maven, NuGet, SwiftPM, and generic codecs.

You may publish and obtain Ruby gem dependencies out of your CodeArtifact repository within the AWS Cloud, working with present instruments reminiscent of gem and bundler. After storing packages in CodeArtifact, you may reference them in your Gemfile. Your construct system will then obtain authorized packages from the CodeArtifact repository throughout the construct course of.

Easy methods to get began
Think about I’m engaged on a package deal to be shared with different improvement groups in my group.

On this demo, I present you the way I put together my atmosphere, add the package deal to the repository, and use this particular package deal construct as a dependency for my venture. I give attention to the steps particular to Ruby packages. You may learn the tutorial written by my colleague Steven to get began with CodeArtifact.

I take advantage of an AWS account that has a package deal repository (MyGemsRepo) and area (stormacq-test) already configured.

CodeArtifact - Ruby repository

To let the Ruby instruments acess my CodeArtifact repository, I begin by accumulating an authentication token from CodeArtifact.

export CODEARTIFACT_AUTH_TOKEN=`aws codeartifact get-authorization-token 
                                     --domain stormacq-test              
                                     --domain-owner 012345678912         
                                     --query authorizationToken          
                                     --output textual content`

export GEM_HOST_API_KEY="Bearer $CODEARTIFACT_AUTH_TOKEN"

Observe that the authentication token expires after 12 hours. I need to repeat this command after 12 hours to acquire a recent token.

Then, I request the repository endpoint. I move the area title and area proprietor (the AWS account ID). Discover the --format ruby possibility.

export RUBYGEMS_HOST=`aws codeartifact get-repository-endpoint  
                           --domain stormacq-test               
                           --domain-owner 012345678912          
                           --format ruby                        
                           --repository MyGemsRepo              
                           --query repositoryEndpoint           
                           --output textual content`

Now that I’ve the repository endpoint and an authentication token, gem will use these atmosphere variable values to hook up with my non-public package deal repository.

I create a quite simple venture, construct it, and ship it to the package deal repository.

CodeArtifact - building and pushing a custom package

$ gem construct hola.gemspec 

Efficiently constructed RubyGem
  Identify: hola-codeartifact
  Model: 0.0.0
  File: hola-codeartifact-0.0.0.gem
  
$ gem push hola-codeartifact-0.0.0.gem 
Pushing gem to https://stormacq-test-486652066693.d.codeartifact.us-west-2.amazonaws.com/ruby/MyGemsRepo...

I confirm within the console that the package deal is offered.

CodeArtifact - Hola package is present

Now that the package deal is offered, I can use it in my tasks as standard. This includes configuring the native ~/.gemrc file on my machine. I comply with the directions supplied by the console, and I make certain I substitute ${CODEARTIFACT_AUTH_TOKEN} with its precise worth.

CodeArtifact - console instructions to connect to the repo

As soon as ~/.gemrc is accurately configured, I can set up gems as standard. They are going to be downloaded from my non-public gem repository.

$ gem set up hola-codeartifact

Fetching hola-codeartifact-0.0.0.gem
Efficiently put in hola-codeartifact-0.0.0
Parsing documentation for hola-codeartifact-0.0.0
Putting in ri documentation for hola-codeartifact-0.0.0
Performed putting in documentation for hola-codeartifact after 0 seconds
1 gem put in

Set up from upstream
I can even affiliate my repository with an upstream supply. It should routinely fetch gems from upstream after I request one.

To affiliate the repository with rubygems.org, I take advantage of the console, or I sort

aws codeartifact  associate-external-connection 
                   --domain stormacq-test       
                   --repository MyGemsRepo      
                   --external-connection public:ruby-gems-org

{
    "repository": {
        "title": "MyGemsRepo",
        "administratorAccount": "012345678912",
        "domainName": "stormacq-test",
        "domainOwner": "012345678912",
        "arn": "arn:aws:codeartifact:us-west-2:012345678912:repository/stormacq-test/MyGemsRepo",
        "upstreams": [],
        "externalConnections": [
            {
                "externalConnectionName": "public:ruby-gems-org",
                "packageFormat": "ruby",
                "status": "AVAILABLE"
            }
        ],
        "createdTime": "2024-04-12T12:58:44.101000+02:00"
    }
}

As soon as related, I can pull any gems via CodeArtifact. It should routinely fetch packages from upstream when not domestically out there.

$ gem set up rake 

Fetching rake-13.2.1.gem
Efficiently put in rake-13.2.1
Parsing documentation for rake-13.2.1
Putting in ri documentation for rake-13.2.1
Performed putting in documentation for rake after 0 seconds
1 gem put in

I take advantage of the console to confirm the rake package deal is now out there in my repo.

Issues to know
There are some issues to remember earlier than importing your first Ruby packages.

Pricing and availability
CodeArtifact prices for Ruby packages are the identical as for the opposite package deal codecs already supported. CodeArtifact billing is determined by three metrics: the storage (measured in GB per 30 days), the variety of requests, and the info switch out to the web or to different AWS Areas. Information switch to AWS companies in the identical Area is just not charged, that means you may run your steady integration and supply (CI/CD) jobs on Amazon Elastic Compute Cloud (Amazon EC2) or AWS CodeBuild, for instance, with out incurring a cost for the CodeArtifact knowledge switch. As standard, the pricing web page has the main points.

CodeArtifact for Ruby packages is offered in all 13 Areas the place CodeArtifact is offered.

Now, go construct your Ruby functions and add your non-public packages to CodeArtifact!

— seb



Recent Articles

Related Stories

Leave A Reply

Please enter your comment!
Please enter your name here

Stay on op - Ge the daily news in your inbox