1. HOME
  2. ブログ
  3. IT技術
  4. 【macOS】LocalStack+terraformでEC2+RDSを立ててみた

【macOS】LocalStack+terraformでEC2+RDSを立ててみた

注意

  • LocalStackのPro版(有料版)のAPIキーが必要
    • Pro版の体験版(14日間)があるので、そちらを使用しています
  • LocalStackとterraformとAWSのネットワーク設定周りは素人のため、間違っている箇所があるかもしれないがご容赦ください

準備

LocalStackをインストール

  • 参考: https://docs.localstack.cloud/getting-started/installation
    • 僕はLocalStack CLIでインストール
  • 下記ツールが必要のため、事前にインストール
    • python (version: 3.7 ~ 3.10)
    • pip
    • docker
  • LocalStackをインストール
  • LocalStackがインストールされていることを確認
  • LocalStack Pro版のAPIキーを環境変数に登録
  • LocalStackを起動
  • LocalStackが起動していることを確認

    • IPアドレスは必要なのでメモを取る

terraformをインストール

  • 参考: https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli
    • 僕はHomebrew on OS Xでインストール
  • terraformのリポジトリを追加
  • terraformをインストール
  • terraformがインストールされていることを確認

EC2で使うイメージを用意する

  • 参考: https://docs.localstack.cloud/user-guide/aws/elastic-compute-cloud/#base-images
  • ubuntu:focalのイメージをpullします
  • イメージがpullされていることを確認
  • LocalStack用のtagを追加
  • tagが追加されたことを確認

AWSプロフィールを設定

  • aws-cliで設定
    • AWS Access Key ID: dummy
    • AWS Secret Access Key: dummy
    • Default region name: ap-northeast-1
    • Default output format: json

  • AWSプロフィールが設定されていることを確認

サーバー構成図

  • RDS: LocalStackのコンテナー内にMySQLが起動する
  • web-server: 一つのdockerコンテナーとして作られる
    • web-serverの役割は通信の出入りで、リクエストが来たらapp-serverに通す(リバースプロキシ)
  • app-server: 一つのdockerコンテナーとして作られる
    • リクエストのIDをMySQLに格納されているデータを取得し、その結果を返却するプログラム

terraformでEC2とRDSを構築

  • ディレクトリ構図

    • 上記のファイルはgit(url)に上げています
  • initとplanをします
  • 内容を確認したらapplyを実行します

    • 途中でプロンプトが出るので、planと同じ内容出ていたらyesを打ちます
  • EC2とRDSが起動していることを確認
    • EC2確認
      • dockerのコンテナーを確認

        • dockerのコンテナーIDc9e63e3ae05bf16e0697c324は立てられたEC2で、起動していることが確認できた
          • c9e63e3ae05bはweb-serverとします
          • f16e0697c324はapp-serverとします
      • LocalStackのログを確認

        • インスタンスIDi-0265072bfb2fbdc0ai-85a837419413c12d9は起動していることが確認できた
        • IPアドレスとポート番号は必要なのでメモを取る
    • RDS確認
      • LocalStackのコンテナーに入る
        • ↑の出力からコンテナーIDはed08d7441d54

      • プロセス確認

      • ポート番号はLocalStackのログで確認

        • ポート番号は4510であることがわかりました
      • MySQLは起動していることが確認できた

接続情報

RDSデータ準備

  • MySQLにログイン
  • テーブルを作成
  • データを挿入
  • 挿入したデータを確認

web-server設定

  • web-serverのコンテナーに入る
  • インストール済みのプログラムを更新
  • 必要なプログラムやツールをインストール
  • nginxがインストールされていることを確認
  • nginxを起動
  • nginxにアクセスできるかを確認
    • ホストマシンからcurlで確認
    • dockerのコンテナー内からcurlで確認
    • 出力は下記
  • nginxの通信をすべてapp-serverに向くよう設定

    /etc/nginx/sites-available/default
  • nginxを再起動
  • リバースプロキシの設定反映されていることを確認
    • ホストマシンからcurlで確認
    • dockerのコンテナー内からcurlで確認
    • 出力は下記
    • ステータスコード502であれば正しく反映されている

app-server設定

  • app-serverのコンテナーに入る
  • インストール済みのプログラムを更新
  • 必要なプログラムやツールをインストール
  • gitがインストールされていることを確認
  • golangがインストールされていることを確認
  • golangのMySQLのドライバーをインストール
  • スクリプトのディレクトリを作成
  • スクリプトを作成

    /root/src/main.go
  • スクリプトファイルができたかを確認
  • スクリプトをビルド
  • ビルドしたファイルができたかを確認
  • ビルドしたファイルを実行
  • 動作確認
    • ホストマシンからcurlで確認
    • dockerのコンテナー内からcurlで確認
    • 出力は下記

動作確認

  • ホストマシン → web-server → app-serverの経路で通信しているかを確認

    • ホストマシン → web-server → app-server経路で通信していることが確認できた

書いた人はこんな人

ハク(エンジニア)
ハク(エンジニア)
お酒が友達のバックエンドエンジニアです。
インフラとお友達になりたい…。
最近暑いので水分補給と酔分補給を怠らないようにしましょう。

関連記事

採用情報

\ あの有名サービスに参画!? /

バックエンドエンジニア

\ クリエイティブの最前線 /

フロントエンドエンジニア

\ 世界を変える…! /

Androidエンジニア

\ みんなが使うアプリを創る /

iOSエンジニア