¿Puede alguien explicarme claramente la diferencia y la precedencia entre los comandos create-stack e deploy de AWS CLI Cloudformation ? Para mí, parece que hacen lo mismo y despliegan recursos.
¿Por qué cuando ejecuta el comando de implementación desde el cli, la pila de creación no tiene un conjunto de cambios ejecutable, mientras que la documentación dice:
Implementa la plantilla de AWS CloudFormation especificada creando y luego ejecutando un conjunto de cambios. El comando finaliza después de que AWS CloudFormation ejecuta el conjunto de cambios. Si desea ver el conjunto de cambios antes de que AWS CloudFormation lo ejecute, use la marca --no-execute-changeset.
create-stack solo se puede usar cuando sabe que desea crear una nueva pila. Si desea actualizar una pila, debe usar un comando diferente, etc. Si está escribiendo (ug) archivos por lotes para ayudar a ejecutar su formación en la nube, esto puede ser un verdadero dolor de cabeza.
La deploy es una funcionalidad para aprovechar mejor los conjuntos de cambios: en lugar de tener que saber si existe una pila, simplemente puede ejecutar la implementación y la herramienta descubrirá lo que debe hacer. Con --no-execute-changeset , en realidad le proporcionará el comando necesario si decide que desea revisar los cambios antes de aplicarlos.
Parece que esto se introdujo en noviembre de 2016, probablemente en la época en que se lanzaron los conjuntos de cambios.
Supongo que la deploy es solo 'azúcar sintáctico' en torno a los métodos api CreateChangeSet , CreateStack y UpdateStack .
Tenga en cuenta que, aunque la deploy se encuentra en la CLI , no se encuentra en la referencia de la API .
Supongo que se prefiere deploy fuera de cualquier necesidad de revisar explícitamente un conjunto de cambios. Sin utilizar la deploy , es posible que necesite create-change-set luego decidir si desea crear o actualizar una pila. En este caso, la implementación es como una pila "upsert".
Dejé de ser perezoso y revisé el código, y sí, deploy es, en última instancia, una forma más agradable de usar la formación en la nube desde la CLI. La implementación está aquí y aquí . Tenga en cuenta que, a partir de hoy, la capacidad de controlar el comportamiento de reversión no existe para la deploy según este problema .
Tenga cuidado con un comportamiento extraño del comando de deploy cuando cambia el valor predeterminado del parámetro ( LatestAmi en mi caso).
$ cat ec2.yaml AWSTemplateFormatVersion: "2010-09-09" Parameters: LatestAmi: Type: AWS::SSM::Parameter::Value<AWS::EC2::Image::Id> Default: /aws/service/canonical/ubuntu/server/20.04/stable/current/amd64/hvm/ebs-gp2/ami-id Resources: MyInstance: Type: AWS::EC2::Instance Properties: ImageId: !Ref LatestAmi InstanceType: t2.micro Tags: - Key: Name Value: cfn-deploy $ aws cloudformation deploy --template-file ec2.yaml --stack-name cfn-deploy Waiting for changeset to be created.. Waiting for stack create/update to complete Successfully created/updated stack - cfn-deploy $ cat ec2.yaml AWSTemplateFormatVersion: "2010-09-09" Parameters: LatestAmi: Type: AWS::SSM::Parameter::Value<AWS::EC2::Image::Id> Default: /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 Resources: MyInstance: Type: AWS::EC2::Instance Properties: ImageId: !Ref LatestAmi InstanceType: t2.micro Tags: - Key: Name Value: cfn-deploy $ aws cloudformation deploy --template-file ec2.yaml --stack-name cfn-deploy Waiting for changeset to be created.. No changes to deploy. Stack cfn-deploy is up to date $ aws --version aws-cli/2.5.2 Python/3.9.11 Linux/5.15.0-23-generic exe/x86_64.ubuntu.22 prompt/off Si usa el comando update-stack , la instancia se reemplaza con la AMI solicitada.