最近Ansibleを使うようになってきました。 Ansibleを使う際には、該当のサーバーのSSHポートを開けて置く必要があります。 ローカルマシン→EC2 の場合は特に問題はないですが、GitHubActionsのようなCIツールから実行するにはどうすればよいでしょうか。IPが変わるので、セキュリティグループを全開放にするのもやりたくないですよね
ここでSSMを利用してAnsibleを実行していきます。
ベストプラクティスにそった構成でも実行できるので、特別なことをする必要はありません。
大事なこと
大事なことなのですが、Ansibleのファイルたちはzipにまとめる必要があるようです。
最初まとめないで実行して苦労しました。
Ansible
ファイル構成は以下です とりあえずテストで、gitとvimのインストールをしています
ansible ├── roles │ └── common │ ├── handlers │ ├── tasks │ │ ├── install_git.yml │ │ ├── install_vim.yml │ │ └── main.yml │ └── template └── site.yml
handlers
やtemplate
は空ですが、そのうち使いそうな気がするのでこのままにしておきます。
site.yml
--- - name: apply Initial setting hosts: localhost roles: - common
main.yml
--- - include: install_git.yml - include: install_vim.yml
install_git.yml
--- - name: install git become: yes yum: name=git
install_vim.yml
--- - name: install vim become: yes yum: name=vim
SSM実行
AWSコンソールからも実行できますが、CIを意識するために aws cli で実行します GitHubリポジトリがシークレットの場合は別途SSMのパラメータを設定する必要があります。 詳細はこちら => https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/parameter-create-console.html
aws ssm --profile {{profile.name}} send-command \ --document-name "AWS-ApplyAnsiblePlaybooks" \ --document-version "1" \ --targets '[{"Key":"InstanceIds","Values":["i-xxxxxxxxxxxx"]}]' \ --parameters '{"SourceType":["GitHub"],"SourceInfo":["{ \"owner\": \"username\", \"repository\": \"repo.name\", \"getOptions\": \"branch:main\", \"path\": \"ansible.zip\", \"tokenInfo\": \"{{ssm-secure:myTokenName}}\" }"],"InstallDependencies":["True"],"PlaybookFile":["ansible/site.yml"],"ExtraVariables":["SSM=True"],"Check":["False"],"Verbose":["-v"],"TimeoutSeconds":["3600"]}' \ --timeout-seconds 600 \ --max-concurrency "50" \ --max-errors "0" \ --region ap-northeast-1
結果
SSMのコンソールからoutputが見れます 一部抜粋したものを載せます
PLAY [apply Initial setting] *************************************************** TASK [Gathering Facts] ********************************************************* ok: [localhost] TASK [common : install git] **************************************************** changed: [localhost] => {"changed": true, "changes": {"installed": ["git"]}, "msg": "", "rc": 0, "results": ["Loaded plugins: extras_suggestions, langpacks, priorities, update-motd\n216 packages excluded due to repository priority protections\nResolving Dependencies\n--> Running transaction check\n---> Package git.x86_64 0:2.32.0-1.amzn2.0.1 will be installed\n--> Processing Dependency: perl-Git = 2.32.0-1.amzn2.0.1 for package: git-2.32.0-1.amzn2.0.1.x86_64\n--> Processing Dependency: git-core-doc = 2.32.0-1.amzn2.0.1 for package: git-2.32.0-1.amzn2.0.1.x86_64\n--> Processing Dependency: git-core = 2.32.0-1.amzn2.0.1 for package: git-2.32.0-1.amzn2.0.1.x86_64\n--> Processing Dependency: emacs-filesystem >= 27.1 for package: git-2.32.0-1.amzn2.0.1.x86_64\n--> Processing Dependency: perl(Term::ReadKey) for package: git-2.32.0-1.amzn2.0.1.x86_64\n--> Processing Dependency: perl(Git::I18N) for package: git-2.32.0-1.amzn2.0.1.x86_64\n--> Processing Dependency: perl(Git) for package: git-2.32.0-1.amzn2.0.1.x86_64\n--> Running transaction check\n---> Package emacs-filesystem.noarch 1:27.2-4.amzn2.0.1 will be installed\n---> Package git-core.x86_64 0:2.32.0-1.amzn2.0.1 will be installed\n---> Package git-core-doc.noarch 0:2.32.0-1.amzn2.0.1 will be installed\n---> Package perl-Git.noarch 0:2.32.0-1.amzn2.0.1 will be installed\n--> Processing Dependency: perl(Error) for package: perl-Git-2.32.0-1.amzn2.0.1.noarch\n---> Package perl-TermReadKey.x86_64 0:2.30-20.amzn2.0.2 will be installed\n--> Running transaction check\n---> Package perl-Error.noarch 1:0.17020-2.amzn2 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package Arch Version Repository Size\n================================================================================\nInstalling:\n git x86_64 2.32.0-1.amzn2.0.1 amzn2-core 126 k\nInstalling for dependencies:\n emacs-filesystem noarch 1:27.2-4.amzn2.0.1 amzn2-core 67 k\n git-core x86_64 2.32.0-1.amzn2.0.1 amzn2-core 4.8 M\n git-core-doc noarch 2.32.0-1.amzn2.0.1 amzn2-core 2.7 M\n perl-Error noarch 1:0.17020-2.amzn2 amzn2-core 32 k\n perl-Git noarch 2.32.0-1.amzn2.0.1 amzn2-core 43 k\n perl-TermReadKey x86_64 2.30-20.amzn2.0.2 amzn2-core 31 k\n\nTransaction Summary\n================================================================================\nInstall 1 Package (+6 Dependent packages)\n\nTotal download size: 7.8 M\nInstalled size: 38 M\nDownloading packages:\n--------------------------------------------------------------------------------\nTotal 30 MB/s | 7.8 MB 00:00 \nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n Installing : git-core-2.32.0-1.amzn2.0.1.x86_64 1/7 \n Installing : git-core-doc-2.32.0-1.amzn2.0.1.noarch 2/7 \n Installing : 1:perl-Error-0.17020-2.amzn2.noarch 3/7 \n Installing : 1:emacs-filesystem-27.2-4.amzn2.0.1.noarch 4/7 \n Installing : perl-TermReadKey-2.30-20.amzn2.0.2.x86_64 5/7 \n Installing : perl-Git-2.32.0-1.amzn2.0.1.noarch 6/7 \n Installing : git-2.32.0-1.amzn2.0.1.x86_64 7/7 \n Verifying : perl-TermReadKey-2.30-20.amzn2.0.2.x86_64 1/7 \n Verifying : git-core-doc-2.32.0-1.amzn2.0.1.noarch 2/7 \n Verifying : perl-Git-2.32.0-1.amzn2.0.1.noarch 3/7 \n Verifying : 1:emacs-filesystem-27.2-4.amzn2.0.1.noarch 4/7 \n Verifying : git-2.32.0-1.amzn2.0.1.x86_64 5/7 \n Verifying : git-core-2.32.0-1.amzn2.0.1.x86_64 6/7 \n Verifying : 1:perl-Error-0.17020-2.amzn2.noarch 7/7 \n\nInstalled:\n git.x86_64 0:2.32.0-1.amzn2.0.1 \n\nDependency Installed:\n emacs-filesystem.noarch 1:27.2-4.amzn2.0.1 \n git-core.x86_64 0:2.32.0-1.amzn2.0.1 \n git-core-doc.noarch 0:2.32.0-1.amzn2.0.1 \n perl-Error.noarch 1:0.17020-2.amzn2 \n perl-Git.noarch 0:2.32.0-1.amzn2.0.1 \n perl-TermReadKey.x86_64 0:2.30-20.amzn2.0.2 \n\nComplete!\n"]} TASK [common : install vim] **************************************************** ok: [localhost] => {"changed": false, "msg": "", "rc": 0, "results": ["2:vim-enhanced-8.1.1602-1.amzn2.x86_64 providing vim is already installed"]} PLAY RECAP ********************************************************************* localhost : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
おわりに
これとGitHubActionsを組み合わせて実行したい…! いちいちzip作ってアップロードとかしたくないですよね さらなる自動化に向けてがんばります