Aws-cli: El archivo de parámetros externos de Cloudformation no es compatible con el archivo YAML

Creado en 3 nov. 2016  ·  143Comentarios  ·  Fuente: aws/aws-cli

Usé aws-cli para actualizar mis pilas y quiero usar un archivo yaml externo (dev.yaml) como archivo de parámetros como se muestra a continuación:

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

En dev.yaml , solo tiene:

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

Sin embargo, recibí este mensaje de error cuando ejecuté el comando de actualización anterior:

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

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

Si uso el archivo JSON con el mismo contexto que se muestra a continuación y lo uso en lugar de dev.yaml , funciona bien:

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

Entonces, ¿el archivo de parámetros externos para aws cloudformation puede ser un archivo YAML? o voluntad...?

feature-request

Comentario más útil

Apoyaré esta solicitud de función.

Todos 143 comentarios

Hola, actualmente no tenemos ningún plan para admitir YAML como parte de los argumentos de la línea de comandos. Marcaré esto como una solicitud de función, ya que puedo ver cómo podría ser útil para algunas personas.

El contenido del archivo que proporciona a --parameters se carga y se vuelca directamente como un argumento, por lo que solo puede tener el contenido del archivo en uno de dos formatos:
Sintaxis abreviada:
ParameterKey=string,ParameterValue=string,UsePreviousValue=boolean
o sintaxis JSON:

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

Apoyaré esta solicitud de función.

yo también lo secundo

+1

Por favor. Esto es fundamental para nosotros.

+1

absolutamente +1

+1 permitir datos con formato YAML para --template-body pero no para --parameters es incómodo

👍

+1

+1

+1

dado que puede proporcionar una plantilla en yaml, también debería poder proporcionar los parámetros en yaml
creo que esta característica es imprescindible

+1

+100

+1

+100

+1

" https://gist.github.com/mbailey/2f7c878eed123cab6fb125117f35aecc
"
"yamlise: vea YAML al editar archivos JSON en vim.
"
" Creado para personas con fobia a JSON, esto debería
" solo se usará cuando todos los intentos de dominar JSON
" han fallado. http://www.json.org/
"
"¡Espero que no sea demasiado tarde para esta gente!
“'Por favor. Esto es crítico para nosotros'.
" https://github.com/aws/aws-cli/issues/2275#issuecomment-277829948
"
" Instalación
============
" 1. Instale cfn-flip https://github.com/awslabs/aws-cfn-template-flip
" 2. Incluya este archivo en su ~/.vimrc
3. vim cloudformation-params.json
" AHORA DEBES VER EL YAML QUE NECESITAS
" 4. :q
" El archivo ahora debe contener el JSON que Amazon CLI espera
"
:augroup yamlise
: autocmd!
: autocmd BufReadPost,FileReadPost *.json '[,']!cfn-flip
: autocmd BufWritePre,FileWritePre *.json '[,']!cfn-flip
: autocmd FileAppendPre *.json '[,']!cfn-flip
:augroup FIN

+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

Aquí hay una solución simple usando la sustitución del proceso Bash y cfn-flip :
aws cloudformation ... --parameters file://<(cfn-flip parameters.yml)

+1

+1

++

+0.5

+1

++

+1!

No entiendo por qué tendría la plantilla en YAML pero luego los parámetros en JSON. Parece una omisión extraña y espero que AWS esté trabajando en... ¿por favor?

+1

+1

¡Buenos días!

Estamos cerrando este problema aquí en GitHub, como parte de nuestra migración a UserVoice para solicitudes de características relacionadas con la CLI de AWS.

Esto nos permitirá obtener las funciones más importantes para usted, al facilitar la búsqueda y mostrar soporte para las funciones que más le interesan, sin diluir la conversación con informes de errores.

Como introducción rápida a UserVoice (si aún no está familiarizado): después de publicar una idea, las personas pueden votar sobre las ideas y el equipo del producto responderá directamente a las sugerencias más populares.

Hemos importado solicitudes de funciones existentes de GitHub. ¡Busque este problema allí!

Y no se preocupe, este problema seguirá existiendo en GitHub por el bien de la posteridad. Como se trata de una importación de solo texto de la publicación original en UserVoice, seguiremos teniendo en cuenta los comentarios y la discusión que ya existen aquí sobre el problema de GitHub.

GitHub seguirá siendo el canal para informar errores.

Una vez más, este problema ahora se puede encontrar buscando el título en: https://aws.uservoice.com/forums/598381-aws-command-line-interface

-El equipo de herramientas y SDK de AWS

Esta entrada se puede encontrar específicamente en UserVoice en: https://aws.uservoice.com/forums/598381-aws-command-line-interface/suggestions/33168310-cloudformation-external-parameter-file-do-not-supp

+1

Según los comentarios de la comunidad, hemos decidido devolver las solicitudes de funciones a los problemas de GitHub.

+1

+1

+1

+100

+1

+1

+1

+1
y +1000 para más consistencia en general, por favor;)

+1

Este tema tiene 2 años ;_;

@matthewflannery no, en realidad son solo 587 días.

+1

@Yaowenjie 587/365 = 1.608 ~ 2 años

+1

más 11!1!1uno!!1!11

:+1:

:pesado_más_signo: :100:

👍

+1

¡Faltan dos meses para la celebración del segundo aniversario de este número, amigos! 👨‍👩‍👧‍👦🎉🎉🎊🎊👨‍👨‍👧‍👦

Debido a que mi equipo está acostumbrado a YAML (todas nuestras plantillas están en YAML), tengo una automatización de shell que convierte un archivo YAML en un archivo json y luego lo pasa a CF. Eso muestra (al menos para mí) cuán deseada es esta función: hacer que los clientes creen su propia automatización en torno a una funcionalidad básica como esta no es una respuesta.

Además, debemos tener en cuenta que toda la forma de trabajar de los parámetrosKey/ParamaterValue para CloudFormation es estúpida.

¿Podríamos tener la plantilla de CloudFormation en YAML y proporcionar el archivo de parámetros en JSON?

@Yashswarnkar Sí, puede tener la plantilla en YAML y los parámetros en JSON. Este problema se debe a que los parámetros solo pueden estar en JSON: los archivos YAML no son compatibles a pesar de que la plantilla está en YAML.

+1 Realmente me gustaría poder agregar comentarios a mis archivos de parámetros y ejecutarlos desde la CLI. ¿Algún plan aún para agregar compatibilidad con .yaml para el comando de CLI create-stack con --parameters para admitir yaml?

¿Algún ETA para esta característica?

+1

Casi 2 años y todavía no hay yaml para los parámetros... :(

+1

+1

+1

Ahora que SSM está disponible con cadenas seguras y formas de decodificarlas, estoy considerando la idea de ejecutar un script para colocar las variables en la cuenta de AWS y luego hacer referencia a ellas desde la plantilla de formación en la nube... Alguien tiene otras ideas como esta ?

Según los comentarios anteriores, podría usar cfn-flip
https://github.com/awslabs/aws-cfn-template-flip

En bash: muestra parámetros.yaml como un archivo json con el operador <( )

pip install cfn_flip

cat <(cfn-flip parameters.yaml)

Use, con <( ) en el comando cli

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

+100

Obviamente, esta es una característica de gran demanda: ¿por qué no ha habido ningún movimiento en esto a pesar de que parece que cientos de personas lo solicitan?

+1
Caso de uso REAL, es donde tener que especificar JSON dentro de un parámetro, en cuyo caso JSON es una pesadilla al tener que escapar de las comillas ...

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

Comparado con:

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

¿Bien? ¿No hay más actualizaciones?

¿Bien? ¿No hay más actualizaciones?

Tranquilos, es solo enero de 2019

Oye, ¿cómo están estos tipos con la fusión en relaciones públicas?

Consideraría escribir esto si supiera que el equipo se fusiona regularmente en relaciones públicas de personas ajenas a su organización.

Ni idea. Me imagino que hay suficiente demanda para esto, eventualmente lo implementarán.

esto tal vez debería permanecer abierto para siempre y todos los que están en él pueden ser amigos y tener una conferencia todos los años llamada 'Payameter Fam' (como en el parámetro fam de yaml) donde todos nos reunimos y discutimos nuestro trauma anti-yaml.

+1

👍

+1

+1

3 años, el 90 % de las API usan YAML, muchos +1 molestos y AWS rascándose las pelotas...

Realmente me gustaría que Yaml simplemente use comentarios para los archivos de configuración/elementos sin comentar/etc.

+1

Es junio de 2019, no entiendo por qué AWS todavía no resuelve este problema. Están contratando a tanta gente cada año.

Vamos ¿De verdad? Hagamos que esto se mueva

+1

+1

+1

+1

+1

+1

+1

esperando esperando...

¡todavía esperando!

¿Todavía los parámetros son solo Json?

Este problema tiene la edad suficiente para comenzar el preescolar.

Estaré en re:Invent 2019 si alguien quiere vincularse sobre este tema y hablar mierda con Jeff Barr, et. al en twitter.

esto sería encantador

+1

+1

+1

+1
simplemente golpee esta roca, ¿puedo obtener soporte de parámetros YAML, por favor?
Mi proyecto actual ama YAML (no lo soy :))

¿Puedes agregar soporte XML también? No puedo enviar esto a través de SOAP. El soporte de AWS es esencial en Windows Forms.

+1

+1

+1

Alguna actualización :/ ?

+1

+1
Me gustaría poder comentar en mi archivo de parámetros dividiendo los parámetros actualizables de Cloudformation y los no actualizables.
p.ej. Intenté actualizar mi ID de instantánea de un volumen.
-> Las propiedades del volumen que no sean AutoEnableIO, tipo, tamaño e IOPS no se pueden actualizar. Vuelva a cambiar las propiedades a los valores anteriores y actualice la pila nuevamente.

Estaba tratando de crear una pila con el siguiente comando: aws cloudformation create-stack --stack-name myfirsttest --region us-west-2 --template-body file://testcfn.yml
Pero recibió el siguiente mensaje de error:
Error al analizar el parámetro '--template-body': no ​​se puede cargar el archivo de parámetro: //testcfn.yml : [Errno 2] No existe tal archivo o directorio: 'testcfn.yml'

Mi archivo testcfn.yml es el siguiente:
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.

¡Vaya, soporte de 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.

¿Esto todavía no es una cosa? ¿O me perdí que está en alguna parte?

Para cualquier persona interesada en usar .yaml en sus parámetros, consulte esto
https://github.com/realestate-com-au/stackup

Creo que AWS debería estar llamando a la puerta de bienes raíces para comprar este código y moverlo a su IP...

+1

No soy un gran fanático de las formas hacky de resolver problemas, ya que hacky se vuelve desordenado bastante rápido.
Pero para cualquier persona interesada en hacer esto con el archivo params en su entorno de prueba.

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

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

+1 para archivos de parámetros como YAML. ¿Por qué obligar a alguien a mezclar marcas?

¿Fue útil esta página
0 / 5 - 0 calificaciones