Bitnami AMIを利用してACM +Route53+ALB+EC2のWeb構成を構築してみる

Bitnami AMIを利用してACM +Route53+ALB+EC2のWeb構成を構築してみる

2026.02.26

はじめに

かつまたです。

今回は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には、以下のソフトウェアスタックがあらかじめインストール・設定済みです。

https://aws.amazon.com/marketplace/pp/prodview-bzstv3wbn5wkq

コンポーネント 説明
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でパブリック証明書をリクエストします。

「証明書タイプ」で 「パブリック証明書をリクエスト」 を選択します。

スクリーンショット 2026-02-25 18.39.45-1.png

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

スクリーンショット 2026-02-25 18.40.03.png

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

スクリーンショット 2026-02-25 18.40.33-1.png

しばらく待つとステータスが 「発行済み」 に変わり、証明書の発行が完了します。

EC2の作成(Bitnami AMI)

Bitnami WordPress AMIを使ってインスタンスを起動します。AWS Marketplaceで「WordPress Certified by Bitnami and Automattic」を選択し、「EC2コンソールから起動」 を選びます。バージョンは6.9.1を使用しました。

スクリーンショット 2026-02-25 18.51.13.png

ネットワーク設定では、パブリック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経由のみ許可するセキュアな構成になります。

スクリーンショット 2026-02-25 19.06.28.png

ターゲットグループの作成

ALBのターゲットグループを作成します。設定内容は以下の通りです。

  • ターゲットの種類: インスタンス
  • プロトコル: HTTP / ポート80
  • VPC: 作成したEC2が存在するVPCを選択

スクリーンショット 2026-02-25 19.08.14.png

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

スクリーンショット 2026-02-25 19.08.20.png

ALBの作成・リスナー設定

ALBを作成します。リスナーは2つ設定します。

  • HTTPリスナー(ポート80)

HTTPアクセスをHTTPS(443)へリダイレクトするよう設定します。
スクリーンショット 2026-02-25 19.11.36.png

  • HTTPSリスナー(ポート443)

HTTPSアクセスを作成したターゲットグループへ転送します。

スクリーンショット 2026-02-25 19.11.43.png

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

スクリーンショット 2026-02-25 19.11.54.png

Route53レコードの設定

Route53ホストゾーンにALBへのエイリアスAレコードを作成します。

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

スクリーンショット 2026-02-25 19.13.50.png

WordPressの動作確認

https://ドメイン名/wp-admin にアクセスし、WordPress管理画面にログインします。
ログインID、PasswordはEC2にセッションマネージャーで接続し、以下コマンドによって確認できます。

cat /home/bitnami/bitnami_credentials

作成したコンテンツを配置してみます。

WordPressログイン後、「Page」→「Add Page」から任意のコンテンツをアップします。スラグは/loginとしました。
スクリーンショット 2026-02-25 19.28.30.png

コンテンツ例
<!-- 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で正常に表示されました。

image.png

無事、HTTPSでWordPressにアクセスできることが確認できました。

おわりに

今回は、Bitnami WordPress AMIとACM・Route 53・ALBを組み合わせて、独自ドメインでのHTTPS対応WordPress環境を構築しました。
ご覧いただきありがとうございました。

クラスメソッドオペレーションズ株式会社について

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

この記事をシェアする

FacebookHatena blogX

関連記事