AWS System Manager
AWS System Manager
概要
SSM エージェントを各種インスタンスにインストールすると、AWS コンソール上からそれらに対してコマンドを送り込んだり、各種設定を実行したりできる。
AWS Systems Manager エージェント (SSM エージェント) は、Amazon EC2 インスタンスとハイブリッドインスタンス (Systems Manager 用の設定済みハイブリッドインスタンス) で実行される Amazon のソフトウェアです。SSM エージェント はクラウド上の Systems Manager サービスからのリクエストを処理し、リクエストに指定されたとおりにマシンを設定します
いくつかの EC2 の AMI にはデフォルトでインストールされているらしい。
自動化
Systems Manager には処理自動化のための仕組みがいくつか用意されていて、各々専用の ドキュメント をあらかじめ登録しておき、それを後から再利用 & 実行する流れのようだ。
Automation
Run Command
...
自動化ワークフロー (Automation)
Systems Manager Automation は、action とそれに紐づく複数の step から構成される。
code:shell
例は以下のようになる。
code:yaml
mainSteps:
- name: name # 任意のステップ名
action: action
maxAttempts: value # 再試行回数
timeoutSeconds: value # タイムアウト時間
onFailure: value # 失敗時の動作 (中止、続行、別ステップ)
inputs:
...
nextStep: value # 次に実行するステップ名
- name: name
action: action
maxAttempts: value
timeoutSeconds: value
onFailure: value
inputs:
...
isEnd: true # 自動化の実行の終了
アクションの種類
aws:approve 承認されるまで処理を止める
aws:branch 条件分岐
aws:copyImage AMI のコピー
aws:createImage AMI の作成
aws:createStack CloudFormation スタックの作成
aws:executeAutomation 別の自動化ワークフローの実行
aws:executeAwsApi AWS API コール
aws:executeStateMachine StepFunctionsの実行
aws:invokeLambdaFunction Lambda の実行
aws:runCommand コマンドの実行
例えば、RunCommand の場合は以下のようなドキュメントになる。
code:yaml
name: installPowerShellModule
action: aws:runCommand
inputs:
DocumentName: AWS-InstallPowerShellModule
InstanceIds:
- i-1234567890abcdef0
Parameters:
sourceHash: ASDFWER12321WRW
Systems Manager パラメータ
Run Command や Automation から参照可能なパラメータを設定できる。それらのみでなく、AWS Lambda や Amazon ECS 等、他の AWS サービスからも参照することができる RunCommand からは以下のように参照する。
code:shell
aws ssm send-command \
--instance-ids i-1a2b3c4d5e6f7g8 \
--document-name AWS-RunPowerShellScript \
Secure String
登録
Systems Manager にはデフォルトの CMK が存在していて、以下で確認できる。
code:shell
aws kms describe-key --key-id alias/aws/ssm
デフォルトの CMK が存在する場合は、以下のようにする。
code:shell
aws ssm put-parameter --name parameter_name --value "parameter value" --type SecureString
--key-id を指定することで、カスタムの CMK を利用することもできる。
code:shell
aws ssm put-parameter \
--name parameter_name \
--value "parameter value" \
--type SecureString \
--key-id arn:aws:kms:us-east-2:123456789012:key/1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e
取得
RunComand を通しては、以下のように取得できる。
code:shell
value=$(aws ssm get-parameters --names parameter_name --with-decryption)
aws ssm send-command \
–name AWS-JoinDomain \
–parameters password=$value \
–instance-id instance-id
SSM (System Manager) エージェントのインストール
ためしに、Raspbian、すなわちオンプレにインストールしてみる。
IAM role の作成
SSM エージェントに利用させる IAM Role を作成する。SSM エージェントが AWS System Manager とコネクションをはったり、はった後に各種操作を行うのに利用される。
下記のような json ファイルを用意する。
code:json
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": {"Service": "ssm.amazonaws.com"},
"Action": "sts:AssumeRole"
}
}
これを利用して AWS CLI から IAM Role を作成する。
code:shell
aws iam create-role --role-name SSMServiceRole --assume-role-policy-document file://SSMService-Trust.json
さらに、作成した IAM Role に IAM Policy AmazonEC2RoleforSSM をアタッチする。
マネージドインスタンスのアクティベーションの作成
AWS System Manager にはアクティベーションという概念がある。インスタンスの操作をするにはこれを作成する必要があるので、以下のように作成する。
code:shell
aws ssm create-activation \
--default-instance-name <インスタンス名> \
--iam-role <作成した IAM Role> \
--registration-limit <マネージドインスタンスの数> \
--region <リージョン>
{
"ActivationCode": "xxxxx",
"ActivationId": "yyyyy"
}
SSM エージェントのインストール
実際にインスタンスにログインし、SSM エージェントをインストールする。先ほど得た ID および コード を利用する。
code:shell
mkdir /tmp/ssm
sudo dpkg -i /tmp/ssm/amazon-ssm-agent.deb
sudo service amazon-ssm-agent stop
sudo amazon-ssm-agent -register -code "<activation-code>" -id "<activation-id>" -region "region"
sudo service amazon-ssm-agent start
SSM エージェントのログをみたい場合は、以下を確認する。
/var/log/amazon/ssm/amazon-ssm-agent.log
/var/log/amazon/ssm/errors.log
System Manager からの CloudWatch Logs Agent のインストール
AWS System Manager を利用して CloudWatch Logs Agent をインストールするのをためす。ただ、Raspbian には CloudWatch Logs Agent はインストールできない。
手順は以下。
2. アクション > ランコマンド を選択し、コマンドを実行 ボタンを押下する
3. コマンドのドキュメント から AWS-ConfigureAWSPackage を選択する
このコマンドの説明は以下のようになっている
Install or uninstall the latest version or specified version of a package. For example, some standard packages are AwsEnaNetworkDriver, AWSPVDriver, and IntelSriovDriver.
4. コマンドのパラメータ に、以下を設定する
Action : Install
Name : AmazonCloudWatchAgent
Version : 空白 (これで最新バージョンがインストールされる)
5. ターゲット からインストール先のサーバを選択する
6. 実行 を選択