57329
ssh 経由で実行するサーバー初期構築用の Ansible のレシピがあって  
これまでローカルPCからssh経由で対象サーバーにレシピを実行していたんですが  
このレシピをなるべく改変せずに ssh のかわりに SSM を使って実行する方法はあるでしょうか

* * *

セキュリティ要件のため管理はすべてSSM経由で行うことになり  
ローカルPCで ansible-playbook を実行するだけでは動きません

方法としては

  1. SSM でEC2に入ってからレシピを git clone でもってきて  
ローカルホストに対して ansible を実行する

初期環境なので python, git, ansible が入っていないので手動でインストールする必要があり再現性が担保できない

  2. aws cli には Run Command   
(<https://docs.aws.amazon.com/ja_jp/systems-
manager/latest/userguide/walkthrough-cli.html>)  
というのがあってSSM 経由でコマンドを実行できるみたいなのですが  
ansible で ssh のかわりにこの Run Command を使用するというのはできないでしょうか

  3. python, git, ansible をインストールしてローカルに Ansible を実行する  
という１連のスクリプトを書いてそれを Run Command で呼べば可能ではあるのですが  
対象サーバーに ssh さえあれば何もインストールする必要がない Ansible のメリットが損なわれます

コストがかかるようであれば一時的に ssh をあけてもらって  
レシピをいままでどおり実行した後閉じるということになるんですが  
それも上長へ申請が必要なので、できるのであればSSMでansibleを実行する方法を知りたいです
CC BY-SA 4.0
2019-08-13T03:28:48.527
57328
2019-08-15T05:44:24.070
2019-08-15T03:45:17.370
question
aws amazon-ec2 ansible
新規EC2インスタンスにSSM経由でAnsibleを実行する方法
> これまでローカルPCからssh経由で対象サーバーにレシピを実行していたんですが  
>  このレシピをなるべく改変せずに ssh のかわりに SSM を使って実行する方法はあるでしょうか

最初に回答した通り、SSMは複数台や定期的に複数回実行することを目的としているので、初期構築という意味ではあまり適切とは思えません。  
Ansibleは`ssh`をトンネルとして利用しManaged
Nodeを制御します。しかしSSMはトンネルは提供せず、定型コマンドを実行するのみの機能となります。

* * *

> 対象サーバーに ssh さえあれば何もインストールする必要がない Ansible のメリットが損なわれます

勘違いされているようですが、AnsibleのManaged
Nodeとして動作させるためには[`ssh`だけでなく`python`も必要と明記](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html#managed-
node-requirements)されています。初期環境で`python`が入っていないとのことなので、どの道パッケージのインストール処理が必要です。  
なお、SSMはAnsibleのControl Nodeの役割を担うわけではありません。対象サーバーはControl
Nodeとして[`ansible`のインストールも必要](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html#control-
node-requirements)です。

その上で、SSMを使用するのであれば[SSMエージェント](https://docs.aws.amazon.com/ja_jp/systems-
manager/latest/userguide/ssm-agent.html)のインストール処理も必要です。

* * *

`AWS-RunRemoteScript`を使用することで[Amazon S3
からのスクリプトの実行](https://docs.aws.amazon.com/ja_jp/systems-
manager/latest/userguide/integration-remote-
scripts.html#integration-s3)なんかは可能です。  
ただし、SSMは複数台や定期的に複数回実行することを目的としているので、初期構築という意味ではあまり適切とは思えません。

ユーザーデータを使用すれば、[インスタンス起動時に実行](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/user-
data.html)可能なため、そちらで初期構築することをお勧めします。
CC BY-SA 4.0
2019-08-13T03:52:52.923
57329
2019-08-15T05:44:24.070
2019-08-15T05:44:24.070
4236
4236
57328
answer
AnsibleのPlaybookはYAMLで記述されますが、SSMで使用されるのはJSON形式での設定ファイルになるようなので、単純な流用は出来ないと思います。
CC BY-SA 4.0
2019-08-15T05:32:04.070
57368
2019-08-15T05:32:04.070
3060
57328
answer