# Building and Installing the Crossplane AWS Provider

`provider-aws` is composed of a golang project and can be built directly with standard `golang` tools. We currently support two different platforms for building:

* Linux: most modern distros should work although most testing has been done on Ubuntu
* Mac: macOS 10.6+ is supported

## Build Requirements

An Intel-based machine (recommend 2+ cores, 2+ GB of memory and 128GB of SSD). Inside your build environment (Docker for Mac or a VM), 6+ GB memory is also recommended.

The following tools are need on the host:

* curl
* docker (1.12+) or Docker for Mac (17+)
* git
* make
* golang
* rsync (if you're using the build container on mac)
* helm (v2.8.2+)
* kubebuilder (v1.0.4+)

## Build

You can build the Crossplane AWS Provider for the host platform by simply running the command below.
Building in parallel with the `-j` option is recommended.

```console
make -j4
```

The first time `make` is run, the build submodule will be synced and
updated. After initial setup, it can be updated by running `make submodules`.

Run `make help` for more options.

## Building inside the cross container

Official Crossplane builds are done inside a build container. This ensures that we get a consistent build, test and release environment. To run the build inside the cross container run:

```console
> build/run make -j4
```

The first run of `build/run` will build the container itself and could take a few minutes to complete, but subsequent builds should go much faster.

## Run

To run the provider from source outside a k8s cluster it is necessary to register the CRDs and add a ProviderConfig before.

The necessary CRDs can be found in `package/crds/`. To register them in k8s run

```console
kubectl apply -f package/crds/
```

After that apply your custom ProviderConfig

```console
kubectl apply -f myProviderConfig.yaml
```

Then the provider can be run with

```console
make run
```

## Install

```console
kubectl crossplane install provider crossplane/provider-aws:v0.21.2
```