Skip to content

AWS 各種リソースを使用した本番運用構成(dev含む)

Notifications You must be signed in to change notification settings

Snails8/terraform-module

Repository files navigation

sample-terraform

Image

setup


  1. .envに値をsetする
$ cp .env.example .env
注意
APP_NAME         必ず対象アプリケーションのリポジトリ名にすること(小文字ハイフンつなぎ)
DB_MASTER_NAME   ハイフンは使用不可
DB_MASTER_PASS   ハイフンは使用不可
DB_NAME          文字列+数字にすること (ハイフン,文字列のみは使用不可)
LOKI_USER        なくても動く
LOKI_PASS        なくても動く
  1. public キーをセットする
$ vim src/dev/ec2-key.pub
$ vim src/prod/ec2-key.pub
  1. s3-tf-bucket の作成
$ make s3_tfbackend # Check TF_STATE_BUCKET in Makefile  

init, apply時にtf.stateが同期されるようになる(同時作業にだけ注意)

  1. make ecr registry
$  make ecr-repo

TerraformでAWS環境のbuildする


  1. Terraform の読み込みと環境の作成
$ make apply

> Apply complete! Resources: 154 added, 1 changed, 0 destroyed!
  1. ssmに登録するために 構築したAWSの各種リソースの値を出力をする
$ make outputs

> DB_HOST末尾のportだけ削除(:5432 の削除) 
  1. .env.github に保存される環境変数をアプリケーション側のSECRETにセットする
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_ACCOUNT_ID  *awsにlogin後、右上の画面を確認すると以下画像のように見れる
SUBNETS   *outputsで確認後 [] 内の内容のみを登録
SECURITY_GROUPS *outputsで確認して登録
LOKI_ID     *コメントアウトで不要
LOKI_SECRET *コメントアウトで不要
> SUBNETS の [] は不要で、 "Aaa","Bbb","Ccc" のみをコピペする
> SECURITY_GROUPS はそのまま
  1. .env にある環境変数に値をセットする

  2. SSM (パラメーターストア)に値の登録

# .env.production にあるvalueを登録 or 上書き
$ make ssm-store    

運用・構築前 注意

  • ドメインをRoute53に登録していないと怒られるので注意
  • laravel_backend のgithub_iam に対象のアプリケーションリポジトリ名を追加してください
  • 本番運用するならaurora のsnapshot を false にすること

フロント側

  • 必ずフロントエンドの locals = app_name -> フロント側のリポジトリ名 にしてください
  • 先にRoute53にホストゾーンを設定してください
  • frontend.tfのlocals内に必ずドメイン名を記載してください

アプリケーション側の注意


Task-definitionの環境の参照先を注意する

# SSM に値がある場合
{
    "name": "AWS_ACCESS_KEY_ID",
    "valueFrom": "/SED_TARGET_APP_NAME/ACCESS_KEY_ID"
},

# 登録していない場合
{
    "name": "APP_URL",
    "value": "https://snails8.site"
},

注意

Q how to connect ec2 ?

$ ssh -i ~/.ssh/秘密鍵 ec2-user@IPアドレス

Q. RDS instance failed to create please check .env value

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html
・1〜16文字の英数字とアンダースコアを含めることができます。
・その最初の文字は文字でなければなりません。
・データベースエンジンによって予約された単語にすることはできません。

✕: ハイフン(-), ✕:誰もが使いそうなusername=admin (すでに予約されているため)

懸念点

github-actionsでアプリケーションのdeployをしているため、task-definition が二重管理になってしまっている。

外部デプロイを利用すれば回避できるが以下の問題がある

対応策

・AWS Copilot を使用 https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/userguide/getting-started-aws-copilot-cli.html

・パイプラインの使用 https://zenn.dev/reireias/articles/8e987af2762eaa

理想 github-actions にCodePipelineをかませる

Architecture

.
├── Makefile
├── setting    # command etc..
│   ├── bin
│   │   └── sessionmanager-bundle
│   │       └── bin
│   └── template
└── src
    ├── _module   # common use
    │   ├── acm
    │   ├── alb
    │   ├── aurora
    │   ├── cloudmap
    │   ├── ec2
    │   ├── ecs
    │   │   ├── cluster
    │   │   ├── frontend
    │   │   │   └── json
    │   │   └── laravel_backend
    │   │       ├── app
    │   │       └── worker
    │   ├── elasticache
    │   ├── iam
    │   │   └── github_oidc
    │   ├── network
    │   ├── rds
    │   ├── security_group
    │   │   ├── frontend
    │   │   └── laravel_backend
    │   ├── ses
    │   └── waf
    ├── dev    # dev env
    └── prod   # prod env

About

AWS 各種リソースを使用した本番運用構成(dev含む)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages