LocalStackの環境構築から動作確認

これがQiita初投稿です。まずは情報発信の練習のつもりで、記事を投稿していこうとおもいます。
よろしくお願いいたします。

## 目次
1.はじめに
2.LocalStackとは
3.環境構築
4.おわりに

## 1. はじめに
AWSを活用したシステム開発において、開発・検証・本番の環境をうまく切り分け、リリースミスによってシステムがデグることなく運用するためには、どのような手段があるでしょうか。

調べていくうちにLocalStackを知り、本問題の解決策に適しているのではないかと考え、実際に触ってみました。
そこで、本記事ではLocalStackの環境構築方法について紹介します。

## 2. LocalStackとは
LocalStackは、AWSリソースをローカル環境で実行できるオープンソースのフレームワークです。AWSと同じAPI、ツール、およびコンソールを使用して、AWSクラウド環境をエミュレートできます。

つまり、AWSを使用する開発者やチームは、AWSのサービスを直接ローカル環境で実行できるため、開発、テスト、およびデバッグをより効率的に行うことができます。また、ローカル環境での開発により、AWSの使用に関連するコストを抑えることができます。

LocalStackは、AWSの様々なサービスをサポートしており、S3、DynamoDB、Lambda、API Gateway、SNS、SQSなど、多くのサービスをローカルで実行できます。また、Dockerコンテナで簡単にインストールできるため、環境の設定が簡単になります。

総じて、LocalStackはAWS開発の効率性を向上させるために非常に便利なツールであり、クラウド開発初心者にも使いやすいです。

## 3. 環境構築

### 3.1. 開発環境の構築

開発環境のOSではUbuntuが一番使い慣れているため、今回はWSL2を利用しています。

#### 3.1.1. WSL2の有効化＆Ubuntuのインストール

- [参考文献１（構築手順）](https://www.kkaneko.jp/tools/wsl/wsl2.html)
- [参考文献２（トラブルシューティング）](https://qiita.com/hali/items/bf04a1e4012025a38d6b)

#### 3.1.2. Dockerのインストール

- [参考文献１（構築手順）](https://qiita.com/na-777/items/617fc64d512f20b8e457)
- [参考文献２（トラブルシューティング）](https://zenn.dev/tkzwhr/articles/trouble-shooting-wsl2-docker)

### 3.2 LocalStackのインストールから起動

[公式サイト](https://docs.localstack.cloud/getting-started/installation/#docker-compose)のDcoker-Composeの起動方法の手順を参考に起動する

1. 任意のディレクトリにdocker-compose.ymlを作成する

    ```
    touch docker-compose.yml
    ```

2. docker-compose.ymlの下記内容を記載する

    ```
    version: "3.8"
    
    services:
      localstack:
        container_name: "${LOCALSTACK_DOCKER_NAME-localstack_main}"
        image: localstack/localstack
        ports:
          - "127.0.0.1:4566:4566"            # LocalStack Gateway
          - "127.0.0.1:4510-4559:4510-4559"  # external services port range
        environment:
          - DEBUG=${DEBUG-}
          - DOCKER_HOST=unix:///var/run/docker.sock
        volumes:
          - "${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack"
          - "/var/run/docker.sock:/var/run/docker.sock"
    ```

3. 次のコマンドを実行してコンテナを起動します

    ```
    docker-compose up
    ```

以上で、LocalStackのサーバが起動された。

### 3.3. AWS CLIのインストール
`awscli`をUbuntuにインストールするには、以下の手順に従ってください。

1. 最新のパッケージリストを取得します。

    ```
    sudo apt-get update
    ```

2. `awscli`をインストールするために必要なパッケージをインストールします。

    ```
    sudo apt-get install awscli
    ```

3. インストールが完了したら、`awscli`が正しくインストールされたかどうかを確認するために、以下のコマンドを実行してバージョン情報を取得します。

    ```
    aws --version
    ```

4. LocalStackにアクセスするため、credentialsを設定する。その際、credentialsの設定値は任意で問題ない。

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

5. 動作確認として、`awscli`を利用して、LocalStackにアクセスする。

    ```
    # バケットを作成する
    aws s3 mb s3://localstack-bucket --endpoint-url=http://localhost:4566 --profile localstack
    >>> make_bucket: localstack-bucket
    
    # 作成したバケットを確認する
    aws s3 ls --endpoint-url=http://localhost:4566 --profile localstack
    >>> 2023-05-04 14:50:30 localstack-bucket
    ```
    
    また、上記コマンドの実行時、LocalStackのコンテナからも下記のログを見ることができたため、正常にアクセスできたことを確認できる。
    
    ```
    localstack_main  | 2023-05-04T05:50:30.080  INFO --- [   asgi_gw_0] localstack.request.aws     : AWS s3.CreateBucket => 200
    localstack_main  | 2023-05-04T05:54:05.592  INFO --- [   asgi_gw_0] localstack.request.aws     : AWS s3.ListBuckets => 200
    ```

以上で、Ubuntuに`awscli`をインストールして、LocalStackにアクセスまでを確認できた。

### 3.4. awscli-localのインストール

上記までで疎通確認までは完了しているが、`awscli`を利用して、プロファイルの指定とエンドポイントの指定では、操作ミスに伴う、事故が起こる可能性が高くなると考えれる。
LocalStackが提供しているAWS CLIのラッパーである`awscli-local`を利用することで操作ミスを起こしにくいと思われるため、個人的にはこちらの利用を推奨する。

1. pipをインストールする。

    ```
    sudo apt-get update
    sudo apt-get install python3-pip
    ```

2. `awscli-local`をインストールする。

    ```
    pip3 install awscli-local
    ```

3. インストールが完了したら、以下のコマンドを実行してバージョン情報を確認します。

    ```
    awslocal --version
    ```

4. 動作確認として、`awscli-local`を利用して、LocalStackにアクセスする。

    ```
    # バケットを作成する
    awslocal s3 mb s3://localstack-bucket-awscli-local
    >>> make_bucket: localstack-bucket-awscli-local
    
    # 作成したバケットを確認する
    awslocal s3 ls
    >>> 2023-05-04 14:50:30 localstack-bucket
    >>> 2023-05-04 14:50:30 localstack-bucket-awscli-local
    ```

    また、上記コマンドの実行時、LocalStackのコンテナからも下記のログを見ることができたため、正常にアクセスできたことを確認できる。

    ```
    localstack_main  | 2023-05-04T05:59:49.676  INFO --- [   asgi_gw_0] localstack.request.aws     : AWS s3.CreateBucket => 200
    localstack_main  | 2023-05-04T05:59:57.678  INFO --- [   asgi_gw_0] localstack.request.aws     : AWS s3.ListBuckets => 200
    ```

以上で、Ubuntuに `awscli-local` をインストールして設定する手順が完了しました。

### 4. おわりに

まずは環境構築のみで、「1.はじめに」で問題提起しました「運用」までは触れてません。
これらから、`LocalStack`の知見を深めて、さらに記事を投稿していこうと思います。

[次の記事：LocalStackを使用して、ローカル環境でS3を利用した静的ウェブページのホスティング手順
](https://qiita.com/tsuno0821/items/248cfa05566d03619345)