Category: AWS OpsWorks


AWS OpsWorks Chef 12 stackでのApplication Load Balancerの利用

Elastic Load BalancingのApplication Load Balancer機能の利点を活かして、スケーラブルなアプリケーションを構築してみたいですか?
Application Load Balancerを使えば、コンテンツベースのルーティングやHTTP/2、WebSocketプロトコルの機能を追加したり、コンテナや拡張メトリクスなどを追加することができます。

AWS OpsWorks Stackのユーザーから、レイヤーに新しいApplication Load Balancerをどのようにしたら追加できるかをAWSにご質問されていました。そこでAWSは、簡単にこれらを統合するためのChef 12のレシピのセットを開発し、オープンソースにすることを決めました。本記事ではOpsWorks StackにおけるChef 12 LinuxレイヤーでApplication Load Balancerと連携させるための手順を紹介します。

手順

特に記載がない限り、すべてのステップはOpsWorksコンソール内で完結されるものとします。

alb_supportレシピの概要

alb_support::attach_to_alb: こちらのレシピはApplication Load Balancerのターゲットグループにインスタンスをアタッチする実際の作業を行います。Setupライフサイクルイベントにより既存のが実行され、追加される必要があり、インスタンスがApplication Load Balancerにアタッチされる前にレシピが実行される必要があります。

alb_support::detach_from_alb: こちらのレシピはロードバランサーからインスタンスをデタッチします。Shutdownライフサイクルイベントにこちらのレシピを追加するようにしてください。Shutdownライフサイクルイベントにより実行される一連のレシピを実行後にこちらのレシピが実行され、こちらによりインスタンスはApplication Load Balancerからデタッチされ、コネクションはdrainされます。

alb_support:install および alb_support::uninstall_http_server: デフォルトのApplication Load Balancerのヘルスチェックをパスする簡単な方法、およびそのロードバランサーが想定した通りに動作していることを視覚的に示す方法として、AWSは80番ポートを使用するNGINXサーバをインストールおよびアンインストールして、デフォルトのテストページを提供するサンプルレシピも提供しています。

ステップ1:Application Load Balancerを作成する

80番ポートを使ってデフォルトのTCPリスナーとHTTPヘルスチェックをシンプルなALBを作成します。ターゲットグループにインスタンスを追加しないようにしてください。こちらはオープンソースのChefレシピによって処理されるためです。

ステップ2:Chef 12 stackを作成する

新しいChef 12 stackを作成します。必ずカスタムChef cookbooksの利用を有効にして、次の設定を行ってください。

  • Repository typeでは、Gitを選択します。
  • Repository URLでは、https://github.com/awslabs/opsworks-example-cookbooks を使用します。もし既に動作中のスタックがあれば、そのリポジトリからalb_cookbookをダウンロードして、ご自身のChefリポジトリにマージして、次のセクションを継続することができます。

ステップ3:stack内のインスタンスにElastic Load Balancing APIをコールする権限を許可する

1. Stack Settingsを選択します。
2. Default IAM instance Profileの隣にあるリンクを選択して、IAM内のインスタンスプロファイルを開きます。
3. Permissionsタブ上で、Inline Policiesを開いて、create hereを選択してインラインポリシーを作成します。
4. Custom Policyを選択して、Selectを選択します。
5. ポリシー用の名前を入力して、Policy Documentフィールド内に次の内容を貼り付けて、その後Apply Policyを選択します。


{   
  "Version": "2012-10-17",   
  "Statement": [     
    { 
      "Effect": "Allow",
      "Action": [
	"elasticloadbalancing:RegisterTargets",
	"elasticloadbalancing:DeregisterTargets",
	"elasticloadbalancing:DescribeTargetHealth"
      ],
      "Resource": "*"
    }
  ]
}

 

ステップ4:Application Load Balancerレイヤーを作成して構成する

新しいレイヤーを作成します。次にオープンソースのalb_support cookbookを使って、レイヤー内のインスタンスがApplication Load Balancerと連携・管理できるようにします。

レイヤーのレシピを構成する

レイヤー用にレシピを構成するには、次のようにします。

alb_support::install_http_serverおよびalb_support::attach_to_albSetupライフサイクルイベントに追加します。
alb_support::detach_from_albおよびalb_support::uninstall_http_serverShutdownライフサイクルイベントに追加します。

ALBの構成の詳細を指定する

alb_supportレシピを構成した後で、インスタンスのshutdownタイムアウトを変更し、カスタムJSONでいくつかの詳細を設定します。

1. Layer Settingsページ上で、shutdown用のレシピとコネクションドレインを実行するための十分な時間を許可するためにInstance shutdown timeoutを入力します。コネクションドレインタイムアウトと等しい時間に加えて、ドレイン処理後のレシピを実行するのにかかる最大時間を指定することを推奨します。

2. レイヤー設定を編集して、保存前に次のカスタムJSONを指定します。


{ 
  "alb_helper": 
  { 
    "target_group_arn": "SPECIFY ARN OF YOUR ALB TARGET GROUP HERE"
  } 
}

alb_helper JSONブロックに追加する2つのオプションパラメータが以下です。

  • connection_draining_timeout (デフォルト: 750)

こちらは追加のshutdownレシピを実行する前にApplication Load Balancerがコネクションをdrainするのに待つための秒単位での最大時間です。ロードバランサーのdrainのタイムアウトにマッチするようにセットします。インスタンスがdrainされるまでshutdownレシピの実行時間を延ばす必要がない場合は、このパラメータの値を0に指定します。

  • state_check_frequency(デフォルト:30秒)

こちらは、EC2::describeTargetHealthをコールして、コネクションdrainのプロセス中にアップデートを取得するための頻度を表します。

セキュリティ

Application Load Balancerのヘルスチェックに成功するには、入ってくるHTTPトラフィックを許可する必要があります。レイヤーのSecurityを選択して、レイヤーにAWS-OpsWorks-Web-Serverグループを追加します。こちらにより、80番ポートにていかなるソースアドレスからのトラフィックも受け付けるよう許可されます。

Application Load Balancerを動作確認する

以上で完了です!StackのInstancesページ上で、新しいインスタンスを追加して、startを選択、onlineになるのを待ちます。Amazon EC2コンソールを開いて、Application Load BalancerのDNS名を確認します。ブラウザでそのアドレスを開くと、NGINXのテストページをご覧になれます。

レイヤーに追加されたインスタンスは、レイヤーのカスタムJSONブロックでい指定したターゲットグループに自動的に追加されます。Application Load Balancerは不健全なOpsWorks Stackのインスタンスを検知するためにヘルスチェックを使います、そして不健全なインスタンスがリストアされるまで残りのインスタンスへトラフィックを送ります。

終了したインスタンスは、コネクションがdrainされて、Application Load Balancerから削除されます。alb_support::detach_from_albよりも早い順に指定されているshutdownレシピの実行は、Application Load Balancerあるいはconnect_draining_timeoutの値を上回ることにより、インスタンスがdrainされるまで延期されます。

 

結論

こちらの記事では、いかに簡単にOpsWorks StackアプリケーションにApplication Load Balancerを統合できるかを紹介しました。Chefレシピを使って、レイヤー内のインスタンスをApplication Load Balancerに自動で追加したり削除したりすることができます。こちらの例を拡張して、パスベースのルーティングや、HTTP/2またはWebSocket、コンテナサポートやより詳細なメトリクスを使った機能の利点を享受することができます。

(日本語翻訳はSA 舟崎が担当しました。原文はこちらです。)

新機能 – AWS OpsWorks for Chef Automate

AWS OpsWorks は、Chef を使用したアプリケーションの設定と実行に役立ちます。ドメイン固有言語 (DSL) を使って、アプリケーションのアーキテクチャと各コンポーネントの設定を定義するクックブックを記述します。Chef サーバーは、設定プロセスで不可欠な要素です。このサーバーはすべてのクックブックを保存し、各インスタンス (Chef の用語ではノード) の状態情報を追跡します。Chef サーバーは新しく起動されたインスタンスが設定されるときは重要なパスにあるため、信頼性が高い必要があります。多くの OpsWorks および Chef ユーザーは、この重要なアーキテクチャコンポーネントを自分でインストールして維持しています。本稼働スケールの環境では、これによりバックアップ、復元、バージョンのアップグレードなどをユーザーが処理する必要があります。

新しい AWS OpsWorks for Chef Automate
今月初めに、AWS OpsWorks for Chef AutomateAWS re:Invent ステージから開始されました。Chef Automate サーバーは、わずか 3 回のクリックで起動し、数分以内に使用を開始することができます。Chef Supermarket をはじめ、Test KitchenKnife などのコミュニティツールからのコミュニティクックブックを使用できます。Chef Automate を使用すると、アプリケーションのインフラストラクチャのライフサイクルを通じてインフラストラクチャを管理できます。たとえば、新しく起動した EC2 インスタンスは自動的に Chef サーバーに接続し、自動関連付けスクリプトを使用して、指定されたレシピを実行できます (詳細については、「AWS OpsWorks for Chef Automate でのノードの自動的な追加」を参照)。登録スクリプトを使用して、Auto Scaling グループを通じて動的に作成された EC2 インスタンスを登録し、オンプレミスサーバーを登録できます。

詳しく見る
OpsWorks コンソールから Chef Automate サーバーを起動してみましょう。開始するには、[Go to OpsWorks for Chef Automate] をクリックします。

[Create Chef Automate server] をクリックし、サーバーに名前を付けます。次にリージョンを選択し、適切な EC2 インスタンスタイプを選択します。

SSH キーペアの 1 つを選択するか、SSH からオプトアウトします。

最後に、ネットワーク (VPC)、IAM、メンテナンスウィンドウ、およびバックアップの設定を指定します。

[Next] をクリックし、設定を確認して、[Launch] をクリックします。起動プロセスにかかる時間は 20 分未満です。その時間中に、スターターキットとともに Chef Automate ダッシュボードのサインイン認証情報をダウンロードできます。

すべての Chef Automate サーバーを一目で表示できます。

サーバー名 (ここでは BorkBorkBork) をクリックし、[Open Chef Automate dashboard] をクリックします。次に、認証情報を入力してログインします。

ダッシュボードを次に示します。

ノードを表示して管理できます。

ワークフローを管理する

ほかにもさまざまな機能があります。バックグラウンドでは、起動プロセスによって AWS CloudFormation テンプレートが呼び出されます。このテンプレートにより、EC2 インスタンス、Elastic IP アドレス、およびセキュリティグループが作成されます。

今すぐご利用可能
AWS OpsWorks for Chef Automate は、US East (Northern Virginia)US West (Oregon)、および Europe (Ireland) リージョンで今すぐご利用できます。料金はサーバーに接続されたノードの数と時間数に基づきます。詳細については、Chef Automate の料金表ページを参照してください。AWS Free Tier の一部として、12 か月当たり最大 10 ノードまでは無料で使用できます。

Jeff;