CentOS 系の最新バージョンである CentOS 8 に、AWS (Amazon Web Service) Lambda + DynamoDB のサーバーレスアプリケーションを Go 言語で開発するための環境を構築するメモ。第 3 回。
全てローカル環境で開発、動作確認が行えるよう構築するのが目的。必要なアプリケーション等のインストールはインターネット経由で行います。流れは以下のとおりです。
- CentOS 8 のインストール
- Go 言語のインストール
- Docker のインストール
- AWS SAM CLI のインストール
- DynamoDB Local の導入
- Visual Studio Code のインストール
ここで残すのは、DynamoDB にデータを保存する Lambda 関数を Go 言語で作成し、ブラウザから API を叩いて実行するまでです。全てローカルで実行します。
#3、Docker をインストールしていきます。
#4 で AWS SAM CLI をインストールした後、Lambda 関数の動作確認をするのに Docker が必要です。
Docker のインストール
しばらく前までは CentOS 8 のための yum リポジトリに Docker パッケージが存在しなかったため、dnf に --nobest オプションを付けてインストールする必要がありました。
# dnf install --nobest docker-ce docker-ce-cli containerd.io
が!つい最近、9 月 17 日に CentOS 8 用の yum リポジトリに Docker の最新パッケージが登録されました!!
というわけで、公式サイトの手順に従って、yum の代わりに dnf を使用して普通にインストールできます。
リポジトリの追加
まずはリポジトリの登録です。
# dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
リポジトリリストを確認して、docker-ce-stable があれば OK です。
# dnf repolist repo id repo の名前 AppStream CentOS-8 - AppStream BaseOS CentOS-8 - Base docker-ce-stable Docker CE Stable - x86_64 extras CentOS-8 - Extras
Docker のインストール
特に --nobest オプションとか付けずにインストールします。
# dnf install docker-ce docker-ce-cli containerd.io
「完了しました!」が出れば、インストールは成功です。
Docker の起動
Docker を起動してバージョンを確認します。
# systemctl start docker # docker version
Docker のバージョンが表示されれば OK。2020/09/25 時点の最新は 19.03.13 です。
Docker の自動起動設定
OS 起動時に Docker が自動起動するよう設定します。
# systemctl enable docker
実行ユーザへの Docker 実行権限付与
インストールは当然 root で行うわけですが、実行は AWS SAM CLI をローカルにインストールしたユーザで行いたいわけです。ローカル上で Lambda を開発、実行、テストしたいわけですから。
しかし、このままではローカルユーザに Docker の実行権限がないため、次の記事で説明する、Lambda 関数起動時に例えばこんなエラーが出ます。
$ sam local start-api Error: Running AWS SAM projects locally requires Docker. Have you got it installed and running?
これが出たら docker ps コマンドを打ってみて、premission denied と出れば、以下で解決するはず。
実行ユーザのグループ追加
次のコマンドを実行して、実行ユーザを docker グループに追加します。
# gpasswd -a [ユーザ名] docker
ログアウト & ログイン
グループ追加を有効にするため、一度ログアウトしてログインします。
ログインしなおして、再度 docker ps コマンドを打ち、permission denied が出なければ OK。
これで、Docker 実行の準備完了です……と思いきや、2020/09/25 時点において、CentOS 8 では、Docker のコンテナから名前解決ができないため、Lambda が起動するコンテナから DynamoDB が起動するコンテナに接続することができません。
ファイアウォールの設定変更
コンテナからの名前解決が行えるようにするための方法はいくつかありますが、ここではファイアウォールに NAPT を追加して対処します。
root ユーザで以下のコマンドを実行してください。
# firewall-cmd --add-masquerade --permanent # firewall-cmd --reload
これで Lambda の起動するコンテナから DynamoDB の起動するコンテナに接続できるはず。
参考
Docker のインストールとエラーの解決にあたり、以下のサイト様を参考にさせていただきました。
0 件のコメント:
コメントを投稿