WSL2を使ってLocalStackをインストールしてみた！


皆様こんにちは。

この記事は ハンズラボ [AdventCalendar2022](https://qiita.com/advent-calendar/2022/handslab) 3日目です！

宜しくお願い致します。

# はじめに

近年円安影響をもろに受けているクラウドサービスですが、仕事で使う方は必須のツールになってる場合も多いと思います。
私の場合はAWSが一番良く利用しますが、いかんせん会社のアカウントだと気軽に検証出来なかったりします！
そこで今回の表題であるAWSの各サービスを再現できるツール「LocalStack」を試してみようとおもいます！

今回のトピックは下記です。
* LocalStack導入の前準備
* LocalStack導入
* LocalStackの設定
* LocalStackでS3を立ち上げてみた

# LocalStack導入の前準備

LocalStackを動作させるのに必要なサービスは下記の通りです。

> python (Python 3.7 up to 3.10 is supported)
> pip (Python package manager)
> docker

[公式参考ページ](https://docs.localstack.cloud/getting-started/installation/, "localstack installation")

WSLのUbuntuバージョン確認

```
root@DPC-01:~# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.1 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
```

Python3はUbuntuにデフォルトで入っていたのでバージョン確認とpip, dockerが入っていないことを確認

```
root@DPC-01:~# python3 --version
Python 3.10.6

root@DPC-01:~# pip --version
Command 'pip' not found, but can be installed with:
apt install python3-pip

root@DPC-01:~# docker --version
Command 'docker' not found, but can be installed with:
apt install docker.io      # version 20.10.12-0ubuntu4, or
apt install podman-docker  # version 3.4.4+ds1-1ubuntu1
```

python3-pip install

```
root@DPC-01:~# apt install python3-pip
<中略>
root@DPC-01:~# pip --version
pip 22.0.2 from /usr/lib/python3/dist-packages/pip (python 3.10)
```

docker install

```
root@DPC-01:~# curl https://get.docker.com | sh
<中略>
root@DPC-01:~# docker --version
Docker version 20.10.21, build baeda1f
root@DPC-01:~# service docker start
 * Starting Docker: docker                                                                           [ OK ]
```

# LocalStack導入

事前準備が完了したのでLocalStack install

```
root@DPC-01:~# pip install localstack
<中略>
root@DPC-01:~# localstack --version
1.3.0
```

LocalStack startをスタートし、利用できるサービスを確認します

```
root@DPC-01:~# localstack start -d

     __                     _______ __             __
    / /   ____  _________ _/ / ___// /_____ ______/ /__
   / /   / __ \/ ___/ __ `/ /\__ \/ __/ __ `/ ___/ //_/
  / /___/ /_/ / /__/ /_/ / /___/ / /_/ /_/ / /__/ ,<
 /_____/\____/\___/\__,_/_//____/\__/\__,_/\___/_/|_|

 💻 LocalStack CLI 1.3.0
<中略>
root@DPC-01:~# localstack status services
┏━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┓
┃ Service                  ┃ Status      ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━┩
│ acm                      │ ✔ available │
│ apigateway               │ ✔ available │
│ cloudformation           │ ✔ available │
│ cloudwatch               │ ✔ available │
│ config                   │ ✔ available │
│ dynamodb                 │ ✔ available │
│ dynamodbstreams          │ ✔ available │
│ ec2                      │ ✔ available │
│ es                       │ ✔ available │
│ events                   │ ✔ available │
│ firehose                 │ ✔ available │
│ iam                      │ ✔ available │
│ kinesis                  │ ✔ available │
│ kms                      │ ✔ available │
│ lambda                   │ ✔ available │
│ logs                     │ ✔ available │
│ opensearch               │ ✔ available │
│ redshift                 │ ✔ available │
│ resource-groups          │ ✔ available │
│ resourcegroupstaggingapi │ ✔ available │
│ route53                  │ ✔ available │
│ route53resolver          │ ✔ available │
│ s3                       │ ✔ available │
│ s3control                │ ✔ available │
│ secretsmanager           │ ✔ available │
│ ses                      │ ✔ available │
│ sns                      │ ✔ available │
│ sqs                      │ ✔ available │
│ ssm                      │ ✔ available │
│ stepfunctions            │ ✔ available │
│ sts                      │ ✔ available │
│ support                  │ ✔ available │
│ swf                      │ ✔ available │
│ transcribe               │ ✔ available │
└──────────────────────────┴─────────────┘
```

# LocalStackの設定
aws cliのラッパーであるawslocalをinstall

```
root@DPC-01:~# pip install awscli-local[ver1]
<中略>
root@DPC-01:~# awslocal --version
aws-cli/1.27.20 Python/3.10.6 Linux/5.15.74.2-microsoft-standard-WSL2 botocore/1.29.20
```

ここまでで、ひとまずLocalStackの導入は完了です！

# LocalStackでS3を立ち上げてみた

LocalStackで一番手頃なS3を立ち上げて検証
* Backet名：test-backet

```
root@DPC-01:~# awslocal s3api create-bucket --bucket test-backet
{
    "Location": "/test-backet"
}
root@DPC-01:~# awslocal s3 ls
2022-12-02 13:39:30 test-backet
```

バケットができたので試しにローカルのファイルをアップロードしてみます

```
root@DPC-01:~# vi test.txt
root@DPC-01:~# cat test.txt
test.file

root@DPC-01:~# awslocal s3 ls
2022-12-02 13:39:30 test-backet
root@DPC-01:~# awslocal s3 cp test.txt s3://test-backet
upload: ./test.txt to s3://test-backet/test.txt
root@DPC-01:~# awslocal s3 ls
2022-12-02 13:39:30 test-backet
root@DPC-01:~# awslocal s3 ls test-backet
2022-12-02 13:45:42         10 test.txt
```

今度はあっぷしたファイルが取り出せるか試してみます

```
root@DPC-01:~# rm test.txt
root@DPC-01:~# awslocal s3 cp s3://test-backet/test.txt ./
download: s3://test-backet/test.txt to ./test.txt
root@DPC-01:~# cat test.txt
test.file
```

# おわりに

今回はWSL環境での構築メインでざっくりLocalStackの導入について記事を書かせて頂きました。
本当はEC2の立ち上げなどをやりたかったのですが、ネットワーク設定など色々設定が必要なので今回はあくまでも導入してすぐ試せるサービスということで、
S3に絞って検証を実施しました。
いずれEC2を立ててみたという記事も作成できればと思っております。
この記事が皆様の参考になれば幸いです。

# 参考
公式ドキュメント
https://docs.localstack.cloud
公式GitHub
https://github.com/localstack/localstack