Como referenciar os parâmetros do Systems Manager em diferentes serviços da AWS?

6 minuto de leitura
0

Quero usar o Parameter Store, um recurso do AWS Systems Manager, para integrar os parâmetros do Systems Managers em vários serviços da AWS.

Breve descrição

Os cenários de exemplo a seguir são maneiras diferentes de referenciar parâmetros do Systems Manager:

  • Referenciar um parâmetro de tipo de string regular em um documento de comando do Systems Manager
  • Referenciar um parâmetro de tipo string seguro em um documento de comando do Systems Manager
  • Referenciar um parâmetro de tipo de string em um modelo do AWS CloudFormation
  • Referenciar um parâmetro de tipo de string em um script Boto3
  • Referenciar um parâmetro de tipo de string em um documento de automação do Systems Manager
  • Referenciar um parâmetro do tipo de string em uma AWS Command Line Interface (AWS CLI)

Resolução

Referenciar um parâmetro de tipo de string regular em um documento de comando do Systems Manager

Neste exemplo, você está instalando uma versão da AWS Command Line Interface (AWS CLI) em uma instância Linux x86 (64 bits) do Amazon Elastic Compute Cloud (Amazon EC2). O número da versão da AWS CLI é armazenado no Parameter Store como /CLI/required-version.

O exemplo faz referência ao parâmetro em um documento de comando como {{ssm:/CLI/required-version}}:

Observação: Você pode referenciar qualquer parâmetro do Systems Manager em um documento de comando no formato {{ssm:parameter-name}}.

{  
  "mainSteps": [  
    {  
      "action": "aws:runShellScript",  
      "name": "installSoftware",  
      "inputs": {  
        "runCommand": [  
          "echo 'Installing AWS CLI version {{ssm:/CLI/required-version}}'",  
          "curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64-{{ssm:/CLI/required-version}}" -o "awscliv2.zip",  
          "unzip awscliv2.zip",  
          "sudo ./aws/install"  
        ]  
      }  
    }  
  ]  
}

Referenciar um parâmetro de tipo string seguro em um documento de comando do Systems Manager

Se você usar um tipo de parâmetro SecureString, primeiro deverá descriptografar esse parâmetro por meio de um comando da AWS CLI. Em seguida, poderá usar esse parâmetro no documento de comando.

Observação: Se você não descriptografar o parâmetro primeiro, o valor gravado será o valor dos metadados.

Veja a seguir um exemplo de referência a um parâmetro de tipo string seguro em um documento de comando:

{  
  "mainSteps": [  
    {  
      "action": "aws:runShellScript",  
      "name": "installSoftware",  
      "inputs": {  
        "runCommand": [  
          "secure=$(aws ssm get-parameters --names /CLI/required-version --with-decryption --query Parameters[0].Value)",  
          "curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64-$secure" -o "awscliv2.zip",  
          "unzip awscliv2.zip",  
          "sudo ./aws/install"  
        ]  
      }  
    }  
  ]  
}

Referenciar um parâmetro de tipo string em um modelo do CloudFormation

Você pode usar um modelo do CloudFormation para referenciar um parâmetro de tipo string. Definir o valor como uma String indica que o valor retornado para esse parâmetro é uma string. Para outros tipos de parâmetros com suporte, consulte Supported SSM parameter types (Tipos de parâmetros do SSM compatíveis).

Veja a seguir um exemplo de lançamento de uma instância do Amazon EC2 cujo nome é armazenado no Parameter Store sob o nome de parâmetro InstanceName:

{  
  "Parameters": {  
    "MyInstanceName": {  
      "Type": "AWS::SSM::Parameter::Value<String>",  
      "Default": "InstanceName",  
      "Description": "Name of the EC2 instance"  
    }  
  },  
  "Resources": {  
    "TestInstance": {  
      "Type": "AWS::EC2::Instance",  
      "Properties": {  
        "ImageId": "ami-xxxx",  
        "InstanceType": "t3.xlarge",  
        "Tags": [{  
          "Key": "Name",  
          "Value": { "Ref": "MyInstanceName" }  
        }]  
      }  
    }  
  }  
}

O CloudFormation não aceita a definição de parâmetros de modelo como tipos de parâmetros SecureString do Systems Manager. No entanto, você pode usar referências dinâmicas para referenciar um parâmetro de string seguro em um modelo do CloudFormation somente para recursos compatíveis.

Se você estiver usando uma referência dinâmica para um parâmetro de string seguro em um modelo do CloudFormation, consulte este exemplo.

Referenciar um parâmetro de tipo de string em um script Boto3

Com o Boto3, você pode chamar uma função get_parameter com um parâmetro Name. Também pode incluir o campo WithDecryption para referenciar um parâmetro criptografado.

O exemplo a seguir faz referência ao valor de um parâmetro de string seguro do Systems Manager chamado /instance/name para iniciar a instância. Nesse exemplo, o nome da instância do EC2 é armazenado no parâmetro do Systems Manager /instance/name:.

Observação: Se você estiver usando o Boto3 com um parâmetro de tipo string, poderá remover o campo WithDecryption.

import boto3  
ec2_client = boto3.client('ec2')  
ssm_client = boto3.client('ssm')  
parameter_name = '/instance/name'  
response = ssm_client.get_parameter(  
    Name=parameter_name,  
    WithDecryption=True  
)  
instance_name = response['Parameter']['Value']  
response = ec2_client.describe_instances(  
    Filters=[  
        {  
            'Name': 'tag:Name',  
            'Values': [instance_name]  
        }  
    ]  
)  
instance_id = response['Reservations'][0]['Instances'][0]['InstanceId']  
ec2_client.start_instances(InstanceIds=[instance_id])  
print("Instance started successfully.")

Referenciar um parâmetro de tipo de string em um documento de automação do Systems Manager

Com documentos de automação do Systems Manager, você pode usar a API aws:executeAwsApi para referenciar um parâmetro do Systems Manager.

No exemplo a seguir, o ID da AMI é armazenado no parâmetro do Systems Manager e analisado como uma entrada para esse documento de automação. O valor do parâmetro da Etapa 1 é passado como entrada para a Etapa 2 para iniciar uma instância do EC2.

Observação: Se você estiver referenciando um parâmetro SecureString, poderá definir o valor do campo WithDecryption como True. No entanto, a saída da etapa de automação getparameter exibirá o valor descriptografado do parâmetro.


description: Sample runbook using AWS API operations
schemaVersion: '0.3'
assumeRole: '{{ AutomationAssumeRole }}'
parameters:
  AutomationAssumeRole:
    type: String
    description: (Optional) The ARN of the role that allows Automation to perform the actions on your behalf.
    default: ''
  AMIParameter:
    type: String
    description: SSM Parameter name to get the AMI ID from
mainSteps:
  - name: getparameter
    action: 'aws:executeAwsApi'
    inputs:
      Service: ssm
      Api: GetParameter
      Name: '{{AMIParameter}}'
      WithDecryption: false
    outputs:
      - Name: ImageId
        Selector: Parameter.Value
        Type: String
  - name: launchOneInstance
    action: 'aws:executeAwsApi'
    inputs:
      Service: ec2
      Api: RunInstances
      ImageId: '{{ getparameter.ImageId }}'
      MaxCount: 1
      MinCount: 1
    outputs:
      - Name: InstanceId
        Selector: '$.Instances[0].InstanceId'
        Type: String

Referenciar um parâmetro de tipo de string na AWS CLI

Referenciar parâmetros do Systems Manager na AWS CLI é semelhante a referenciar parâmetros em documentos de comando. Você pode referenciar um parâmetro do tipo string como ssm:parameter-name. Para parâmetros de string seguros, você deve primeiro descriptografar o parâmetro. Em seguida, pode usar esse parâmetro no comando da AWS CLI.

Para ver um exemplo de referência a um parâmetro na AWS CLI, consulte Executar um parâmetro (AWS CLI).

AWS OFICIAL
AWS OFICIALAtualizada há um ano