のぴぴのメモ

自分用のLinuxとかの技術メモ

(AWS) UserDataとCloudFormationヘルパースクリプトの定義情報取得や実行契機の違い

定義箇所とインスタンス内からの定義情報取得方法の違い

UserDataはEC2インスタンスの機能で、CloudFormationヘルパースクリプトはCloudFormationの機能です。
UserDataはインスタンスメタデータ*1から情報を取得するため、実質VPC設定やIAMロールを考慮する必要がありません。一方CloudFormationヘルパースクリプトは、CloudFormationのパブリックにあるエンドポイントから取得するためInternet GatewayやCloudFormationのVPC Endpointを用意してパブリックのエンドポイントにアクセスできるようにする必要があります。

機能 機能を提供しているサービス 定義 インスタンスからの取得方法 通信要件
UserData EC2 EC2インスタンス起動オプション インスタンスメタデータから取得 不要
Cfnヘルパー CloudFormation CloudFormationのテンプレート(ResourceのMetadata定義) CloudFormationのエンドポイントから取得 IGW経由またはVPCEndpoint経由でCloudFormationのパブリックエンドポイントにアクセス可能なこと

絵に描くとこんな感じでしょうか。(逆に判りずらいかも)

f:id:nopipi:20190427235711p:plain

実行モジュールと実行契機の違い

AWSが提供するAMIを利用した場合UserDataは、cloud-initというツールの中で実行されておりOS起動時に自動実行されます。一方CloudFormationヘルパースクリプトは自動実行されないため明示的に実行する必要があり、通常はUserDataにコマンドを記載して、UserDataから実行させます。

機能 パッケージ 起動契機 インスタンス無いでの設定ファイル
UserData cloud-init*2 OS起動時に自動実行(systemdからキックされる) /etc/cloud/配下
Cfnヘルパー aws-cfn-bootstrap*3 明示的に実行(UserDataに実行コマンドを埋め込む) なし(CfnのスタックのMetadataに定義)