São os dois jeitos de escrever dados em texto que a AWS entende. JSON usa chaves e colchetes ({"nome": "ana"}) e é o que a CLI devolve quando você pergunta algo. YAML guarda a mesma informação usando indentação em vez de chaves — mais fácil de ler e de comentar. Não são linguagens de programação: são formulários preenchidos.
Quase tudo que é mais complexo que uma flag chega à AWS como arquivo: política de IAM, template de CloudFormation, definição de tarefa do ECS. Saber ler e escrever esses arquivos é o que separa "copiei do tutorial" de "entendi o que estou mandando" — e é o que te deixa achar o erro quando a AWS reclama de uma vírgula.
Cada um deles roda de verdade no terminal do CLImb, com a mesma saída e as mesmas mensagens de erro que a AWS devolve.
aws glue create-databaseaws glue create-database
aws glue create-database --database-input '{"Name":"dados_loja"}'
aws glue get-databasesaws glue get-databases
aws glue get-databases
aws iam create-rolecriar papel (role)
aws iam create-role --role-name <nome> --assume-role-policy-document file://<trust.json>
aws s3api put-bucket-policyaws s3api put-bucket-policy
aws s3api put-bucket-policy --bucket <nome> --policy file://<arquivo.json>
aws cloudformation validate-templateaws cloudformation validate-template
aws cloudformation validate-template --template-body <template>
aws cloudformation create-stackaws cloudformation create-stack
aws cloudformation create-stack --stack-name <nome> --template-body <template>
aws s3 lslistar buckets ou objetos
aws s3 ls lista todos os seus buckets aws s3 ls s3://<bucket> lista os objetos do bucket aws s3 ls s3://<bucket>/<prefixo> lista objetos com aquele prefixo
Cada atividade é um pedido de trabalho, do jeito que ele chega no dia a dia — você resolve digitando os comandos, não escolhendo alternativa.
Daqui a pouco você vai criar uma role com --assume-role-policy-document file://trust.json e provavelmente vai copiar isso sem saber o que tem dentro. Não hoje: abra o trust.json e veja. <small>(uma trust policy responde uma pergunta só: quem pode vestir esta role? Ela não fala de bucket nem de tabela — isso é a policy de permissão, que é outro arquivo)</small>
Abra a politica-publica.json — é ela que deixa um site do S3 visível pra internet. Repare em quatro coisas: { } é um objeto (um conjunto de pares nome/valor), [ ] é uma lista, o nome vem sempre entre aspas duplas, e o par é separado por :. <small>(o "Principal": "*" ali dentro é o que significa “qualquer um da internet” — um caractere que já vazou muito bucket por aí)</small>
Existe uma politica-quebrada.json aí que a AWS recusa. Abra e procure o defeito. <small>(é o erro mais comum de todos: vírgula sobrando antes do fecha-chaves. JavaScript aceita, YAML nem tem vírgula, mas JSON não perdoa — e a mensagem que a AWS devolve costuma apontar a linha errada, o que faz muita gente procurar no lugar errado)</small>
Abra o site-s3.yaml. É a mesma ideia do JSON — nome e valor — mas em YAML: sem { }, sem aspas obrigatórias, e a lista vira - no começo da linha. <small>(YAML existe porque template de infraestrutura é escrito e lido por gente. Todo YAML válido pode virar JSON e vice-versa — muda a roupa, não o conteúdo)</small>
Abra o infra.yaml, que descreve três recursos de uma vez. Repare que o que diz “isto está dentro daquilo” é só o espaço no começo da linha — não há chave nenhuma fechando bloco. <small>(por isso YAML quebra com TAB: o formato exige espaços. E um espaço a mais muda de qual recurso a propriedade é — o arquivo continua válido e faz outra coisa, que é o pior tipo de bug)</small>
Agora escreva JSON direto no comando, sem arquivo. Crie o catálogo catalogo_formatos passando --database-input com o JSON entre aspas simples. <small>(não importa o que o Glue faz agora — o que importa é a regra: o JSON usa aspas DUPLAS por dentro, então o pacote todo vai entre aspas SIMPLES por fora. Se você trocar e usar duplas nas duas pontas, o shell come as de dentro e a AWS responde Invalid JSON received. Pode testar o erro depois)</small>
Liste os catálogos com aws glue get-databases e repare no tanto de JSON que volta pra dizer um nome. Agora peça só o que interessa com --query: os nomes da lista. <small>(--query é JMESPath, uma linguagem de caminho dentro do JSON. DatabaseList[].Name quer dizer: entre na lista e traga o campo Name de cada item. É o que transforma a saída da AWS em algo que dá pra usar num script)</small>
Fecha o ciclo: leia o tarefa-web.json (a receita de um contêiner) e repare que ele começa com [ — é uma lista de contêineres, não um objeto solto. Depois confira o maquina-estados.json, que é um objeto com passos aninhados. <small>(saber se o arquivo é lista ou objeto é o que decide se a AWS aceita: passar objeto onde ela espera lista dá erro de tipo, não de sintaxe — o JSON está “certo” e mesmo assim não serve)</small>
Você já leu o trust.json pronto. Agora escreva o seu: um trust-ec2.json que autoriza o serviço ec2.amazonaws.com a vestir a role — o pronto autoriza o Lambda. Depois confira com cat que saiu o que você queria. <small>(o > joga a saída do echo dentro do arquivo, criando ou substituindo. O JSON inteiro vai entre aspas simples — mesma regra da atividade das aspas)</small>
Fecha o ciclo: crie a role papel-formatos usando o seu arquivo, com --assume-role-policy-document file://trust-ec2.json. <small>(file:// não tem mágica: é só “leia deste arquivo do disco”. Se o JSON estiver quebrado, é aqui que a AWS reclama — por isso se confere com cat antes de usar)</small>
Lembra da politica-quebrada.json, com a vírgula sobrando? Escreva a versão correta em politica-corrigida.json e aplique no bucket site-formatos, que você cria antes. <small>(repare que o Resource tem que apontar pro SEU bucket — arn:aws:s3:::site-formatos/*. Política apontando pro bucket errado é aceita sem reclamar e não faz nada)</small>
YAML tem várias linhas e o echo escreve uma de cada vez — então se monta com >>, que acrescenta em vez de substituir. Monte o infra-minha.yaml descrevendo um bucket chamado bucket-que-escrevi e valide com o CloudFormation. <small>(o primeiro > cria o arquivo; do segundo em diante é >>. Se errar e usar > de novo no meio, você apaga tudo o que já tinha escrito)</small>
Último passo, e o que junta tudo: suba a stack stack-formatos a partir do seu template e confirme que o bucket nasceu com o nome que você digitou. <small>(é isto que Infraestrutura como Código significa na prática — você descreveu um recurso num arquivo de texto e a nuvem obedeceu. Daqui pra frente é o mesmo princípio, só com templates maiores)</small>
Ler explica. Digitar fixa. No CLImb você roda os comandos de verdade num terminal AWS simulado — o estado persiste entre eles, como na nuvem real.
Esta trilha é inteiramente gratuita — não precisa pagar nem dar cartão.
Praticar de graça