Global outage event
If you're experiencing issues with your AWS services, then please refer to the AWS Health Dashboard. You can find the overall status of ongoing outages, the health of AWS services, and the latest updates from AWS engineers.
さまざまな 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)」を参照してください。
- 言語
- 日本語
