|
| 1 | +# aws-utils-go |
| 2 | +## Utilitários com interface simples para acessar serviços da AWS |
| 3 | + |
| 4 | +A aws disponibiliza para a linguagem go a sdk aws-sdk-go, porém sua interface pode ser bem complicada. |
| 5 | + |
| 6 | +Esta lib oferece funções com interfaces simples para executar tarefas comuns. |
| 7 | + |
| 8 | +## Pacotes |
| 9 | + |
| 10 | +* dynamodbutils: oferece interfaces simplificadas para as ações PutItem, GetItem, UpdateItem, PutItemWithConditional, FindOneFromIndex |
| 11 | +* s3utils: oferece GetObject, GetObjectAsString, ListObjects, PutObject. |
| 12 | +* snsutils: oferece SendMessage, SendMessageWithAttributes. |
| 13 | +* sqsutils: oferece SendMessage, ReadMessage, DeleteMessage, GetMessageAttribute |
| 14 | +* sessionutils: permite configurar a Session (aws-sdk-go/aws/session) que será utilizada pelos utils para se comunicarem com a AWS. |
| 15 | +* localstack (**experimental**): utilitários para iniciar/parar o localstack e seus serviços na máquina local. Está *experimental* ainda e sua interface deve mudar. |
| 16 | + |
| 17 | +## Como importar e utilizar o código |
| 18 | + |
| 19 | +#### Instalar o aws-utils-go no seu ambiente de desenvolvimento |
| 20 | + |
| 21 | +Para ser utilizada, a lib aws-utils-go precisa estar deployada em seu diretorio $GOPATH/src. |
| 22 | + |
| 23 | +Quem faz este deploy é o `go get stash.b2w/asp/aws-utils-go.git`. Acontece que este comando irá tentar fazer o download via https, e o nosso stash não suporta https, ele suporta ssh. |
| 24 | + |
| 25 | +O `go get` utiliza o git client para fazer o download, portanto precisamos configurar o git client para usar ssh ao falar com o host *stash.b2w*. |
| 26 | + |
| 27 | +Para configurar o git client, rode `vi ~/.gitconfig` e acrescente no final do arquivo as linhas abaixo: |
| 28 | + |
| 29 | +``` |
| 30 | + |
| 31 | + insteadOf = https://stash.b2w/ |
| 32 | +``` |
| 33 | + |
| 34 | +Feito isto, faça a instalação da lib rodando o `go get stash.b2w/asp/aws-utils-go.git` |
| 35 | + |
| 36 | +#### Importar o aws-utils-go no seu código |
| 37 | + |
| 38 | +Declare o import da lib como no exemplo abaixo: |
| 39 | + |
| 40 | +```golang |
| 41 | +package main |
| 42 | + |
| 43 | +import ( |
| 44 | + "stash.b2w/asp/aws-utils-go.git/dynamodbutils" |
| 45 | +) |
| 46 | +... |
| 47 | +// save to the "Cities" table an instance of the "City" struct |
| 48 | +err := dynamodbutils.PutItem("Cities", city) |
| 49 | +... |
| 50 | +``` |
| 51 | + |
| 52 | +## Como extender o aws-utils-go |
| 53 | + |
| 54 | +Se quiser extender o aws-utils-go o clone do projeto obrigatoriamente tem que ser feito no diretorio `$GOPATH/src/stash.b2w/asp/aws-utils-go.git`. |
| 55 | + |
| 56 | +Isto é porque o próprio codigo do aws-utils-go, quando faz import de um pacote do mesmo projeto, utiliza no importe do pacote o prefixo `stash.b2w/asp/aws-utils-go.git`. |
| 57 | + |
| 58 | +Para fazer o clone, use os comandos: |
| 59 | + |
| 60 | +```shell |
| 61 | +mkdir -p $GOPATH/src/stash.b2w/asp/ |
| 62 | +cd $GOPATH/src/stash.b2w/asp/ |
| 63 | +git clone ssh:// [email protected]/asp/aws-utils-go.git aws-utils-go.git |
| 64 | +``` |
| 65 | + |
| 66 | +## Gerar uma imagem docker com a lib 'aws-utils-go' embedada e publicar no Nexus B2W |
| 67 | + |
| 68 | +Para que seu código que utilizou 'aws-utils-go' possa ser buildado no bamboo é preciso criar uma imagem docker para golang |
| 69 | +contendo esta lib deployada na GOPATH. |
| 70 | +Este projeto vem com um Dockerfile que cria esta imagem. |
| 71 | + |
| 72 | +O script *build-docker-image.sh* builda a imagem com o nome de *b2wbuild/golang-aws-utils-go:TAG* e publica a mesma no repositório da B2W, *registry.b2w.io*. |
| 73 | + |
| 74 | +Para buildar e publicar uma nova imagem, rode o script como no exemplo: |
| 75 | + |
| 76 | +```shell |
| 77 | +./build-docker-image.sh "1.0" |
| 78 | +``` |
| 79 | + |
| 80 | +Onde "1.0" é uma tag name que irá identificar a versão da lib aws-utils-go que foi empacotada. A medida que esta lib for atualizada, novas tags deverão ser publicadas no repósitório. |
| 81 | + |
| 82 | +O script *build-docker-image.sh* não permite sobrescrever uma tag existente e irá dar erro se já houver uma imagem com a mesma tag no repositório. |
| 83 | + |
| 84 | +## Como buildar o seu código pelo bamboo usando uma imagem docker |
| 85 | + |
| 86 | +#### Criar o 'build plan' usando a imagem gerada |
| 87 | + |
| 88 | +No bamboo, quando for buildar o seu projeto, utilize a imagem docker de GO com a aws-utils-go embedada (a que foi criada no passo acima). |
| 89 | + |
| 90 | +Veja o exemplo abaixo, o comando usado no "build plan" do bamboo usa a imagem *registry.b2w.io/b2wbuild/golang-aws-utils-go:1.0* para buildar a app: |
| 91 | + |
| 92 | +```shell |
| 93 | +run --volume ${bamboo.build.working.directory}/ame-iot-auth:/go/src/ame-iot-auth --workdir /go/src/ame-iot-auth --rm registry.b2w.io/b2wbuild/golang-aws-utils-go:1.0 /bin/bash -c ./device-api/build.sh |
| 94 | +``` |
| 95 | + |
| 96 | + |
0 commit comments