■ はじめに
https://dk521123.hatenablog.com/entry/2021/11/05/233309
の続き。 MWAA Localの 環境構築としてDocker composeを使い aws-mwaa-local-runner と LocalStack と組み合わせにする。
目次
【1】構築方針 1)前提条件 【2】構築手順 1)docker-compose の作成 2)「docker-compose up -d」の実行 3)動作確認 【3】その他操作 1)S3を操作 2)Redshiftのクラスタ作成 【4】課題
【1】構築方針
* docker-compose を使用して構築する => docker-compose については、以下の関連記事を参照のこと。
Docker compose ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2022/04/28/000000
1)前提条件
* Docker/Docker composeを使える環境 * Port : 8080/4566 を使っていない環境 => ポートが使用されている場合は、別ポートに振りなおす * Shell が実行できる環境 => 参考にしたdocker-compose.ymlがLinux環境前提で作成されている => 今回は、Git for windowsをインストール時に 付与されてくる Git Bash を使って対応した
【2】構築手順
1)docker-compose の作成 2)「docker-compose up -d」の実行 3)動作確認
1)docker-compose の作成
* 以下のサービスを追加できる docker-compose を作成する [1] aws-mwaa-local-runner [2] LocalStack [3] PostgreSQL [4] AWS CLI
docker-compose.yml
version: "3" services: localstack: image: localstack/localstack:latest container_name: "localstack" ports: - "4566:4566" environment: # 自分の使いたいAWSサービスを追加 - SERVICES=dynamodb,sqs,s3,iam,sns,redshift,lambda - DOCKER_HOST=unix:///var/run/docker.sock volumes: - "/var/run/docker.sock:/var/run/docker.sock" - "/tmp/localstack:/tmp/localstack" postgres: image: postgres:10-alpine environment: - POSTGRES_USER=airflow - POSTGRES_PASSWORD=airflow - POSTGRES_DB=airflow logging: options: max-size: 10m max-file: "3" volumes: - "${PWD}/db-data:/var/lib/postgresql/data" # 以下を参考 # https://github.com/aws/aws-mwaa-local-runner/blob/v2.6.3/docker/docker-compose-local.yml local-runner: image: amazon/mwaa-local:2_6 restart: always depends_on: - postgres environment: - LOAD_EX=n - EXECUTOR=Local - DEFAULT_PASSWORD=test logging: options: max-size: 10m max-file: "3" volumes: - ${PWD}/dags:/usr/local/airflow/dags - ${PWD}/plugins:/usr/local/airflow/plugins ports: - "8080:8080" command: local-runner healthcheck: test: ["CMD-SHELL", "[ -f /usr/local/airflow/airflow-webserver.pid ]"] interval: 30s timeout: 30s retries: 3 aws-cli: image: mesosphere/aws-cli container_name: "aws-cli" volumes: - ./resources:/tmp/resources environment: - AWS_ACCESS_KEY_ID=dummyaccess - AWS_SECRET_ACCESS_KEY=dummysecret - AWS_DEFAULT_REGION=us-east-1 entrypoint: /bin/sh -c command: > " aws dynamodb create-table --endpoint http://localstack:4566 \ --table-name report-request \ --attribute-definitions AttributeName=reportRequestId,AttributeType=S \ --key-schema AttributeName=reportRequestId,KeyType=HASH \ --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 aws dynamodb batch-write-item --endpoint http://localstack:4566 \ --request-items file:///tmp/resources/report-request.json \ --return-consumed-capacity INDEXES \ --return-item-collection-metrics SIZE aws sqs create-queue --endpoint http://localstack:4566 \ --queue-name myqueue aws --endpoint http://localstack:4566 s3 mb s3://reports aws --endpoint http://localstack:4566 s3 mb s3://reports-output aws --endpoint http://localstack:4566 s3 cp /tmp/resources/fake-report.json \ s3://reports/fake-report.json " depends_on: - localstack
2)「docker-compose up -d」の実行
# Windowsの場合、「Git-bash」で実行する docker-compose up -d
3)動作確認
* ブラウザで以下にアクセスする
Airflow
* admin/test でログイン
http://localhost:8080/home
LocalStack
http://localhost:4566
【3】その他操作
1)S3を操作
# S3バケット「local-demo-bucket」作成 $ aws s3api create-bucket --bucket local-demo-bucket --endpoint-url http://localhost:4566 { "Location": "http://local-demo-bucket.s3.localhost.localstack.cloud:4566/" }
2)Redshiftのクラスタ作成
* 以下のサイトを参考にした。
https://qiita.com/greenteabiscuit/items/73e5552655cb38685d10
[1] プロファイル作成
aws configure --profile localstack
[2] Redshiftのクラスタ作成
aws redshift create-cluster --cluster-identifier demo-for-mwaa --node-type dw.hs1.xlarge --master-username user --master-user-password password --profile localstack --endpoint-url=http://localhost:4566
【4】課題
* LocalStack については、S3 や RedShift を対応しているが EMRは非対応なので、もし、EMRを使っている場合は、 別途、どうするか考えなくてはならない
参考文献
https://aws.plainenglish.io/end-to-end-pipeline-mocking-with-localstack-and-airflow-mwaa-ac4f019c3a0e
https://medium.com/codex/how-to-setup-a-local-mwaa-development-environment-92e4e7557ecb
関連記事
MWAA ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2021/09/29/131101
MWAA Local ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2021/11/05/233309
MWAA Local ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/10/21/233404
MWAA Local ~ AWSに繋げるようにするには ~
https://dk521123.hatenablog.com/entry/2023/10/28/184431
LocalStack ~ awscli-local ~
https://dk521123.hatenablog.com/entry/2020/12/16/211127
LocalStack ~ ローカルで疑似AWSを作成する ~
https://dk521123.hatenablog.com/entry/2019/12/14/010524
LocalStack ~ ローカルで疑似Lambda/S3/DynamoDBを作成する ~
https://dk521123.hatenablog.com/entry/2019/12/16/231149
Amazon DynamoDB Local
https://dk521123.hatenablog.com/entry/2019/11/13/221326
Git ~ 初期設定 / Windows 編 ~
https://dk521123.hatenablog.com/entry/2018/08/14/215814
Docker Desktop / WSL2 ~ Windows / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2020/12/08/165505
WindowsでAWS CLIを使うには
https://dk521123.hatenablog.com/entry/2020/12/01/000000
Docker compose ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2022/04/28/000000
Docker ~ 基本編 / docker-compose ~
https://dk521123.hatenablog.com/entry/2020/04/11/000000
Docker ~ 基本編 / docker-compose.yml の書き方 ~
https://dk521123.hatenablog.com/entry/2020/12/18/152949