cfn-signal - AWS CloudFormation

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 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 aplicativos no Amazon EC2 com o AWS CloudFormation.

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-key access.key \ --credential-file|-f credential.file \ --exit-code|-e exit.code \ --http-proxy HTTP.proxy \ --https-proxy HTTPS.proxy \ --id|-i unique.id \ --region AWS.region \ --resource resource.logical.ID \ --role IAM.role.name \ --secret-key secret.key \ --stack stack.name.or.stack.ID \ --url AWS 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|-r resource.status.reason \ --data|-d data \ --id|-i unique.id \ --exit-code|-e exit.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

--access-key (apenas sinalização de recursos)

A chave de acesso da AWS para uma conta com permissão para chamar a API SignalResource do CloudFormation. O parâmetro do arquivo de credencial substitui este parâmetro.

Type: String

Não

-d, --data (processamento de condição de espera apenas)

Dados para enviar de volta com o waitConditionHandle. O padrão é branco.

Type: String

Padrão: branco

Não

-e, --exit-code

O código de erro de um processo que pode ser usado para determinar o sucesso ou falha. Se especificado, a opção --success será ignorada.

Type: String

Exemplos: -e $? (para Linux), -e %ERRORLEVEL% (para Windows cmd.exe) e -e $lastexitcode (para Windows PowerShell).

Não

-f, --credential-file (apenas sinalização de recursos)

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.

Type: String

Não

--http-proxy

Um proxy HTTP (não SSL). Use o formato a seguir: http://user:password@host:port:

Type: String

Não

--https-proxy

Um proxy HTTPS. Use o formato a seguir: https://user:password@host:port:

Type: String

Não

-i, --id

O ID exclusivo a ser enviado.

Type: 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

-r, --reason (processamento de condição de espera apenas)

Um motivo de status para o evento de recurso (atualmente usado apenas em falha) - padrão 'Configuração falhou' se o sucesso for falso.

Type: String

Não

--region (apenas sinalização de recursos)

O endpoint regional do CloudFormation a ser usado.

Type: String

Padrão: us-east-1

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.

Type: String

Sim

--role (apenas sinalização de recursos)

O nome de uma função do IAM que está associada à instância.

Type: String

Condição: o parâmetro do arquivo de credencial substitui este parâmetro.

Não

-s, --success

Se verdadeiro, sinal SUCCESS, senão FAILURE.

Type: Boolean

Padrão: true

Não

--secret-key (apenas sinalização de recursos)

A chave de acesso secreta da AWS que corresponde a uma chave de acesso específica da AWS.

Type: String

Não

--stack (apenas sinalização de recursos)

O nome da pilha ou ID da pilha que contém o recurso que você deseja sinalizar.

Type: String

Sim

-u, --url (apenas sinalização de recursos)

O endpoint do CloudFormation a ser usado.

Type: String

Não

waitconditionhandle.url (processamento de condição de espera apenas)

Uma URL pré-sinalizada que você pode usar para sinalizar sucesso ou falha a um WaitCondition associado

Type: 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": "ami-a4c7edb2", "InstanceType": "t2.micro", "UserData": { "Fn::Base64": { "Fn::Join": [ "", [ "#!/bin/bash -x\n", "# Install the files and packages from the metadata\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: ami-a4c7edb2 InstanceType: t2.micro UserData: !Base64 'Fn::Join': - '' - - | #!/bin/bash -x - | # Install the files and packages from the metadata - '/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.