月21日
15343 ワード
TLドクター
私は別の#CloudGuruChallenge.今月我々はRedicisのために弾力性を実装することによってPythonアプリのパフォーマンスを改善するために挑戦しました.
アプリケーションのパフォーマンスが業界で大きな話題になっているので、このチャレンジは本当に面白いと思いました.PythonとRedisは既に複数回使用しています.
残念ながら、この挑戦に必要なサービスの性質のため、私はServerlessなアプローチを取ることができなかった.それはまた、私があなたがこれを読んでいる時までに既にリソースを引き裂いたことを意味します.私は私たちのためにいくつかの写真を楽しんだが心配しないでください!
データベース応答
キャッシュレスポンス
あなたがコードをチェックアウトしたいか、LinkedInに接続したいならば、下記を見てください.
ギタブ
https://github.com/wheelers-websites/CloudGuruChallenge_21.06
リンケディン
要件に加えて、私は上とそれ以降に行くことを決めた.その興味の場合は、読んでください!
建築
私は、コストが他の理由の間で劇的に変わるので、アプリケーションとネットワークのために建築を管理することに決めました.
ネットワークアーキテクチャ
アプリケーションアーキテクチャ
私がスコープから判断したこのアーキテクチャを改善するいくつかの次のステップは、ここにあります.
HTTPS侵入
もう一つのAZ 24679182のセットアップフェールオーバーNATゲートウェイ
複数のアプリケーションサーバ
代わりにASGの一部として実行するアプリを設定します
地形
以前のプロジェクトのように、私はコード(IAC)としてインフラストラクチャのためにここでterraformを使うことに決めました.私はテラフォームを使用するたびに私はそれについて好きな何か新しいものを見つけるようです.
以下は、私が最近このプロジェクトについて学び、使用した新しい発見された機能のリストです.
ローカルブロック
この機能は、ユーザーがテンプレート内のローカル変数を定義することができます.
https://www.terraform.io/docs/language/values/locals.html
locals {
availability_zones = [
"us-east-1a",
"us-east-1b",
"us-east-1c",
"us-east-1d"
]
cidr_anywhere_block = "0.0.0.0/0"
...
}
local.cidr_anywhere_block
ファイル機能
この機能を使用すると、ファイルをリソース宣言に簡単に渡すことができます.これにより、EC 2のインスタンスをブートストラップすることができました.いいえクレイジーフォーマットここに必要な!
https://www.terraform.io/docs/language/functions/file.html
resource "aws_instance" "server" {
...
user_data = file("user-data.sh")
}
シャッフルプロバイダー
この機能を使用すると、値のリストをシャッフルし、値の戻り値xを返します.私は、これが単に一つの価値とより柔軟にさえ提供するよりはるかに賢いと思いました!
https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/shuffle
variable "subnet" {
description = "subnet ids"
type = object({
private = list(string)
public = list(string)
})
}
subnet = {
...
public = [
"subnet-01b36f97fa8490e43",
"subnet-0a4272a81af160127",
"subnet-03939599dd92f0f07",
"subnet-0b6f2c6a35b31e4d5"
]
}
resource "random_shuffle" "public_subnet" {
input = var.subnet.public
result_count = 1
}
subnet_id = random_shuffle.public_subnet.result[0]
カウントメタ引数
この機能を使用すると、自分自身を繰り返す必要はありませんので、ループの動作をテンプレートに提供することができます.
https://www.terraform.io/docs/language/meta-arguments/count.html
resource "aws_subnet" "public" {
count = length(local.cidr_public_blocks)
cidr_block = local.cidr_public_blocks[count.index]
...
}
GitHub (Terraform)フラスコ、gunicorn、およびスタイル
私はデビッドトマスが関連トピックにいくつかの新しい発見の知識を使用するために提供されたデフォルトのアプリケーションを変更しました.
神社式
これにより、HTML 5624 , 9142と同様のHTMLテンプレートにロジックを置くことができました.私がテストしたとき、私は空のセクションがスクリーンに描かれるのを見たくなかったので、私は主にこれをしました.値が
ngIf
関数に渡されない場合は、それらは隠されます.{% if db_host %}
<div class="section">
<span class="section-title">
Database Host
</span>
<span>{{ db_host }}</span>
</div>
{% endif %}
また、エラーがない場合は画面にエラー表示を追加できます.私はいくつかのエラーログを表示するユーザーにリスクを知っているので、render_template
変数がサーバー上で適切に設定されている場合は、実際のエラーを渡すためにコードを修正しました.debug = os.environ.get('DEBUG')
debug = debug.lower() in ['1', 't', 'true', 'y', 'yes'] if debug is not None else False
...
try:
config = ini('postgres')
db_host = config['host']
db_version = select_version()
except Exception as e:
print('index() error:', e)
error = e if debug else "we're currently experiencing technical difficulties"
return render_template(
html,
error=error,
db_host=db_host,
db_version=db_version
)
神社遺産
これは私が他のテンプレートを持っていれば、他のテンプレートでベーステンプレートを再利用することを可能にしたので、私は一貫したスタイルのアプリケーションを低いメンテナンスで広く保つことができました.
<head>
<meta charset="UTF-8" />
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}" />
<title>CloudGuruChallenge_21.06</title>
</head>
<body>
{% block content %}
{% endblock %}
</body>
{% extends 'base.html' %}
{% block content %}
...
<div class="section">
<span class="section-title">
Elapsed Time
</span>
<span>{{ g.request_time() }}</span>
</div>
{% endblock %}
Gunicornサーバー
私はすぐに内蔵のフラスコサーバーは、生産で動作するように意図されていないことを学んだ.しかし、この単純なプロジェクトのために罰金だったかもしれないが、私は代わりにgunicornセットアップに余分なマイルに行きたかった.
一度私はちょうど私のブートストラップスクリプトでデーモンとしてアプリケーションを実行してインストールされます.例えば、
DEBUG
スタイリング
私は裸のHTMLページに耐えることができませんでした.スタイルに加えて、私はフラスコの
gunicorn -D app:app
の資産とstatic
と同様にその知識を固めることを望みたかったです.url_for
GitHub (Python)結論
全体的に私は本当にこの挑戦を楽しんだ.私は、何が多分次でありえたかについて見るのを待つことができません.関係なく、私はタスクをされます!
私はLinkedInに接続し、フィードバックを聞くのが大好きだ.あなたが同様に挑戦を完了するならば、私はあなたの仕事を見たいです.
乾杯!
ギタブ
https://github.com/wheelers-websites/CloudGuruChallenge_21.06
リンケディン
Reference
この問題について(月21日), 我々は、より多くの情報をここで見つけました https://dev.to/wheelerswebservices/jun-21-cloudguruchallenge-2k11テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol