localstackでredshiftとs3を立ててみる

## どういう記事か

とりあえずlocalstackの環境構築を行なってredshiftとs3を使ってみた記事です。

## 参考

https://it-blue-collar-dairy.com/localstack_on_docker-compose/

## 前提

m1 mac

## docker-compose

```docker-compose.yml
version: '3'
 
services:
  # LocalStack
  localstack:
    image: localstack/localstack:latest
    environment:
      - SERVICES=s3,redshift # 使いたいAWSサービスカンマ区切りで設定する
      - DEFAULT_REGION=ap-northeast-1 # リージョンを設定
      - DATA_DIR=/tmp/localstack/data # データ保存するディレクトリ
    volumes:
      - ./localstack:/tmp/localstack # ローカルディレクトリをデータ保存ディレクトリへマウント
    ports:
      - 4566:4566 # サービスへのアクセスポートは4566

```

## プロフィールの変更

```
$ aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key     **************** shared-credentials-file
secret_key     **************** shared-credentials-file
    region           ap-northeast-1      config-file    ~/.aws/config
```

以下のようにプロフィールを設定します。

```
$ aws configure --profile localstack
AWS Access Key ID [None]: dummy
AWS Secret Access Key [None]: dummy
Default region name [None]: ap-northeast-1
Default output format [None]:
```

これで .awsの中のcredentialsも変わっているはずです。

```
$ cat credentials
[localstack]
aws_access_key_id = dummy
aws_secret_access_key = dummy
```

バケットを作ってみる

```
$ aws s3 mb s3://sample-bucket --endpoint-url=http://localhost:4566 --profile localstack
make_bucket: sample-bucket

$ aws s3 ls --endpoint-url=http://localhost:4566 --profile localstack
2021-09-07 14:50:18 sample-bucket
```

redshiftのクラスター作成

```
$ aws redshift create-cluster --cluster-identifier example --node-type dw.hs1.xlarge --master-username user --master-user-password cmpass --profile localstack --endpoint-url=http://localhost:4566

// レスポンス
{
    "Cluster": {
        "ClusterIdentifier": "example",
        "NodeType": "dw.hs1.xlarge",
        "ClusterStatus": "creating",
        "MasterUsername": "user",
        "DBName": "dev",
        "Endpoint": {
            "Address": "example.cg034hpkmmjt.ap-northeast-1.redshift.amazonaws.com",
            "Port": 5439
        },
        "ClusterCreateTime": "2021-09-07T05:58:36.131000+00:00",
        "AutomatedSnapshotRetentionPeriod": 1,
        "ClusterSecurityGroups": [
            {
                "ClusterSecurityGroupName": "Default",
                "Status": "active"
            }
        ],
        "VpcSecurityGroups": [],
        "ClusterParameterGroups": [
            {
                "ParameterGroupName": "default.redshift-1.0",
                "ParameterApplyStatus": "in-sync"
            }
        ],
        "ClusterSubnetGroupName": "",
        "AvailabilityZone": "ap-northeast-1a",
        "PreferredMaintenanceWindow": "Mon:03:00-Mon:03:30",
        "PendingModifiedValues": {},
        "ClusterVersion": "1.0",
        "AllowVersionUpgrade": true,
        "NumberOfNodes": 1,
        "PubliclyAccessible": false,
        "Encrypted": false,
        "Tags": [],
        "KmsKeyId": "",
        "EnhancedVpcRouting": false,
.......
```

redshiftのクラスターのリストを取得したいとき

```
aws redshift describe-clusters --profile localstack --endpoint-url=http://localhost:4566
```

これでredshiftのクラスター周りは処理が可能です！