さまざまな AWS サービスの Systems Manager パラメータを参照する方法を教えてください。
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)」を参照してください。

関連するコンテンツ
- 質問済み 2年前lg...
- AWS公式更新しました 1年前
- AWS公式更新しました 2年前