記事検索

検索ワードを入力してください。
Sky Tech Blog
【AWS】Beanstalkの​.platform/の​confighooksと​hooksに​ついて

【AWS】Beanstalkの​.platform/の​confighooksと​hooksに​ついて

AWS Elastic Beanstalkのプラットフォームフックについて、特に"confighooks"と"hooks"の違いを検証し、その挙動を調査した内容です。confighooksはインスタンス再作成なしの設定変更時に、hooksはインスタンス再作成が必要な設定変更時に実行されます。

AWS Elastic Beanstalk(以下、Beanstalk)のプラットフォームフックという機能に用意されている "confighooks" と "hooks" について、違いが気になったので簡単な検証を行い挙動を調べてみました。

プラットフォームフックとは

BeanstalkのLinuxプラットフォームを拡張するための機能で、特定ディレクトリに配置したファイルを特定のタイミングで実行可能です。
具体的には、アプリのソースバンドルの ".platform/confighooks" あるいは ".platform/hooks" ディレクトリ配下にサブディレクトリを作成し、 そのサブディレクトリに実行したいファイルを配置して利用します。
サブディレクトリ名には「prebuild」「predeploy」「postdeploy」のいずれかが使用でき、それぞれ実行タイミングが異なります。 サブディレクトリに配置するファイルとしては、バイナリファイルや#!行で始まるスクリプトファイル(#!/bin/bash など)が使用可能です。

confighooksと​hooksの​違い

AWSの公式ドキュメントを参照したところ、以下のような違いがあるようです。

  • confighooks
    環境インスタンスを再作成せずに更新だけする設定変更を行った場合に実行されます。
  • hooks
    デプロイ用の新しいソースバンドルを提供する場合、またはすべての環境インスタンスの終了および再作成が必要な設定の変更を行う場合に実行されます。

動作検証

設定変更の観点からconfighooksとhooksの違いを確かめるために、簡単な検証を行ってみます。概要は以下の通りです。

  • 「.platform/confighooks」と「.platform/hooks」に実行ファイルを配置してBeanstalkにデプロイ
  • AWS CLIのコマンドを実行して、インスタンスの再作成が発生しないBeanstalkの設定変更を行い、confighooksの挙動を確認
  • AWS CLIのコマンドを実行して、インスタンスの再作成が発生するBeanstalkの設定変更を行い、hooksの挙動を確認

1. 準備

  • 下記のファイルを任意のアプリのソースバンドルに用意 サブディレクトリは「predeploy」でなくてもかまいません。
    • .platform/confighooks/predeploy/01_test.sh
#!/bin/bash

echo "***confighooks***"
  • .platform/hooks/predeploy/01_test.sh
#!/bin/bash

echo "***hooks***"
  • ソースをBeanstalkへデプロイ
    任意の設定でBeanstalkのEnvironmentを作成し、先ほどのソースをデプロイします。
    デプロイは別途作成したAWS CodePipeline経由で行いました。

  • Beanstalkの設定変更用ファイルを作成
    任意の作業ディレクトリに下記ファイルを作成しておきます。
    confighooksの確認ではBeanstalkの環境変数の設定を変更します。 hooksの確認ではBeanstalkのAMIの設定を変更します。

    • options_test_confighooks.json
[
    {
        "Namespace": "aws:elasticbeanstalk:application:environment",
        "OptionName": "DUMMY",
        "Value": "dummy"
    }
]
  • options_test_hooks.json
[
    {
        "Namespace": "aws:autoscaling:launchconfiguration",
        "OptionName": "ImageId",
        "Value": "ami-XXXXXXXXXXXXXXXXX"
    }
]
  1. confighooksの挙動確認

今回はローカル環境の作業ディレクトリからAWS CLIのコマンドを実行してBeanstalkの設定変更を行います。
まずはconfighooksからです。下記を実行します。

# 以降Bash上での実行を想定
AWS_PROFILE="AWS CLIで使用するAWSプロファイル"
ENVIRONMENT_NAME="BeanstalkのEnvironment Name"
INPUT_FILE_NAME=options_test_confighooks.json

# Beanstalkの設定を更新
aws elasticbeanstalk update-environment --environment-name ${ENVIRONMENT_NAME} --option-settings file://${INPUT_FILE_NAME} --profile ${AWS_PROFILE}

AWSマネージメントコンソールでBeanstalkの設定更新が完了していることを確認し、対象インスタンスに接続して、 /var/log/eb-hooks.log を確認します。

...
YYYY/MM/DD XX:XX:XX.XXXXXX [INFO] Running command: .platform/confighooks/predeploy/01_test.sh
YYYY/MM/DD XX:XX:XX.XXXXXX [INFO] ***confighooks***
...

.platform/confighooks/predeploy/01_test.sh の実行が確認できました。

3. hooksの​挙動確認

続いてhooksです。下記を実行します。

# 以降Bash上での実行を想定
AWS_PROFILE="AWS CLIで使用するAWSプロファイル"
ENVIRONMENT_NAME="BeanstalkのEnvironment Name"
INPUT_FILE_NAME=options_test_hooks.json

# Beanstalkの設定を更新
aws elasticbeanstalk update-environment --environment-name ${ENVIRONMENT_NAME} --option-settings file://${INPUT_FILE_NAME} --profile ${AWS_PROFILE}

AWSマネージメントコンソールでBeanstalkの設定更新が完了していることを確認し、confighooks同様 /var/log/eb-hooks.log を確認します。

...
YYYY/MM/DD XX:XX:XX.XXXXXX [INFO] Running command: .platform/hooks/predeploy/01_test.sh
YYYY/MM/DD XX:XX:XX.XXXXXX [INFO] ***hooks***
...

.platform/hooks/predeploy/01_test.sh の実行が確認できました。

まとめ

.platform/confighooks/
インスタンスの再作成が発生しない設定変更時に実行されることが確認できました。

.platform/hooks/
インスタンスの再作成が発生する設定変更時に実行されることが確認できました。

両者の使い分けや有効な活用方法については、実際に使用しながら理解を深めていきたいと思います。


\シェアをお願いします!/
  • X
  • Facebook
  • LINE
キャリア採用募集中!

入社後にスキルアップを目指す若手の方も、ご自身の経験を幅広いフィールドで生かしたいベテランの方も、お一人おひとりの経験に応じたキャリア採用を行っています。

Sky株式会社のソフトウェア開発や製品、採用に関するお問い合わせについては、下記のリンクをご確認ください。
お問い合わせ
ホーム