定義箇所とインスタンス内からの定義情報取得方法の違い
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のパブリックエンドポイントにアクセス可能なこと |
絵に描くとこんな感じでしょうか。(逆に判りずらいかも)
実行モジュールと実行契機の違い
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に定義) |