さまざまな AWS サービスの Systems Manager パラメータを参照する方法を教えてください。

所要時間3分
0

AWS Systems Manager の機能である Parameter Store を使用して、AWS Systems Manager のパラメータをさまざまな AWS サービスに統合したいと考えています。

簡単な説明

以下のシナリオ例は、Systems Manager パラメーターを参照するさまざまな方法です。

  • Systems Manager コマンドドキュメント内の通常の文字列型パラメータを参照する
  • Systems Manager コマンドドキュメント内のセキュアな文字列型パラメータを参照する
  • AWS CloudFormation テンプレート内の文字列タイプのパラメータを参照する
  • Boto3 スクリプトの文字列型パラメータを参照する
  • Systems Manager 自動化ドキュメント内の文字列型パラメータを参照する
  • AWS コマンドラインインターフェイス (AWS CLI) の文字列型パラメータを参照する

解決策

Systems Manager コマンドドキュメント内の通常の文字列型パラメータを参照する

この例では、AWS コマンドラインインターフェイス (AWS CLI) を Amazon Elastic Compute Cloud (Amazon EC2) Linux x86 (64 ビット) インスタンスにインストールします。AWS CLI のバージョン番号は /CLI/required-version として Parameter Store に保存されます。

この例は、コマンドドキュメント内のパラメータを {{ssm: /CLI/required-version}} として参照しています。

**注:**コマンドドキュメント内のどの Systems Manager パラメータも {{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"  
        ]  
      }  
    }  
  ]  
}

Systems Manager コマンドドキュメント内のセキュアな文字列型パラメータを参照する

SecureString パラメータタイプを使用する場合は、まず AWS CLI コマンドを使用してパラメータを復号化する必要があります。これで、コマンドドキュメントのパラメータを使用できるようになります。

**注:**最初にパラメータを復号化しない場合、書き込まれる値はメタデータ値です。

以下は、コマンドドキュメントでセキュアな文字列型パラメータを参照する例です。

{  
  "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"  
        ]  
      }  
    }  
  ]  
}

CloudFormation テンプレート内の文字列型パラメータを参照する

CloudFormation テンプレートを使用して文字列型パラメータを参照できます。値を文字列として定義すると、そのパラメータに対して返される値が文字列であることを示します。サポートされている他のパラメータタイプについては、「サポートされている SSM パラメータタイプ」を参照してください。

以下は、パラメータストアに InstanceName というパラメータ名で名前が保存されている Amazon EC2 インスタンスを起動する例になります。

{  
  "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" }  
        }]  
      }  
    }  
  }  
}

CloudFormation は、テンプレートパラメータを SecureString Systems Manager パラメータタイプとして定義することをサポートしていません。ただし、動的参照を使用して CloudFormation テンプレート内の安全な文字列パラメータを参照できるのは、サポートされているリソースのみとなります。

CloudFormationテンプレートの安全な文字列パラメータに動的参照を使用している場合は、このを参照してください。

Boto3 スクリプトの文字列型パラメータを参照する

Boto3 では、名前パラメータを指定して get_parameter 関数を呼び出すことができます。WithDecryption フィールドを含めて、暗号化されたパラメータを参照することもできます。

次の例では、/instance/name というセキュア文字列の Systems Manager パラメータの値を参照してインスタンスを起動します。この例では、EC2 インスタンス名は Systems Manager のパラメーター /instance/name: に保存されています。

**注:**文字列型パラメータで Boto3 を使用している場合は、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.")

Systems Manager 自動化ドキュメント内の文字列型パラメータを参照する

Systems Managerの自動化ドキュメントでは、aws:executeAwsApi API を使用して Systems Manager パラメータを参照することができます。

次の例では、AMI Id が Systems Manager パラメータに保存され、この自動化ドキュメントの入力として解析されます。ステップ 1 のパラメータ値は、EC2 インスタンスを起動するための入力としてステップ 2 に渡されます。

**注:**SecureString パラメータを参照している場合は、WithDecryption フィールドの値を True に設定可能です。ただし、自動化ステップの getparameter の出力には、パラメータの復号化された値が表示されます。


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

AWS CLI の文字列型パラメータを参照する

AWS CLI で Systems Manager パラメータを参照することは、コマンドドキュメントのパラメータを参照するのと似ています。文字列型のパラメータは ssm:parameter-name として参照可能です。セキュアな文字列パラメータには、まずパラメータを復号化する必要があります。そうすることで、AWS CLI コマンドでパラメータを使用できるようになります。

AWS CLI でパラメータを参照する例については、「パラメータを実行する (AWS CLI)」を参照してください。

AWS公式
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ