基本的には以下の記事を参考に作成しました。
BIG-IPのMulti-AZ HAクラスターをCloudFormationで作成してみた
私の記事ではAWS初心者にも分かるように記載します。
さすがに全くAWSを触ったことがない、という方には厳しいかもしれませんが、できるだけ丁寧に書くよう心がけます。
逆にそこそこAWSを触ってきた人からしたら冗長化された記事になると思うので、上記の記事を参考に進めてみてください。
目次
事前準備
AWSネットワーク
必要な権限
CloudFormationテンプレートの取得
CloudFromationを展開
リソース確認
adminパスワード・SSHキーの取得
実際にログインしてみよう
次の展望
事前準備
F5公式のCloudFotmationテンプレートは2種類あり、
・0から作成してくれるもの(多分)
・VPCやサブネットはこちらで設定し、それをもとにBIGIPを展開するもの
となっています。
今回は後者のテンプレートを利用します。VPCやサブネットの範囲は自分で決めた方が何かと便利な場合が多いので。
前者のフルスタックテンプレートに関しては試していませんが、おそらくVPCなどもまとめて作ってくれるんだと思います。違ったらすみません。READMEを読んでみてください。
ということで、事前準備の内容としては
1.AWSネットワークの構築(VPC、サブネットなど)
2.CloudFotmationに渡すIAMロールを作成する
3.CloudFotmationを操作するのに必要な権限を付与する
となります。
AWSネットワーク
まずVPCを作成します。
設定するのは「名前」と「IPv4 CIDR」です。
例)
名前:BIGIP-VPC
IPv4 CIDR:10.5.0.0/16
次に、VPC内にサブネットを作成します。
今回の構成は HA(Hight Availability)構成ということで、マルチAZ展開となります。
各AZでは3つのサブネットが必要で、
1.Managementサブネット:管理者接続パブリックサブネット(プライベートも可)
2.Externalサブネット:外部接続用パブリックサブネット
3.Internalサブネット:バックエンド接続用プライベートサブネット
となります。
ManagementはMgmtと表され、構築時の接続用です。
Externalは、インターネット⇔BIGIPの入り口 の通信用、
Internalは、BIGIP⇔バックエンドサーバ の通信用です。
なので、各AZにパブリックサブネットを2つ、プライベートサブネットを1つずつ作成します。
サブネットはAZごとに対称になるように設定すると分かりやすいと思います。
例)
AZ 1a : Mgmtサブネット 10.5.2.0/24
AZ 1a : Externalサブネット 10.5.1.0/24
AZ 1a : Internalサブネット 10.5.3.0/24
AZ 1c : Mgmtサブネット 10.5.17.0/24
AZ 1c : Externalサブネット 10.5.16.0/24
AZ 1c : Internalサブネット 10.5.18.0/24
また、パブリックサブネット用にインターネットゲートウェイを作成し、VPCにアタッチします。
メインルートテーブルにインターネットゲートウェイのルート(送信先:0.0.0.0/0、ターゲット:インターネットゲートウェイ)を追加し、パブリックサブネット計4つを関連付けます。
もう1つ、プライベート用にルートテーブルを作成し、プライベートサブネット計2つを関連付けます。
以下のような構成になると思います。(紐づけは察してください..)
最終的なAWSの構成図としては以下の記事の図を参考にしてみてください。とてもわかりやすく書かれています。(最初は見ても分からないと思うのですが、へーこんな感じか、くらいの温度感でOKです。)
BIG-IPのMulti-AZ HAクラスターをCloudFormationで作成してみた
覚えておいてほしい点としては、今回の構成では1つのEC2インスタンスに対してENI(Elastic Network Interface)が3つ生成されるということです。
参考:【図解】AWSのENI(Elastic Network Interface)を理解する
通常EC2インスタンスを起動すると1つのENIが作成され、それが使用されます。実はそれに加え、ENIを新たに作成して追加でEC2にアタッチすることができるのです。つまり1つのEC2インスタンスが、複数のENIを保持することができます。
また、セキュリティグループやIPなどの属性はENIに付属するものらしいです。そう考えると複数ENIがつけられることも納得できます。今までEC2インスタンスについているものだと思っていました。というかENIの存在を初めて知りました。
ですので、今回はEC2インスタンスとしては2つ、各AZに配置されます。各EC2インスタンスではENIが3つ作成されます。それぞれMgmt用、External用、Internal用です。
必要な権限
自分のAWSアカウントに「AdministratorAccess」がついている方は飛ばしてください。
必要な権限の準備としては大きく分けて以下の2種類あります。
1.CloudFormationに渡すロールの権限
2.CloudFormationを操作するユーザの権限
まず、1つ目についてです。
CloudFormationを実行するとき、IAMロールを指定して、そのロールに実行させることが可能です。これにより、ユーザーに権限がなくてもそのロールに権限があれば、CloudFotmationテンプレートを展開することができます。
まずはIAMロールに付与するIAMポリシーを作成します。
今回は検証用として、以下のポリシーを作成しました。
このポリシーは実際の権限としては強すぎるので注意してください。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"iam:*",
"secretsmanager:*",
"s3:*",
"logs:*",
"ssm:*",
"lambda:*",
"cloudformation:*",
"ec2:*"
],
"Resource": "*"
}
]
}
一応下に載せたリンクに書いてあるらしいのですが、いまいちわかりませんでした。
F5公式-AWS構成でのIAM権限
ポリシーを作成したら、IAMロールを作成します。
IAMロール作成時は、
信頼されたエンティティタイプ:AWSのサービス
ユースケース:CloudFotmation
を指定します。
これにより、CloudFotmationで使用できるIAMロールが作成できます。
「次へ」を押し、先ほど作成したポリシーを「許可ポリシー」としてこのロールにアタッチします。
最後に適当な名前を付けてIAMロールの完成です。
次に、2つ目の”CloudFormationを操作するユーザの権限”についてです。
CloudFormationでは
・S3バケットを参照する(テンプレートを格納したS3を指定するため)
・VPCやサブネットを選択する
・IAMロールを選択する
などの場面が出てくるため、これらについての権限がユーザー側で必要となります。
今回は検証用として
AmazonS3FullAccess
AmazonEC2FullAccess
AWSCloudFormationFullAccess
iam:ListRoles
iam:GetRole
iam:PassRole(Resourceで、さっき作成したIAMロールのARNを指定する)
を操作ユーザーに付与しました。
具体的な権限については考えるのが大変だったので逃げてます。
以上で権限の設定は終わりとなります。
CloudFormationテンプレートの取得
いよいよ本題です。
まず最初に、CloudFormationで使用するF5公式テンプレートを取得し、S3バケットに格納します。
以下にアクセスします。
F5公式github
examples > failover と進み、「failover-existing-network.yaml」をダウンロードします。
各種READMEは余裕があれば読んでみてください。
続いて、このファイルをS3バケットに格納します。
AWSコンソールから、適当な名前のS3バケットを作成し、yamlファイルをアップロードしてください。
これで準備は完了です。
CloudFormationを展開
いよいよCloudFotmationをいじります。
まず「スタックの作成」を押し、「既存のテンプレートを選択」を押します。
テンプレートの指定の欄で、Amazon S3 URLに、先ほどS3に格納したテンプレートのURLを入力します。
完了したら「次へ」を押します。
この時点でS3のリンクが違ったり、ユーザーのS3への権限が足りないとエラーが出ます。
スタック名は適当に入力しましょう。
その下から見ていきます。
まずは「パラメータ」
ここはそのままで大丈夫です。
次に「Network Configuration」
ここが一番の山場です。1つ1つ確認しましょう。
※以下の画像では分かりやすくするために枠線を入れていますが、この枠内のみ入力するわけではありません。この欄はすべて入力します。
VPC ID:プルダウンから最初に作成したVPCを選択。ユーザーの権限が不足しているとそもそも選択肢が出てきません。
VPC CIDR:対象VPCのCIDRを入力します。例)10.5.0.0/16
Management subnet id for BIGIP instance A:
AZ 1aのMgmtサブネットをプルダウンから選びます。
Management private ip address for BIGIP instance A:
AZ 1aのMgmtENIのプライベートIPアドレスを入力します。
サブネットのCIDR内なら自由に設定可能です。 例)10.5.2.10
Management subnet id for BIGIP instance B:
AZ 1cのMgmtサブネットをプルダウンから選びます。
Management private ip address for BIGIP instance B:
AZ 1cのMgmtENIのプライベートIPアドレスを入力します。 例)10.5.17.10
External subnet id for BIGIP instance A:
AZ 1aのExternalサブネットをプルダウンから選びます。
External private ip address for BIGIP instance A:
AZ 1aのExternalENIのプライベートIPアドレスを入力します。 例)10.5.1.10
External secondary ip address for BIGIP instance A:
AZ 1aのExternalENIのセカンダリープライベートIPアドレスを入力します。
例)10.5.1.100
External subnet id for BIGIP instance B:
AZ 1cのExternalサブネットをプルダウンから選びます。
External private ip address for BIGIP instance B:
AZ 1cのExternalENIのプライベートIPアドレスを入力します。 例)10.5.16.10
External secondary ip address for BIGIP instance B:
AZ 1cのExternalENIのセカンダリープライベートIPアドレスを入力します。
例)10.5.16.100
Internal subnet id for BIGIP instance A
AZ 1aのInternalサブネットのサブネットIDを入力します。
プルダウンではないので、コンソールから取得してコピペしましょう。
例)subnet-xxxxxxxxxxxxxxx
Internal private ip address for BIGIP instance A:
AZ 1aのInternalENIのプライベートIPアドレスを入力します。 例)10.5.3.10
Internal subnet id for BIGIP instance B
AZ 1cのInternalサブネットのサブネットIDを入力します。
Internal private ip address for BIGIP instance B:
AZ 1cのInternalENIのプライベートIPアドレスを入力します。 例)10.5.18.10
Static self IP address for peer device:
AZ 1aのMgmtENIのプライベートIPアドレスを入力します。
どうやらインスタンスB(AZ 1c)→インスタンスA(AZ 1a)の順に作成が開始されるため、ここではインスタンスBからみたpeer device、つまりインスタンスAの値を指定します。
もうお気づきかもしれませんが、最初に作成したAWSネットワークを、Mgmt、External、Internalの順にAZごとに指定している手順です。
次は「Amazon EC2 Configuration」
ここはどちらも空欄のままで問題ないです。

Suply the public key(以下略 の項目は、SSHキーを指定できるのかと思ったのですが、一度試してうまくいかなかったので諦めました。後で触れますが、ここが空欄でもSystems ManagerのパラメータストアにSSHキーの情報が出力されます。
Instance profile は、おそらくIAMロール(EIPの付け替えなどで使用する)をこちらで指定する場合書くものなんだと思います。空欄のままでも、いい感じのIAMロールを作成してくれます。
次は「DAG / Ingress」
ここはそれぞれ値を入力します。

Provision Public IP addresses for the BIG-IP management interface
ここは「true」に変更します。
MgmtENIにパブリックIPアドレス(EIP)を付与してくれます。
本番環境ではここを「false」のままにして、踏み台サーバなどからプライベートIPを使用してアクセスするのが推奨されます。今回は検証用のためtrueにしています。
Restricted Source Address to BIG-IP
BIGIPのGUIやCLIを操作するアドレス元を入力します。人によっては会社から、人によっては家から接続すると思いますが、例えば接続元のIPアドレスが x.x.x.x の場合、この欄には「x.x.x.x/32」のように入力します。このアドレスからの接続が、作成されるセキュリティグループで最初から許可されます。
Restricted Source Address to Application
アプリケーションへの接続元のアドレスを記入します。例えば、踏み台→BIGIP→アプリケーションのような通信経路の場合、ここでは踏み台のIP/32 などを書きます。
セキュリティグループは後から変更もできるため、ここではとりあえず1つだけアドレスを記載します。追加・変更したい場合は、構築後に手動で追加しましょう。
次は「BIG-IP Configuration」
ここも少し長いですがあと少し頑張りましょう。

Runtime Init Rackage
BIGI-IP Runtime Init config used for BIGIP instance A
BIGI-IP Runtime Init config used for BIGIP instance B
この3つは変更なしです。そのままでOK。
Hostname for BIG-IP instance 01
AZ 1aに展開されるインスタンスのホスト名を記載しましょう。
ここはFQDN形式である必要があります。つまり、.(ドット)が入っている形式です。多分文字列はなんでもいい?
Hostname for BIG-IP instance 02
AZ 1cに展開されるインスタンスのホスト名を記載しましょう。
License key for BIG-IP instance 01
License key for BIG-IP instance 02
BIGIPをPAYGではなくBYOLで起動する場合、それぞれライセンスを入力します。PAYGの場合は空欄でOK。
私はPAYGだったため、具体的な操作はワカリマセン。
F5 BIG-IP Image
ここは既存の記載を消して、空欄にして大丈夫です(この後AMI IDを指定するため)
Custom Image Id
ここにAMI IDを入力します。
AMI IDは、EC2を起動する手順の途中で取得できます。「EC2を起動する」を押し、マーケットプレイスからサブスクライブしたBIGIPのAMIを指定します。すると、起動する前に、以下のように「イメージID」が書かれた欄が見られます。ここに「ami-xxxxxxxxxxxxx」のようなIDが書いてあるので、これを取得し、入力します。
※AMI ID の取得方法はこれにもあると思います。

Enter valid Instance type.
インスタンスタイプを記述します。m5.xlargeがF5推奨なので、このままでOKです。
Interfaces
ここも3のままでいいです。
ARN of Secrets Manager secret
adminユーザーのパスワードが出力されるSecrets Managerについての項目です。空欄の場合、自動でSecrets Managerが作成されます。自分で用意してそこに出力させたい場合、ARNを入力するんだと思います(試してない)。
CFE S3 bucket
S3バケットの名前を入力しましょう。既存のバケットとはかぶらないように注意。
フェイルオーバーの成功可否に関するログが出力されるバケットです。フェイルオーバーの状態保持としても利用される重要な役割を持っています。
CFE VIP tag value
以前定めたExternalENIのセカンダリプライベートIPアドレスを各AZ分(2つ)、記載に倣って入力します。移動対象のEIPはこのセカンダリプライベートIPアドレス同士で付け替えが行われます。プライマリープライベートIPアドレスに紐づくEIPは移動しません。
CFE Deployment tag value
フェイルオーバーで利用されるタグの値を設定します。
タグの値は、他のタグの値と被らないように注意してください。BIGIPはこのタグをもとにEIPの付け替えなどを判断するため、被ってしまうと失敗します。
同じアカウントでCloudFormationで展開するのが2回目の方など特に気を付けましょう。
Send anonymous statistics to F5
trueでもfalseでもどちらでもいいです。
次に「Application Configration」
ここは「True」に変更します。(falseでもいい気もしますが...)

Unique string
基本的にはこのままで大丈夫です。
この文字列が、CloudFormationにより展開されるENIやIAMロールなどの接頭語として使われるため、2回目も同じタグだと「同じ名前のIAMロールが存在しています」みたいな感じで失敗します。
一度この文字列で展開している場合、2回目以降はここを変えましょう。
Application
Cost Center
Environment
Group
Owner
provisionPublicExternal
これらは特に変更の必要はありません。
お疲れさまでした。もうほぼ終わりです。
「次へ」を押すと「スタックオプションの設定」画面へ移ります。
ここで「アクセス許可」の「IAMロール」から、事前に準備したIAMロールをプルダウンで選択します。
今操作しているユーザーにIAM系の権限が不足していると、ロールが出てこなかったり、ロールを選択したりできないと思います。
また、特にロールを指定しない場合、操作ユーザーの権限で実行されます。
この設定が終わったら下へスクロールし、2つのチェックボックスにチェックを入れ、「次へ」を押します。
最後に「確認して作成」の画面が出るので、今までの記述を確認し、完了したら「送信」を押します。
実行中は以下のようなタイムラインが表示されます。
全体でおよそ15分程度で完了すると思います。
あまりに長い場合はどこかの設定ミスを疑いましょう。
途中でやめたい場合は「スタックの削除」ボタンが画面上に表示されているため、それを押します。
すると、展開中のリソース含めすべてのリソースが削除されていき、展開前の状態に戻ります(時を戻すイメージ)。

展開が完了するとすべての帯?の右側が緑色になり、スタックが「CREATE_COMPLETE」となります。
これにて構築は完了です。

リソース確認
めんどくさいので画像は載せませんが、少なくとも以下のサービスにリソースが展開されていると思います。コンソールから各自確認してみてください。
・EC2-インスタンス:2つ
・EC2-ネットワークインターフェイス:6つ
・EC2-セキュリティグループ:4つ
・EC2-Elastic IP:5つ
・IAM- IAMロール:1つ
・S3-バケット:1つ
・Lambda:1つ
・Secrets Manager-シークレット:1つ
・Systems Manager-パラメータストア:1つ
個数は人によって変わるかもしれませんが、だいたいこんな感じです。
adminパスワード・SSHキーの取得
BIGIPのGUIやCLIに入るためにはそれぞれ
・adminパスワード
・キーペア
が必要です。
このCloudFormationテンプレートではこれらも出力してくれるためそれを取得します。
①adminパスワード
AWSコンソールから「Secrets Manager」を開いてください。
すると、「xxxxxx-bigipSecret」が生成されています。それを開きます。
画面中央に「シークレットの値」という欄があります。その右側に「シークレットの値を取得する」というボタンがあるためそれを押すと、画面に文字列が表示されます。
それがadminパスワードとなります。
②キーペア
AWSコンソールから「Systems Manager」を開きます。
左側に展開されている選択肢から「パラメータストア」を選びます。
ここでは「/ec2/keypair/xxxxxxxx」のようなものが生成されます。それを押します。
画面中央に「パラメータの詳細」という箇所があり、その中に「複号化された値を表示」という文字列があります。それをオンにすると、何やらたくさんの文字が表示されます。これがキーペアの源です。
-----BEGIN RSA PRIVATE KEY----- と -----END RSA PRIVATE KEY----- で囲まれた中の文字列をコピーして、メモ帳などに貼り付けます。
それを「myuniqstr-keyPair.pem」のような名前で保存しましょう。
注意点としては
・myuniqstr-keyPair.pem.txt のようにテキスト形式で保存してしまわないこと
・キーペアの名前はEC2インスタンスの詳細から「起動時に割り当てられたキーペア」を見ること
以上です。
実際にログインしてみる
まずはGUIから。
ブラウザで
https://MgmtENIのパブリックIPアドレス:443
を入力しましょう。
すると以下のような画面に遷移します。
"接続がプライベートではありません"のような記述が出るかもしれませんが、「詳細設定」→「x.x.x.xに進む(安全ではありません)」を押すと上記の画面になると思います。
そもそも画面が表示されない場合、MgmtENIのセキュリティグループで許可ができていない可能性が高いので、そこを見直してみてください。
画面が出たら「Username」にadmin、「Password」にSecrets Managerから取得した値を入力するとログインできます。
次にCLIです。
お使いのPCでコマンドプロントやPowerShellを開きます。
以下のコマンドを使用します。
ssh -i xxxxx.pem -o MACs=hmac-sha1 admin@mgmtENIのパブリックIPアドレス
-o のオプションはあまり分かっていませんが、これを付けないでSSH接続しようとするとエラーが出るため、AIに聞いたところこれを使えと。そしたらいけました。
キーペアはフルパスを指定しても構いません。パスさえ合っていれば問題ないです。
接続するとadminパスワードを求められるため、それを入力するとCLI接続完了です。
デフォルトではbashで起動しますが、「tmsh」というコマンドで専用のモードを起動できます。
次の展望
今回はAWS編だったため、BIGIPの設定についてはほとんど触れていません。
なので次の記事ではこの辺を書くか、CloudFormationテンプレートを使わないでこの構成を再現する、というの書くか迷っています。
BIGIPの設定についてはそれなりに記事があるので、後者になるかなと思っています。
この記事で分からない点・間違っている点がありましたらお気軽にコメントください!
(追記 2026/5/29)
手動構築での再現もできましたが、記事にするモチベーションが無いので一旦保留にします。
もし困っている方がいたらいつでもコメントください~






