cfn-signal
Descrição
O script auxiliar cfn-signal sinaliza o CloudFormation para indicar se as instâncias do Amazon EC2 foram criadas ou atualizadas com êxito. Se você instalar e configurar os aplicativos de software em instâncias, é possível sinalizar para o CloudFormation quando esses aplicativos de software estiverem prontos.
Você pode usar o script cfn-signal em conjunto com um Atributo CreationPolicy ou um grupo do Auto Scaling com uma política de atualização WaitOnResourceSignals. Quando o CloudFormation cria ou atualiza recursos com essas políticas, ele suspende o trabalho na pilha até que o recurso receba o número de sinais ou até que o tempo limite seja excedido. Para cada sinal válido que o CloudFormation recebe, o CloudFormation publica os sinais para os eventos da pilha para que você acompanhe cada sinal. Para obter uma demonstração detalhada que usa uma política de criação e cfn-signal, consulte Implantar aplicações no Amazon EC2.
nota
O cfn-signal não requer credenciais, portanto, você não precisa usar as opções --access-key
, --secret-key
, --role
ou --credential-file
. No entanto, se nenhuma credencial for especificada, o CloudFormation verificará se há associação de pilha e limitará o escopo da chamada para a pilha à qual a instância pertence.
Sintaxe para a sinalização de recursos (recomendado)
Se você deseja sinalizar os recursos do CloudFormation, use a sintaxe a seguir.
cfn-signal --success|-s
signal.to.send
\ --access-keyaccess.key
\ --credential-file|-fcredential.file
\ --exit-code|-eexit.code
\ --http-proxyHTTP.proxy
\ --https-proxyHTTPS.proxy
\ --id|-iunique.id
\ --regionAWS.region
\ --resourceresource.logical.ID
\ --roleIAM.role.name
\ --secret-keysecret.key
\ --stackstack.name.or.stack.ID
\ --urlAWS CloudFormation.endpoint
Sintaxe para uso com processamento de condição de espera
Se você deseja sinalizar um processamento de condição de espera, use a seguinte sintaxe.
cfn-signal --success|-s
signal.to.send
\ --reason|-rresource.status.reason
\ --data|-ddata
\ --id|-iunique.id
\ --exit-code|-eexit.code
\waitconditionhandle.url
Opções
As opções que você pode usar dependem se você está sinalizando uma política de criação ou um processamento de condição de espera. Algumas opções que se aplicam a uma política de criação podem não se aplicar a um processamento de condição de espera.
Nome | Descrição | Obrigatório |
---|---|---|
|
A chave de acesso da AWS para uma conta com permissão para chamar a Tipo: string |
Não |
|
Dados para enviar de volta com o Tipo: string Padrão: branco |
Não |
|
O código de erro de um processo que pode ser usado para determinar o sucesso ou falha. Se especificado, a opção Tipo: string Exemplos: |
Não |
|
Um arquivo que contém uma chave de acesso secreta e uma chave de acesso. O parâmetro do arquivo de credencial substitui os parâmetros --role, --access-key e --secret-key. Tipo: string |
Não |
|
Um proxy HTTP (não SSL). Use o seguinte formato: Tipo: string |
Não |
|
Um proxy HTTPS. Use o seguinte formato: Tipo: string |
Não |
|
O ID exclusivo a ser enviado. Tipo: string Default: O ID da instância do Amazon EC2. Se o ID não pode ser resolvido, o nome de domínio totalmente qualificado (FQDN) da máquina é retornado. |
Não |
|
Um motivo de status para o evento de recurso (atualmente usado apenas em falha) - padrão 'Configuração falhou' se o sucesso for falso. Tipo: string |
Não |
--region (apenas sinalização de recursos) |
O endpoint regional do CloudFormation a ser usado. Tipo: string Padrão: |
Não |
--resource (apenas sinalização de recursos) |
A ID lógica do recurso que contém a política de criações que você deseja sinalizar. Tipo: string |
Sim |
|
O nome de um perfil do IAM que está associado à instância. Tipo: string Condição: o parâmetro do arquivo de credencial substitui este parâmetro. |
Não |
|
Se verdadeiro, sinal Tipo: booliano Padrão: |
Não |
|
A chave de acesso secreta da AWS que corresponde a uma chave de acesso específica da AWS. Tipo: string |
Não |
|
O nome da pilha ou ID da pilha que contém o recurso que você deseja sinalizar. Tipo: string |
Sim |
-u, --url (apenas sinalização de recursos) |
O endpoint do CloudFormation a ser usado. Tipo: string |
Não |
|
Um URL pré-assinado que você pode usar para sinalizar sucesso ou falha a uma Tipo: string |
Sim |
Exemplo
Exemplo do Amazon Linux
Um padrão de utilização comum é utilizar o cfn-init e o cfn-signal juntos. A chamada de cfn-signal usa o status de retorno da chamada para cfn-init (usando a construção $? shell). Se o aplicativo falhar ao instalar, a instância falhará para criar e a pilha reverterá. Para as pilhas do Windows, consulte Bootstrapping de pilhas do Windows do AWS CloudFormation.
JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "Simple EC2 instance", "Resources": { "MyInstance": { "Type": "AWS::EC2::Instance", "Metadata": { "AWS::CloudFormation::Init": { "config": { "files": { "/tmp/test.txt": { "content": "Hello world!", "mode": "000755", "owner": "root", "group": "root" } } } } }, "Properties": { "ImageId": "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}", "InstanceType": "t2.micro", "UserData": { "Fn::Base64": { "Fn::Join": [ "", [ "#!/bin/bash -x\n", "# Install the files and packages from the metadata\n", "yum install -y aws-cfn-bootstrap", "\n", "/opt/aws/bin/cfn-init -v ", " --stack ", { "Ref": "AWS::StackName" }, " --resource MyInstance ", " --region ", { "Ref": "AWS::Region" }, "\n", "# Signal the status from cfn-init\n", "/opt/aws/bin/cfn-signal -e $? ", " --stack ", { "Ref": "AWS::StackName" }, " --resource MyInstance ", " --region ", { "Ref": "AWS::Region" }, "\n" ] ] } } }, "CreationPolicy": { "ResourceSignal": { "Timeout": "PT5M" } } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Description: Simple EC2 instance Resources: MyInstance: Type: 'AWS::EC2::Instance' Metadata: 'AWS::CloudFormation::Init': config: files: /tmp/test.txt: content: Hello world! mode: '000755' owner: root group: root Properties: ImageId: {{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}} InstanceType: t2.micro UserData: !Base64 'Fn::Join': - '' - - | #!/bin/bash -x - | # Install the files and packages from the metadata - yum install -y aws-cfn-bootstrap - |+ - | - '/opt/aws/bin/cfn-init -v ' - ' --stack ' - !Ref 'AWS::StackName' - ' --resource MyInstance ' - ' --region ' - !Ref 'AWS::Region' - |+ - | # Signal the status from cfn-init - '/opt/aws/bin/cfn-signal -e $? ' - ' --stack ' - !Ref 'AWS::StackName' - ' --resource MyInstance ' - ' --region ' - !Ref 'AWS::Region' - |+ CreationPolicy: ResourceSignal: Timeout: PT5M
Exemplos
Vários modelos de amostra do CloudFormation usam cfn-signal, incluindo os modelos a seguir.