
クラウドに使用およびプロビジョニングされたリソースの完全なライフサイクルを定義および管理するOpenSourceソリューション!
ドキュメントを探索»
SLDは、展開、重み付け、およびIAACの再利用可能な加速を加速し、動的フォームを生成し、同じコードで各環境の異なる変数を維持するのに役立ちます。 SLDを使用すると、その破壊などのインフラストラクチャの展開をスケジュールし、役割ごとにユーザーを管理し、分隊と環境ごとに個別のスタックを作成できます。


主な機能:
SLDは、テラフロムコードを使用する簡単な方法です!
DockerとDocker-CompseまたはKind(推奨)が必要です。
SLDリポジトリをクローンします
git clone https://github.com/D10S0VSkY-OSS/Stack-Lifecycle-Deployment.gitK8SでSLDを種類で展開します
cd Stack-Lifecycle-Deployment/play-with-sld/kubernetes
sh kplay.sh start結果:
Starting SLD for play
Creating cluster " kind " ...
✓ Ensuring node image (kindest/node:v1.20.2) ?
✓ Preparing nodes ? ?
✓ Writing configuration
✓ Starting control-plane ?️
✓ Installing CNI ?
✓ Installing StorageClass ?
✓ Joining worker nodes ?
Set kubectl context to " kind-kind "
You can now use your cluster with:
kubectl cluster-info --context kind-kindinitユーザーを作成します
sh kplay.sh init結果:
kind ok
docker ok
kubectl ok
jq ok
curl ok
init SLD
# ################################################
# Now, you can play with SLD ?️ #
# ################################################
API: http://localhost:5000/docs
DASHBOARD: http://localhost:5000/
---------------------------------------------
username: admin
password: Password08@
---------------------------------------------
endopintsをリストします
sh kplay.sh list結果:
kind ok
docker ok
kubectl ok
List endpoints
API: http://localhost:8000/docs
DASHBOARD: http://localhost:5000/ダッシュボードへのサインイン:

ダッシュボードリンクをクリックします:

クラウドアカウントを追加します

必要なデータをフォームに記入します。この例では、使用します
デフォルトでは、ワーカーはプレイの目的のためにSquad1およびSquad2として実行されていますが、必要に応じて変更してスケーリングすることができます
プロバイダー(AWS、GCP、Azure)にアカウントを追加する場合、1つのチームが作成された場合、作成したチームの名前のためにワーカーを作成する必要があります。
最後に追加:
Terraformモジュールまたはスタックを追加します

サポートされているプレフィックス:AWS_、GCP_、azure_
ユーザーとパスワードをhttps:// username:[email protected]/aws_vpc sshとして渡すことができます。
'*' =すべてにアクセスできるように、コンマで区切られた1つまたは多くのチームへのアクセスを許可できます:squad1、squad2
https://releases.hashicorp.com/terraform/
最初のスタックを展開!!!
展開用のスタックをリストします

[展開]を選択します

SLDは、スタック変数に基づいて動的なフォームを生成し、フォームに入力し、展開ボタンを押します

重要!アカウントを追加するときに以前に作成した同じチームと環境を割り当てます(クラウドアカウントの追加を参照)
これで、展開が進むにつれてタスクのステータスが変更されます。

実装のライフサイクルを制御できます
SLDが古い値を維持するか、それらの値を自由に編集することもできます。
そして最後に、ライフサイクルをプログラムで管理し、インフラストラクチャの破壊 /作成を処理することができます。これは、貯蓄計画の良い実践です!!! 
SLDは独自のリモートバックエンドを使用するため、Terraformでバックエンドを構成する必要はありません。次の例は、バックエンド構成を示しています
terraform {
backend "http" {
address = "http://remote-state:8080/terraform_state/aws_vpc-squad1-develop-vpc_core"
lock_address = "http://remote-state:8080/terraform_lock/aws_vpc-squad1-develop-vpc_core"
lock_method = "PUT"
unlock_address = "http://remote-state:8080/terraform_lock/aws_vpc-squad1-develop-vpc_core"
unlock_method = "DELETE"
}
}
現時点では、SLDはMongoDB、S3、およびローカルバックエンド(テスト目的のみ)をサポートして、MongoDBをバックエンドとして構成するために、次の変数をリモート状態サービスにパラメーターとして渡す必要があります。
# docker-compose.yaml
environment:
SLD_STORE: mongodb
SLD_MONGODB_URL: "mongodb:27017/"
MONGODB_USER: admin
MONGODB_PASSWD: admin
# k8s yaml
env:
- name: SLD_STORE
value: mongodb
- name: SLD_MONGODB_URL
value: "mongodb:27017/"
- name: MONGODB_USER
value: admin
- name: MONGODB_PASSWD
value: admin
S3を構成するには、SLDがAWSで実行されている場合に備えて、AWSのアクセスとシークレットキーを渡すことができます。
env:
- name: SLD_STORE
value: "S3"
- name: SLD_BUCKET
value: "s3-sld-backend-cloud-tf-state"
- name: AWS_ACCESS_KEY
value: ""
- name: AWS_SECRET_ACCESS_KEY
value: ""
Azure envについては、次のenvを設定する必要があります
env:
- name: SLD_STORE
value: azure
- name: AZURE_STORAGE_CONNECTION_STRING
value: "DefaultEndpointsProtocol=https;AccountName=<YOUR ACCOUNT>;AccountKey=<YOUR ACCESS KEY>;EndpointSuffix=core.windows.net"
azure-storage-configure-connection-stringを参照してください
Googleクラウドストレージセットの場合:
SLD_STORE=gcp
export GOOGLE_APPLICATION_CREDENTIALS="/app/sld-gcp-credentials.json"
GoogleサービスアカウントキーをK8S Secretにインポートします
kubectl create secret generic gcp-storage --from-file=~/Downloads/storage.json
sld-remote-state.yml set gcpストレージクラウドバックエンドとマウントシークレットを変更します。
apiVersion: apps/v1
kind: Deployment
metadata:
name: remote-state
labels:
name: remote-state
spec:
replicas: 1
selector:
matchLabels:
name: remote-state
template:
metadata:
labels:
name: remote-state
spec:
subdomain: primary
containers:
- name: remote-state
image: d10s0vsky/sld-remote-state:latest
volumeMounts:
- name: gcp
mountPath: "/app/gcp"
readOnly: true
env:
- name: SLD_STORE
value: gcp
- name: GOOGLE_APPLICATION_CREDENTIALS
value: "/app/gcp/storage.json"
resources:
limits:
memory: 600Mi
cpu: 1
requests:
memory: 300Mi
cpu: 500m
imagePullPolicy: Always
command: ["python3", "-m", "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8080", "--workers", "1"]
ports:
- containerPort: 8080
livenessProbe:
httpGet:
path: /
port: 8080
httpHeaders:
- name: status
value: healthy
initialDelaySeconds: 60
periodSeconds: 60
volumes:
- name: gcp
secret:
secretName: gcp-storage
他のスタックの出力を使用できるようにするには、次のように構成できますキーアルウィスは「タスク名」と同じです
| スタック名 | 分隊アカウント | env | 名前を展開します |
|---|---|---|---|
| AWS_VPC | squad1 | 開発する | VPC_CORE |
data "terraform_remote_state" "vpc_core" {
backend = "http"
config = {
address = "http://remote-state:8080/terraform_state/aws_vpc-squad1-develop-vpc_core"
}
}
テスト例:
echo "data.terraform_remote_state.vpc_core.outputs"|terraform console
SLDの労働者は、インフラストラクチャの展開を実行する責任があります。各アカウントまたは複数のアカウントに1人以上の労働者を同時に使用できます。それはすべて、あなたが考慮する並列性と分離の程度に依存します
# Example k8s worker for account squad1, change this for each of your accounts
# Stack-Lifecycle-Deployment/play-with-sld/kubernetes/k8s/sld-worker-squad1.yml
# Add replicas for increment paralelism
# Add more squad accounts if you want to group accounts in the same worker:
# command: ["celery", "--app", "tasks.celery_worker", "worker", "--loglevel=info", "-c", "1", "-E", "-Q", "squad1,"another_squad_account"]
apiVersion: apps/v1
kind: Deployment
metadata:
name: stack-deploy-worker-squad1
labels:
name: stack-deploy-worker-squad1
spec:
replicas: 1
selector:
matchLabels:
name: stack-deploy-worker-squad1
template:
metadata:
labels:
name: stack-deploy-worker-squad1
spec:
subdomain: primary
containers:
- name: stack-deploy-worker-squad1
image: d10s0vsky/sld-api:latest
imagePullPolicy: Always
env:
- name: TF_WARN_OUTPUT_ERRORS
value: "1"
resources:
limits:
memory: 600Mi
cpu: 1
requests:
memory: 300Mi
cpu: 500m
command: ["celery", "--app", "tasks.celery_worker", "worker", "--loglevel=info", "-c", "1", "-E", "-Q", "squad1"]
# Example docker-compose worker for account squad1, change this for each of your accounts
# Stack-Lifecycle-Deployment/play-with-sld/docker/docker-compose.yml
worker:
image: d10s0vsky/sld-api:latest
entrypoint: ["celery", "--app", "tasks.celery_worker", "worker", "--loglevel=info", "-c", "1", "-E", "-Q", "squad1"]
environment:
BROKER_USER: admin
BROKER_PASSWD: admin
depends_on:
- rabbit
- redis
- db
- remote-state
SLDには、ユーザーがこれを簡単に管理するための3つの事前に構成された役割があります。
| 役割 | 範囲 | 説明 |
|---|---|---|
| ヨーダ | グローバル | グローバルな範囲、すべてのチームを見ることができ、完全な管理者です |
| darth_vader | 1つまたは多くのチーム | 分隊の範囲を制限し、割り当てられた分隊を見ることができ、あなたはそれらのチームのみの完全なマネージャーです |
| ストームトルーパー | 1つまたは多くのチーム | 制限分隊の範囲、割り当てられた分隊を見ることができ、割り当てられた展開のみを展開することができます。 |
| R2-D2 | すべて、1つまたは多くのチーム | この役割は識別のみであり、以前の役割に関連付けられている必要があります。そのユースケースは、APIにアクセスするボットユーザー向けです |

貢献は、オープンソースコミュニティを学び、インスピレーションを与え、創造するのに驚くべき場所になっているものです。あなたがする貢献はどんな貢献も大歓迎です。
git checkout -b feature/AmazingFeature )git commit -m 'Add some AmazingFeature' )git push origin feature/AmazingFeature )MITライセンスの下で配布されます。詳細については、 LICENSE参照してください。
スタックライフサイクルの展開