Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/snails8/terraform-module
AWS 各種リソースを使用した本番運用構成(dev含む)
https://github.com/snails8/terraform-module
aurora docker ecs fargate infra nats terraform
Last synced: 9 days ago
JSON representation
AWS 各種リソースを使用した本番運用構成(dev含む)
- Host: GitHub
- URL: https://github.com/snails8/terraform-module
- Owner: Snails8
- Created: 2021-12-01T12:15:47.000Z (about 3 years ago)
- Default Branch: develop
- Last Pushed: 2022-02-13T12:38:54.000Z (almost 3 years ago)
- Last Synced: 2024-12-07T15:05:00.117Z (2 months ago)
- Topics: aurora, docker, ecs, fargate, infra, nats, terraform
- Language: HCL
- Homepage:
- Size: 3.71 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# sample-terraform
![Image](.docs/ECS.drawio.png)### setup
---
1. .envに値をsetする
```
$ cp .env.example .env
```
```
注意
APP_NAME 必ず対象アプリケーションのリポジトリ名にすること(小文字ハイフンつなぎ)
DB_MASTER_NAME ハイフンは使用不可
DB_MASTER_PASS ハイフンは使用不可
DB_NAME 文字列+数字にすること (ハイフン,文字列のみは使用不可)
LOKI_USER なくても動く
LOKI_PASS なくても動く
```2. public キーをセットする
```shell:
$ vim src/dev/ec2-key.pub
$ vim src/prod/ec2-key.pub
```3. s3-tf-bucket の作成
```shell
$ make s3_tfbackend # Check TF_STATE_BUCKET in Makefile
```
init, apply時にtf.stateが同期されるようになる(同時作業にだけ注意)4. make ecr registry
```
$ make ecr-repo
```### TerraformでAWS環境のbuildする
---
1. Terraform の読み込みと環境の作成
```shell:
$ make apply> Apply complete! Resources: 154 added, 1 changed, 0 destroyed!
```2. ssmに登録するために 構築したAWSの各種リソースの値を出力をする
```shell:
$ make outputs> DB_HOST末尾のportだけ削除(:5432 の削除)
```3. .env.github に保存される環境変数をアプリケーション側のSECRETにセットする
```shell:
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 はそのまま
```4. .env にある環境変数に値をセットする
5. SSM (パラメーターストア)に値の登録
```shell:
# .env.production にあるvalueを登録 or 上書き
$ make ssm-store
```
## 運用・構築前 注意
- ドメインをRoute53に登録していないと怒られるので注意
- laravel_backend のgithub_iam に対象のアプリケーションリポジトリ名を追加してください
- 本番運用するならaurora のsnapshot を false にすることフロント側
- 必ずフロントエンドの locals = app_name -> フロント側のリポジトリ名 にしてください
- 先にRoute53にホストゾーンを設定してください
- frontend.tfのlocals内に必ずドメイン名を記載してください### アプリケーション側の注意
---
Task-definitionの環境の参照先を注意する
```json:
# 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 が二重管理になってしまっている。外部デプロイを利用すれば回避できるが以下の問題がある
- https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/userguide/deployment-type-external.html対応策
・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```