この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
前置き
この記事は以下スライドに対するアンサーです。
そして、タイトルで既に出オチなのは覚悟の上です。
はじめに
Amazon Linuxのcloud-initの動きについて調べてみたで、cloud-initの最後に実行されるのはcloud_final_modulesであると書きました。そしてcloud_final_modulesには以下のモジュールが含まれています。
# The modules that run in the 'final' stage
cloud_final_modules:
- scripts-per-once
- scripts-per-boot
- scripts-per-instance
- scripts-user
- ssh-authkey-fingerprints
- keys-to-console
- phone-home
- final-message
- power-state-change
このscripts-per-*モジュールのソースを見ると、以下のような動きになっています。
- scripts-per-once ... /var/lib/cloud/scripts/per-once配下のスクリプトファイルが一度だけ実行。
- scripts-per-boot ... /var/lib/cloud/scripts/per-boot配下のスクリプトファイルが起動するたびに実行。
- scripts-per-instance ... /var/lib/cloud/scripts/per-instance配下のスクリプトファイルが、特定のインスタンスIDに対して一度だけ実行。
それでは、scripts-per-onceを使えば、EC2がLaunchされた時に通知することが出来るだろう、じゃあYo使えば良くね?というのが今回のスタート地点です。なんか無理がある気はしてるんですが気にしないで下さい。
やってみる
Amazon Linux AMIでEC2をLaunchするときに、以下のようにUser-Dataを設定します。
#cloud-config
write_files:
- content: |
#!/bin/sh
curl --data "api_token=YOUR_API_TOKEN" http://api.justyo.co/yoall/
owner: root:root
path: /var/lib/cloud/scripts/per-once/yo.sh
permissions: '0755'
EC2のLaunchが完了すると、api_tokenで指定したYOアカウントがyoallをしてくれるので、そのYoアカウントをFollowしているアカウント全員にYoが飛んできます。
cloud-init.logを確認すると、こんな感じでログが残っています。
Aug 22 06:56:20 cloud-init[1451]: util.py[DEBUG]: Writing to /var/lib/cloud/scripts/per-once/yo.sh - wb: [493] 99 bytes
Aug 22 06:56:20 cloud-init[1451]: util.py[DEBUG]: Changing the ownership of /var/lib/cloud/scripts/per-once/yo.sh to 0:0
Aug 22 06:56:49 cloud-init[1647]: util.py[DEBUG]: Running command ['/var/lib/cloud/scripts/per-once/yo.sh'] with allowed return codes [0] (shell=True, capture=False)
はい、出来ました!
さいごに
以上をせーのに捧げます。