Aws-cli: O arquivo de parâmetro externo do Cloudformation não é compatível com o arquivo YAML

Criado em 3 nov. 2016  ·  143Comentários  ·  Fonte: aws/aws-cli

Eu usei aws-cli para atualizar minhas pilhas e quero usar um arquivo yaml externo (dev.yaml) como arquivo de parâmetros como abaixo:

aws cloudformation update-stack --stack-name test --template-body file://./api-test.yaml --parameters file://./dev.yaml

Em dev.yaml , só tem:

---
- ParameterKey: APICacheClusterSize
  ParameterValue: '1.6'

No entanto, recebi esta mensagem de erro quando executo o comando de atualização acima:

Error parsing parameter '--parameters': Expected: '=', received: '-' for input:

---
- ParameterKey: APICacheClusterSize
^
  ParameterValue: '1.6'

Se eu usar o arquivo JSON com o mesmo contexto abaixo e usá-lo em vez de dev.yaml , funcionará bem:

[
  {
    "ParameterKey": "APICacheClusterSize",
    "ParameterValue": "1.6"
  }
]

Então, o arquivo de parâmetros externos para aws cloudformation pode ser um arquivo YAML? ou será...?

feature-request

Comentários muito úteis

Vou apoiar este pedido de recurso.

Todos 143 comentários

Olá, atualmente não temos planos para oferecer suporte ao YAML como parte dos argumentos da linha de comando. Vou marcar isso como uma solicitação de recurso, pois posso ver como pode ser útil para algumas pessoas.

O conteúdo do arquivo que você fornece para --parameters é carregado e despejado diretamente como um argumento, então você só pode ter o conteúdo do arquivo em um dos dois formatos:
Sintaxe abreviada:
ParameterKey=string,ParameterValue=string,UsePreviousValue=boolean
ou sintaxe JSON:

[
    {
         "ParameterKey": "string",
         "ParameterValue": "string",
         "UsePreviousValue": true|false
     }
]

Vou apoiar este pedido de recurso.

vou secundar também

+1

Por favor. Isso é crítico para nós.

+1

absolutamente +1

+1 permitir dados formatados em YAML para --template-body mas não para --parameters é estranho

👍

+1

+1

+1

como você pode fornecer um modelo em yaml, você também deve poder fornecer os parâmetros em yaml
eu acho que esse recurso é um must-have

+1

+100

+1

+100

+1

" https://gist.github.com/mbailey/2f7c878eed123cab6fb125117f35aecc
"
" yamlise - veja YAML ao editar arquivos JSON no vim.
"
" Criado para pessoas com fobia de JSON, isso deve
" só será usado quando todas as tentativas de dominar JSON
" falharam. http://www.json.org/
"
"Espero que não seja tarde demais para essas pessoas!
"'Por favor. Isso é fundamental para nós.'
" https://github.com/aws/aws-cli/issues/2275#issuecomment -277829948
"
"Instalação
" ============
" 1. Instale o cfn-flip https://github.com/awslabs/aws-cfn-template-flip
" 2. Inclua este arquivo em seu ~/.vimrc
" 3. vim cloudformation-params.json
"VOCÊ DEVE VER AGORA O YAML QUE DESEJA
" 4. :wq
" O arquivo agora deve conter o JSON que a Amazon CLI espera
"
:augroup yamlise
: autocmd!
: autocmd BufReadPost,FileReadPost *.json '[,']!cfn-flip
: autocmd BufWritePre,FileWritePre *.json '[,']!cfn-flip
: autocmd FileAppendPre *.json '[,']!cfn-flip
:augroup END

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+999

+1

+1

+1

+1

+2

+1

+1

+1

+1

+1

+1

+1

+10000000

+1

+Inf

+1

+1

+1

+1

+1

Aqui está uma solução simples usando a substituição do processo Bash e cfn-flip :
aws cloudformation ... --parameters file://<(cfn-flip parameters.yml)

+1

+1

++

+0,5

+1

++

+1!

Não entendo por que você teria o modelo em YAML, mas os parâmetros em JSON. Parece uma omissão estranha e espero que a AWS esteja trabalhando... por favor?

+1

+1

Bom Dia!

Estamos encerrando este problema aqui no GitHub, como parte de nossa migração para UserVoice para solicitações de recursos envolvendo a AWS CLI.

Isso nos permitirá obter os recursos mais importantes para você, facilitando a pesquisa e a exibição de suporte para os recursos mais importantes para você, sem diluir a conversa com relatórios de bugs.

Como uma rápida cartilha do UserVoice (se ainda não estiver familiarizado): depois que uma ideia é postada, as pessoas podem votar nas ideias e a equipe do produto responderá diretamente às sugestões mais populares.

Importamos solicitações de recursos existentes do GitHub - Pesquise esse problema lá!

E não se preocupe, esse problema ainda existirá no GitHub para o bem da posteridade. Como é uma importação somente de texto da postagem original para o UserVoice, ainda teremos em mente os comentários e discussões que já existem aqui no problema do GitHub.

O GitHub continuará sendo o canal para relatar bugs.

Mais uma vez, esse problema agora pode ser encontrado pesquisando o título em: https://aws.uservoice.com/forums/598381-aws-command-line-interface

-A equipe de SDKs e ferramentas da AWS

Essa entrada pode ser encontrada especificamente no UserVoice em: https://aws.uservoice.com/forums/598381-aws-command-line-interface/suggestions/33168310-cloudformation-external-parameter-file-do-not-supp

+1

Com base no feedback da comunidade, decidimos retornar solicitações de recursos para problemas do GitHub.

+1

+1

+1

+100

+1

+1

+1

+1
e +1000 para mais consistência geral, por favor ;)

+1

Esta edição tem 2 anos ;_;

@matthewflannery não, na verdade são apenas 587 dias.

+1

@Yaowenjie 587/365 = 1,608 ~ 2 anos

+1

mais 11!1!1um!!1!11

:+1:

:heavy_plus_sign: :100:

👍

+1

faltam dois meses para a comemoração do segundo aniversário desta edição, pessoal! 👨‍👩‍👧‍👦🎉🎉🎊🎊👨‍👨‍👧‍👦

Como minha equipe está acostumada com YAML (todos os nossos modelos estão em YAML), tenho uma automação de shell que transforma um arquivo YAML em um arquivo json e passa isso para o CF. Isso mostra (pelo menos para mim) o quanto esse recurso é desejado - fazer com que os clientes criem sua própria automação em torno de funcionalidades básicas como essa não é uma resposta.

Além disso, devemos observar que toda a maneira parametersKey/ParamaterValue de trabalhar para o CloudFormation é estúpida.

Poderíamos ter o modelo do CloudFormation em YAML e fornecer o arquivo de parâmetros em JSON?

@Yashswarnkar Sim - você pode ter o modelo em YAML e os parâmetros em JSON. Esse problema ocorre porque os parâmetros só podem estar em JSON - os arquivos YAML não são compatíveis, apesar do modelo estar em YAML.

+1 Realmente gostaria de poder adicionar comentários aos meus arquivos de parâmetros e executá-los a partir da CLI. Algum plano ainda para adicionar suporte a .yaml para o comando create-stack da CLI com --parameters para oferecer suporte a yaml?

Algum ETA para este recurso?

+1

Quase 2 anos e ainda sem yaml para parâmetros... :(

+1

+1

+1

Com o SSM agora disponível com strings seguras e maneiras de decodificá-las, estou pensando em executar um script para colocar as variáveis ​​na conta da AWS e, em seguida, referenciá-las a partir do modelo cloudformation ... Alguém tem outras idéias como esta ?

De acordo com os comentários acima, você pode usar cfn-flip
https://github.com/awslabs/aws-cfn-template-flip

No bash - Exibe parameters.yaml como um arquivo json com o operador <( )

pip install cfn_flip

cat <(cfn-flip parameters.yaml)

Use, com <( ) no comando cli

aws cloudformation update-stack --stack-name test --template-body file://./api-test.yaml --parameters file://<(cfn-flip parameters.yaml)

+100

Este é obviamente um recurso em alta demanda - por que não houve nenhum movimento sobre isso, apesar do que parece ser centenas de pessoas solicitando?

+1
Caso de uso REAL, é ter que especificar JSON dentro de um parâmetro, caso em que JSON é um pesadelo com a necessidade de escapar de aspas ...

[
    {
        "ParameterKey": "DistributionJSON",
        "ParameterValue": "{\"Account_ID_1\":\"region_1,region_2\",\"Account_ID_2\":\"region_1\"}"
    }
]

Comparado com:

- ParameterKey: DistributionJSON
  ParameterValue: '{"Account_ID_1":"region_1,region_2","Account_ID_2":"region_1"}'

Nós vamos? Não há mais atualizações?

Nós vamos? Não há mais atualizações?

Calma, é só janeiro de 2019

Ei, como estão esses caras com a fusão de PRs?

Eu consideraria escrever isso se soubesse que a equipe regularmente mesclava PRs de pessoas de fora de sua organização.

Nenhuma idéia. Eu acho que há demanda suficiente para isso, eles vão implementá-lo eventualmente.

isso talvez devesse ficar aberto para sempre e todos que estão nele podem ser amigos e ter uma conferência todos os anos chamada 'Payameter Fam' (como em yaml parameter fam) onde todos nos reunimos e discutimos nosso trauma anti-yaml.

+1

👍

+1

+1

3 anos, 90% das APIs usando YAML, muito +1 chato e AWS coçando as bolas...

Eu realmente gostaria que o yaml simplesmente usasse comentários para os arquivos de configuração/descomentar itens/etc

+1

É junho de 2019, não entendo por que a AWS ainda não está resolvendo esse problema. Eles estão contratando tantas pessoas todos os anos

Vamos Sério? Vamos colocar isso em movimento

+1

+1

+1

+1

+1

+1

+1

esperando, esperando...

ainda esperando!

Ainda os parâmetros são apenas Json?

Esta questão tem idade suficiente para iniciar a pré-escola.

Estarei no re:Invent 2019 se alguém quiser se relacionar com essa questão e falar merda com Jeff Barr, et. ai no twitter.

Isso seria adorável

+1

+1

+1

+1
acabei de bater nesta rocha, posso obter suporte aos parâmetros YAML, por favor?
Meu projeto atual ama YAML (não sou :))

Você pode adicionar suporte XML também? Não consigo enviar isso via SOAP. O suporte da AWS é essencial no Windows Forms.

+1

+1

+1

Alguma atualização :/ ?

+1

+1
id gostaria de poder comentar no meu arquivo de parâmetro dividindo os parâmetros atualizáveis ​​​​da cloudformation e os não atualizáveis.
por exemplo. Eu tentei atualizar meu ID de instantâneo de um volume.
-> Propriedades de volume diferentes de AutoEnableIO, tipo, tamanho e IOPS não podem ser atualizadas. Altere as propriedades de volta para os valores anteriores e atualize a pilha novamente.

Estava tentando criar uma pilha com o seguinte comando: aws cloudformation create-stack --stack-name myfirsttest --region us-west-2 --template-body file://testcfn.yml
Mas deu a seguinte mensagem de erro:
Erro ao analisar o parâmetro '--template-body': Não é possível carregar o arquivo de parâmetro: testcfn.yml : [Errno 2] Arquivo ou diretório inexistente: 'testcfn.yml'

Meu arquivo testcfn.yml é o seguinte:
Description: > Vritika / Udacity project This template deploys a VPC Resources: UdacityVPC: Type: AWS::EC2::VPC Properties: CidrBlock: 10.0.0.0/16 EnableDnsHostnames: true

› aws ssm get-parameters-by-path help                                                                               

# ...

SYNOPSIS
            get-parameters-by-path
          --path <value>
          [--recursive | --no-recursive]
          [--parameter-filters <value>]
          [--with-decryption | --no-with-decryption]
          [--cli-input-json | --cli-input-yaml]
          [--starting-token <value>]
          [--page-size <value>]
          [--max-items <value>]
          [--generate-cli-skeleton <value>]
          [--cli-auto-prompt <value>]

# ...

       --generate-cli-skeleton  (string)  Prints  a  JSON skeleton to standard
       output without sending an API request. If provided with no value or the
       value input, prints a sample input JSON that can be used as an argument
       for --cli-input-json. Similarly, if provided yaml-input it will print a
       sample  input  YAML that can be used with --cli-input-yaml. If provided
       with the value output, it validates the command inputs  and  returns  a
       sample output JSON for that command.

Eba, suporte yaml!!!

› aws ssm get-parameters-by-path --path "/foo/bar/" --recursive --generate-cli-skeleton yaml-input
Path: ''  # [REQUIRED] The hierarchy for the parameter.
Recursive: true # Retrieve all parameters within a hierarchy.
ParameterFilters: # Filters to limit the request results.
- Key: ''  # [REQUIRED] The name of the filter.
  Option: '' # For all filters used with DescribeParameters, valid options include Equals and BeginsWith.
  Values: # The value you want to search for.
  - ''
WithDecryption: true # Retrieve all parameters in a hierarchy with their value decrypted.
MaxResults: 0 # The maximum number of items to return for this call.
NextToken: '' # A token to start the list.

Isso ainda não é uma coisa?? Ou eu perdi que é em algum lugar?

Para qualquer pessoa interessada em usar .yaml em seus parâmetros, consulte este
https://github.com/realestate-com-au/stackup

Acho que a AWS deveria estar batendo na porta das imobiliárias para comprar esse código e movê-lo para o IP deles .....

+1

Não é um grande fã de maneiras hacky de resolver problemas, já que hacky se torna confuso muito rápido.
Mas para qualquer pessoa interessada em fazer isso com o arquivo params em seu ambiente de teste.

s3template.yml

AWSTemplateFormatVersion: '2010-09-09'
Description: create a single S3 bucket
Parameters: 
  BucketName:
    Description: Unique name for bucket.
    Type: String
  AccessControl:
    Description: Access Control of the bucket
    Type: String
    AllowedValues:
      - Private
      - PublicRead

Resources:
  SampleBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: !Ref BucketName
      AccessControl: !Ref AccessControl

s3template.params

BucketName=sample-unique-bucket-123456
AccessControl=Private

Corre :
aws cloudformation deploy --template-file ./s3template.yml --stack-name sample-testbucket --region us-east-1 --parameter-overrides $(cat s3template.params)

+1 para arquivos de parâmetros como YAML. Por que forçar alguém a misturar marcações?

Esta página foi útil?
0 / 5 - 0 avaliações