Al cargar mi plantilla en CloudFormation, recibo el siguiente error de validación:
Error de validación de plantilla: error de plantilla: el atributo en Fn::ImportValue no debe depender de ningún recurso, valor importado o Fn::GetAZs
Tengo una plantilla de prueba a continuación que reproduce el problema:
Resources: EC2Instance: Type: "AWS::EC2::Instance" Properties: ImageId: ami-3bfab942 InstanceType: t2.micro KeyName: mykeypair UserData: "Fn::Base64": !Sub | #!/bin/bash yum update -y aws-cfn-bootstrap /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource EC2Instance --configsets testset --region ${AWS::Region} yum -y update Metadata: AWS::CloudFormation::Init: configSets: testset: - "testConfiguration" testConfiguration: commands: CreateTestFile: cwd: "~" command: "Fn::ImportValue": !Sub | touch ${myexport}Para mantener las cosas tan simples como puedo, básicamente estoy tratando de crear un comando bash usando la exportación. Entonces, en el ejemplo anterior, quiero crear un archivo con un nombre basado en el valor de exportación. No entiendo el mensaje de error en el contexto de lo que intento hacer. He validado que la exportación existe en otra pila que he creado.
El problema no es Sub , pero no está utilizando ImportValue correctamente. Lo que realmente está importando en su código no es myexport , pero touch ${myexport} como un todo. Debe poner su ImportValue dentro de Sub .
Además, si el valor de exportación se llama literalmente myexport , no lo pones dentro ${} ; solo hace esto si es un parámetro que definió en la plantilla.
Podrías cambiar las últimas líneas por esto:
command: !Sub - "touch ${filename}" - filename: !ImportValue myexportSolo como una alternativa de sintaxis a la respuesta aceptada, uno podría preferir hacer:
command: !Sub ['touch ${filename}', filename: !ImportValue myexport]Estaba buscando hacer lo mismo pero con una sintaxis diferente ya que tenía contenido de subfunción de varias líneas. A continuación, se muestra el fragmento de código que funcionó para mí.
UserData: Fn::Base64: !Sub - | #!/bin/bash -xe echo ${VpcId} - VpcId: !ImportValue MyVPCId