cfn-signal
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ê usa o script cfn-signal
em conjunto com um Atributo CreationPolicy ou um Atributo UpdatePolicy com WaitOnResourceSignals
para grupos do Amazon EC2 Auto Scaling. 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 exigidos ou até que o tempo limite seja excedido. Para cada sinal válido que o CloudFormation recebe, ele publica os sinais para os eventos da pilha de modo que você possa acompanhar cada sinal.
Tópicos
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
nota
cfn-signal
não exige 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. Para ter mais informações, consulte Permissões para scripts auxiliares.
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 |
Exemplos
Exemplo do Amazon Linux
Um padrão de utilização comum é utilizar cfn-init
e cfn-signal
juntos. A chamada de cfn-signal
usa o status de retorno da chamada para cfn-init
(usando o constructo $? shell). Se o aplicativo falhar ao instalar, a instância falhará para criar e a pilha reverterá.
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
Recursos relacionados
Você também pode visitar nosso repositório no GitHub para baixar exemplos de modelo que usam cfn-signal
, incluindo os que se seguem.