AWSおよびBitbucket PipelinesサーバーレスCI / CDアプリケーション

この記事では、Bitbucket Pipelinesを使用してAWSクラウドにDjangoアプリケーションをデプロイする方法について説明します。 このトピックに興味がある人のために、猫へようこそ。



画像






鉱山に行きましょう!



アプリケーションワイヤフレームを作成する



プロジェクトは典型的なDjangoアプリケーションです。 唯一の違いは、アプリケーション設定が環境変数を通じて取得されることです。 プロジェクトリポジトリはbitbucket上にあります。 同様のものを作成するには、リストから要件を設定します。



zappa==0.45.1 django-rest-swagger==2.1.2 djangorestframework==3.7.3 django-filter==1.1.0 Django==2.0 psycopg2==2.7.3.2 django-storages==1.6.5
      
      





ご覧のとおり、REST APIを構築してPostgreSQLに接続するための一般的な依存関係のセット。 次に、一般的なDjangoアプリケーションを作成する手順を実行します。 データベースに接続し、S3に静的データを配置するためのプロジェクト設定設定に追加します。



 STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' ##################################### # ENV VARIABLES ##################################### RDS_DB_NAME = os.environ.get('RDS_DB_NAME') RDS_USERNAME = os.environ.get('RDS_USERNAME') RDS_PASSWORD = os.environ.get('RDS_PASSWORD') RDS_HOSTNAME = os.environ.get('RDS_HOSTNAME') RDS_PORT = os.environ.get('RDS_PORT') S3_BUCKET = os.environ.get('S3_BUCKET') ##################################### ##################################### # THIS SETTINGS CAN'T BE OVERRIDED # ##################################### # Database # https://docs.djangoproject.com/en/2.0/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': RDS_DB_NAME, 'USER': RDS_USERNAME, 'PASSWORD': RDS_PASSWORD, 'HOST': RDS_HOSTNAME, 'PORT': RDS_PORT, } } AWS_STORAGE_BUCKET_NAME = S3_BUCKET AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME STATIC_ROOT = 'static' STATIC_URL = "https://%s/" % AWS_S3_CUSTOM_DOMAIN
      
      





Zappaは、GatewayおよびLambda APIに基づいたwsgiアプリケーションの展開を簡素化するフレームワークです。 内部では、CloudformationテンプレートジェネレーターとwsgiリクエストへのLambdaイベントアダプターがあります。これにより、従来のアプリケーション操作スキームを使用できます。 テストの最後の仕上げを最終仕上げとして追加します。



 pytest==3.3.1 pylint==1.8.1 tox==2.9.1 pytest-django==3.1.2 docstringtest==0.3.0
      
      





tox、pylint、およびpytestの構成ファイルを追加します



Zappaの構成



変数のセットを持つJSONまたはYAMLファイルを表します。 私のバージョンでは、Pipelines S3の設定で非表示のバケットに保存され、アーティファクトが作成されるたびにコピーされます。

例を挙げます。



 { "dev1": { "environment_variables": { "RDS_DB_NAME": "dbname", "RDS_USERNAME": "user", "RDS_PASSWORD": "pass", "RDS_HOSTNAME": "host", "RDS_PORT": "5432", "S3_BUCKET": "s3-bucket" }, "aws_region": "us-east-1", "django_settings": "sample.settings", "project_name": "serverless", "runtime": "python3.6", "s3_bucket": "app-bucket", "domain":"example.com", "certificate_arn":"<ACM certificate arn>" } }
      
      





プロジェクト設定に関連するすべてのものは、environment_variablesに登録されます。 詳細については、zappaのドキュメントを参照してください。



Bitbucket Pipelinesの構成



私は他の記事にそれが何であるかを知らない人を送ります。 ここでは、パイプライン構成を詳細に検討します。 CI / CDの場合、次のシェルスクリプトを使用します。



 #!/bin/bash setup () { echo ------- SETUP ------- apt-get update # required to install zip apt-get install -y zip pip install virtualenv virtualenv --python=python3 env source env/bin/activate pip install -r requirements.txt return $? } tests() { echo ------- TESTS ------- pip install -r requirements-test.txt # for tests tox return $? } deploy() { echo ------- DEPLOY ------- echo $1 pip install awscli aws s3 cp s3://$CMDB/zappa_settings.json . zappa update $1 || zappa deploy $1 zappa certify $1 --yes zappa manage $1 "migrate --noinput" zappa manage $1 "collectstatic --noinput" return $? } setup && test && deploy $1
      
      





このスクリプトは、Debianのbitbucketパイプライン(画像:python:3.6.1)の典型的なコンテナーで実行されます。 Pipelineを使用すると、DockerHubで任意のコンテナを使用できますが、スクリプトの適応はあなたの良心に残ります。



パイプライン構成自体は次のとおりです。



 image: python:3.6.1 pipelines: tags: release-*: - step: caches: - pip script: - ./ci.sh prod1 branches: master: - step: caches: - pip script: - ./ci.sh dev1
      
      





イメージはコンテナを指し、本番展開はタグによって行われ、ブランチマスターはdev1環境に展開されます。 希望する場合は、残りのブランチに対して個別にテスト実行を追加できます。 すべてがシンプルです。



構成ファイルを追加した後は、ビットパック自体を構成するだけです。 パイプラインをオンにして、環境変数を設定します。



画像



これで、マスターにプッシュしてタグをカットし、一般的にはリポジトリを開発者に提供できます。



秘密の暗号化とCloudfrontの使用のトピック、およびRDS、ACM、IAM、Route53の設定は、舞台裏に残りましたが、これはすでに記事の範囲外です。 興味のある方は、AWSのドキュメントでこれらすべてを見つけることができます。



再びリポジトリへのリンク



All Articles