近年、クラウドインフラストラクチャの管理において、Infrastructure as Language (IaL)が注目を集めています。今回は、IaLの力を借りて、AWS FargateにStreamlitアプリケーションをデプロイする過程を詳しく解説します。驚くほど簡単に、ポチポチとクリックするだけでデプロイが完了する様子をお見せしましょう。
Cursor✖IaL要件定義書プロンプトでAWS FargateでのStreamlitアプリケーションデプロイしてみた!
マジでポチポチでデプロイできた! https://t.co/Cl0vE6IXig pic.twitter.com/epxiXz3iMR— Maki@Sunwood AI Labs. (@hAru_mAki_ch) October 7, 2024
charset="utf-8">
IaLとは?Infrastructure as Languageの威力
Infrastructure as Language(IaL)は、自然言語での要件定義とAIによるコード生成を組み合わせた革新的なアプローチです。このアプローチにより、インフラ構築のプロセスが大幅に簡素化され、効率が向上します。
今回のプロジェクトでは、IaLを活用してAWS FargateにStreamlitアプリケーションをデプロイするためのTerraformコードを生成しました。
プロジェクトの概要
今回のプロジェクトの目標は以下の通りです:
- StreamlitアプリケーションをAWS Fargate上にデプロイする
- Terraformを使用してインフラストラクチャをコード化する
- セキュアで拡張性のあるアーキテクチャを構築する
主要なコンポーネント
プロジェクトは以下の主要なコンポーネントで構成されています:
- Streamlitアプリケーション(
app.py
) - Dockerファイル(
Dockerfile
) - Terraformの設定ファイル(
main.tf
,variables.tf
,outputs.tf
,terraform.tfvars
)
Streamlitアプリケーションの概要
今回デプロイするStreamlitアプリケーションは、「にゃんこカフェ ダッシュボード」です。このダッシュボードは、架空のねこカフェの来店者数や人気の猫ちゃんのデータを視覚化しています。
以下はapp.py
の一部です:
import streamlit as st
import pandas as pd
import plotly.express as px
# ページ設定
st.set_page_config(page_title="にゃんこカフェ ダッシュボード", layout="wide")
# タイトル
st.title("にゃんこカフェ ダッシュボード")
# 仮のデータ
visitors_data = pd.DataFrame({
'month': ['1月', '2月', '3月', '4月', '5月', '6月'],
'visitors': [1200, 1900, 1600, 2200, 2500, 2300]
})
# グラフの作成
st.subheader("月間来店者数")
fig = px.bar(visitors_data, x='month', y='visitors', text='visitors')
st.plotly_chart(fig, use_container_width=True)
# ... (その他のコード)
Dockerfileの作成
アプリケーションをコンテナ化するために、以下のようなDockerfileを作成しました:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip3 install -r requirements.txt
COPY . .
EXPOSE 8501
HEALTHCHECK CMD curl --fail http://localhost:8501/_stcore/health
ENTRYPOINT ["streamlit", "run", "app.py", "--server.port=8501", "--server.address=0.0.0.0"]
Terraformコードの生成
IaL要件定義書プロンプトを使用して、以下のTerraformファイルを生成しました:
main.tf
: 主要なリソース定義variables.tf
: 変数の定義outputs.tf
: 出力の定義terraform.tfvars
: 変数の値
以下はmain.tf
の一部です:
# VPCの作成
resource "aws_vpc" "main" {
cidr_block = var.vpc_cidr
tags = {
Name = "${var.project_name}-vpc"
}
}
# ECSクラスターの作成
resource "aws_ecs_cluster" "main" {
name = "${var.project_name}-cluster"
}
# タスク定義の作成
resource "aws_ecs_task_definition" "app" {
family = "${var.project_name}-task"
network_mode = "awsvpc"
requires_compatibilities = ["FARGATE"]
cpu = var.task_cpu
memory = var.task_memory
execution_role_arn = aws_iam_role.ecs_execution_role.arn
container_definitions = jsonencode([
{
name = "${var.project_name}-container"
image = var.container_image
portMappings = [
{
containerPort = 8501
hostPort = 8501
}
]
# ... (その他の設定)
}
])
}
# ... (その他のリソース定義)
デプロイ手順
- リポジトリのクローン
- Dockerイメージのビルドとプッシュ
terraform.tfvars
の更新- Terraformの初期化と適用
git clone https://github.com/your-repo/s13_streamlit-fargate-ial.git
cd s13_streamlit-fargate-ial
docker build -t your-docker-hub-username/nyanko-cafe-app:latest .
docker push your-docker-hub-username/nyanko-cafe-app:latest
# terraform.tfvarsを編集
terraform init
terraform apply
まとめ
IaL要件定義書プロンプトを使用することで、複雑なAWS Fargateデプロイメントを驚くほど簡単に実現できました。この方法を使えば、インフラストラクチャの構築と管理が格段に効率化され、開発者はアプリケーションの機能開発により多くの時間を割くことができます。
今回のプロジェクトで使用したコードやファイルは、GitHubリポジトリで公開していますので、ぜひ参照してみてください。IaLの力を体験し、あなたのプロジェクトにも活用してみてはいかがでしょうか?
リポジトリ
<script async src="https://platform.twitter.com/widgets.js"
コメント