Bitnami AMIを利用してACM +Route53+ALB+EC2のWeb構成を構築してみる
はじめに
かつまたです。
今回はMarketPlaceで取得したBitnami AMIを利用して、ACM+Route53+ALB+EC2のWebサイト構成を構築してみました。また、Bitnami AMIはSSM Agentがプリインストールされていないため、初期設定時にインストールもしました。
Bitnami AMIとは
Bitnamiは、VMware(現Broadcom)が提供するアプリケーションパッケージングプラットフォームです。WordPress、Redmineなど、さまざまなオープンソースアプリケーションを、必要なミドルウェアと一緒にパッケージ化し、すぐに使える状態で提供しています。
AWS Marketplaceで提供されている 「WordPress Certified by Bitnami and Automattic」 AMIには、以下のソフトウェアスタックがあらかじめインストール・設定済みです。
| コンポーネント | 説明 |
|---|---|
| WordPress | CMS本体(今回は6.9.1) |
| Apache または Nginx | Webサーバー(バージョンにより異なる) |
| MariaDB / MySQL | データベース |
| PHP | WordPress実行環境 |
| OpenSSL | SSL/TLS関連ライブラリ |
やってみる
前提条件
以下は事前に完了済みの状態から手順を開始します。
| 項目 | 状態 |
|---|---|
| ドメイン取得 | 完了済み |
| Route53ホストゾーン作成・ドメインレジストラへのNSレコード登録 | 完了済み |
| IAMインスタンスプロファイル(SSM用) | AmazonSSMManagedInstanceCoreポリシー追加済み |
| ALB用セキュリティグループ | HTTP,HTTPSに対して全解放 |
ACM証明書の発行
まずACMでパブリック証明書をリクエストします。
「証明書タイプ」で 「パブリック証明書をリクエスト」 を選択します。

証明書の設定は以下の通りです。ドメイン名にドメインレジストラで登録したドメイン、検証方法はDNS検証、キーアルゴリズムはRSA 2048を選択しています。

リクエスト後はステータスが「保留中の検証」になります。画面に表示されるCNAMEレコードをRoute53に登録してDNS検証を完了させます。「Route 53でレコードを作成」ボタンを押すと自動でレコードが作成されます。

しばらく待つとステータスが 「発行済み」 に変わり、証明書の発行が完了します。
EC2の作成(Bitnami AMI)
Bitnami WordPress AMIを使ってインスタンスを起動します。AWS Marketplaceで「WordPress Certified by Bitnami and Automattic」を選択し、「EC2コンソールから起動」 を選びます。バージョンは6.9.1を使用しました。

ネットワーク設定では、パブリックIPの自動割り当ては 無効 にします(後でElastic IPを割り当てるため)。IAMインスタンスプロファイルには事前作成済みのSSM用プロファイルを選択します。
Elastic IP の割り当て・関連付け
EC2コンソールの 「Elastic IP アドレス」 から 「Elastic IP アドレスの割り当て」 をクリックしてIPを取得します。
取得後、「アクション」→「Elastic IP アドレスの関連付け」 から先ほど作成したEC2インスタンスに関連付けます。
割り当てたElastic IPアドレスは控えておきます。
SSM Agent のインストール・確認
Bitnami AMIにはSSM Agentがプリインストールされていないため、SSH接続して手動でインストールします。Bitnami WordPress AMIのベースOSは Debian のため、deb パッケージを使用します。
ssh -i 作成した鍵.pem bitnami@<Elastic-IP>
Bitnami AMIのSSHユーザー名は
bitnamiです
# 一時ディレクトリを作成して移動
mkdir -p /tmp/ssm && cd /tmp/ssm
# SSM Agent の deb パッケージをダウンロード
wget https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/debian_amd64/amazon-ssm-agent.deb
# インストール
sudo dpkg -i amazon-ssm-agent.deb
# サービスを有効化・起動
sudo systemctl enable amazon-ssm-agent
sudo systemctl start amazon-ssm-agent
AWSコンソールの Systems Manager → Fleet Manager で対象インスタンスが表示されていれば接続確認完了です。
また、以下コマンドでミドルウェアの稼働状態をコマンド一発で確認できます。すべて起動していることを確認できます。
sudo /opt/bitnami/ctlscript.sh status
apache already running
mariadb already running
php-fpm already running
セキュリティグループの設定
EC2のセキュリティグループのインバウンドルールを設定します。SSHは特定のIPのみ許可し、HTTP(ポート80)は ALBのセキュリティグループIDからのみ 許可します。これによりEC2への直接アクセスをブロックし、ALB経由のみ許可するセキュアな構成になります。

ターゲットグループの作成
ALBのターゲットグループを作成します。設定内容は以下の通りです。
- ターゲットの種類: インスタンス
- プロトコル: HTTP / ポート80
- VPC: 作成したEC2が存在するVPCを選択

ヘルスチェックの設定も行います。プロトコルHTTP、パス / でルートに対してヘルスチェックを実行します。

ALBの作成・リスナー設定
ALBを作成します。リスナーは2つ設定します。
- HTTPリスナー(ポート80)
HTTPアクセスをHTTPS(443)へリダイレクトするよう設定します。

- HTTPSリスナー(ポート443)
HTTPSアクセスを作成したターゲットグループへ転送します。

セキュリティポリシーは ELBSecurityPolicy-TLS13-1-2-2021-06(推奨)を使用し、SSL/TLS証明書は先ほどACMで発行した証明書を選択します。

Route53レコードの設定
Route53ホストゾーンにALBへのエイリアスAレコードを作成します。
- レコードタイプ: A(エイリアス ON)
- トラフィックのルーティング先: ALBへのエイリアス
- リージョン: アジアパシフィック(東京)
- ロードバランサー: 作成したALBを選択

WordPressの動作確認
https://ドメイン名/wp-admin にアクセスし、WordPress管理画面にログインします。
ログインID、PasswordはEC2にセッションマネージャーで接続し、以下コマンドによって確認できます。
cat /home/bitnami/bitnami_credentials
作成したコンテンツを配置してみます。
WordPressログイン後、「Page」→「Add Page」から任意のコンテンツをアップします。スラグは/loginとしました。

コンテンツ例
<!-- wp:html -->
<style>
/* WordPress のヘッダー・フッター・余白を非表示にする */
header, footer, .site-header, .site-footer,
.entry-header, .entry-title, .page-header,
nav, aside, .sidebar, .comments-area {
display: none !important;
}
body, .site, .site-content, .content-area,
.entry-content, main, article {
margin: 0 !important;
padding: 0 !important;
max-width: 100% !important;
width: 100% !important;
}
.login-wrapper {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
background: #f0f2f5;
display: flex;
align-items: center;
justify-content: center;
min-height: 100vh;
color: #1a1a2e;
}
.login-card {
background: #ffffff;
border-radius: 12px;
box-shadow: 0 4px 24px rgba(0, 0, 0, 0.08);
padding: 48px 40px;
width: 100%;
max-width: 400px;
}
.login-card .logo {
text-align: center;
margin-bottom: 32px;
}
.login-card .logo h1 {
font-size: 22px;
font-weight: 700;
color: #1a1a2e;
letter-spacing: -0.3px;
}
.login-card .logo p {
font-size: 13px;
color: #8a8fa8;
margin-top: 4px;
}
.login-card .form-group {
margin-bottom: 16px;
}
.login-card label {
display: block;
font-size: 13px;
font-weight: 600;
color: #4a4f6a;
margin-bottom: 6px;
}
.login-card input[type="email"],
.login-card input[type="password"] {
width: 100%;
padding: 11px 14px;
font-size: 14px;
border: 1.5px solid #e2e5ef;
border-radius: 8px;
outline: none;
transition: border-color 0.2s;
background: #fafbfc;
color: #1a1a2e;
box-sizing: border-box;
}
.login-card input:focus {
border-color: #4f7cff;
background: #ffffff;
}
.login-card .btn {
width: 100%;
padding: 12px;
font-size: 14px;
font-weight: 600;
background: #4f7cff;
color: #ffffff;
border: none;
border-radius: 8px;
cursor: pointer;
margin-top: 8px;
transition: background 0.2s;
}
.login-card .btn:hover {
background: #3a65e0;
}
.login-card .divider {
text-align: center;
font-size: 12px;
color: #b0b5c8;
margin: 20px 0;
position: relative;
}
.login-card .divider::before,
.login-card .divider::after {
content: "";
position: absolute;
top: 50%;
width: 42%;
height: 1px;
background: #e2e5ef;
}
.login-card .divider::before { left: 0; }
.login-card .divider::after { right: 0; }
.login-card .footer-links {
text-align: center;
margin-top: 20px;
}
.login-card .footer-links a {
font-size: 12px;
color: #4f7cff;
text-decoration: none;
}
.login-card .footer-links a:hover {
text-decoration: underline;
}
.login-card .footer-links span {
font-size: 12px;
color: #b0b5c8;
margin: 0 8px;
}
</style>
<div class="login-wrapper">
<div class="login-card">
<div class="logo">
<h1>My Service</h1>
<p>アカウントにログイン</p>
</div>
<form action="#" method="post">
<div class="form-group">
<label for="email">メールアドレス</label>
<input type="email" id="email" name="email" placeholder="you@example.com" autocomplete="email" required>
</div>
<div class="form-group">
<label for="password">パスワード</label>
<input type="password" id="password" name="password" placeholder="••••••••" autocomplete="current-password" required>
</div>
<button type="submit" class="btn">ログイン</button>
</form>
<div class="divider">または</div>
<div class="footer-links">
<a href="#">パスワードをお忘れですか?</a>
<span>|</span>
<a href="#">新規登録</a>
</div>
</div>
</div>
<!-- /wp:html -->
https://ドメイン名/login/ にアクセスすると、WordPressのログインページがHTTPSで正常に表示されました。

無事、HTTPSでWordPressにアクセスできることが確認できました。
おわりに
今回は、Bitnami WordPress AMIとACM・Route 53・ALBを組み合わせて、独自ドメインでのHTTPS対応WordPress環境を構築しました。
ご覧いただきありがとうございました。
クラスメソッドオペレーションズ株式会社について
クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイト をぜひご覧ください。※2026年1月 アノテーション㈱から社名変更しました






