Como referenciar os parâmetros do Systems Manager em diferentes serviços da AWS?
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).
Conteúdo relevante
- AWS OFICIALAtualizada há 3 anos
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há um ano