2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

docker-compose環境でRuby on Jetsの構築からデプロイまで<後編>

Last updated at Posted at 2021-01-06

概要

以前の記事でRuby on Jetsのローカル環境を作成するところまで書きました。

docker-compose環境でRuby on Jetsの構築からデプロイまで<前編>

今回は実際にデプロイするところまでまとめてみたいと思います。

ユーザを準備

コンソールからIAMユーザを作成し、credentialを取得してください。

https://console.aws.amazon.com/iam/home#/users

今回デプロイするためだけのユーザということで「プログラムによるアクセス」にチェックを入れます。

Untitled.png

ポリシーの作成では「JSON」というタブを押して以下に記述したjsonを貼り付けてください。

Untitled (1).png

ポリシー設定用json

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "apigateway:*",
                "cloudformation:*",
                "dynamodb:*",
                "events:*",
                "iam:*",
                "lambda:*",
                "logs:*",
                "route53:*",
                "s3:*"
             ],
            "Resource": [
                "*"
            ]
        }
    ]
}

便宜上フルでアクションを許可しました。

もしセキュリティ視点でIAMポリシーを最小限にしたい場合は

以下のページを参考にデプロイ用IAMユーザにポリシーを設定してください。

(自分は最小限で設定しました。)

https://rubyonjets.com/docs/extras/minimal-deploy-iam/

公式ドキュメントには現時点では載っていなかったのですがVPCを設定するためには以下のような記述を追加する必要があると思います(というより記述しないとapplication.rbに書いたVPCの設定でデプロイが落ちました。。)

# Statementに追加
{
    "Version": "2012-10-17",
    "Statement": [
        {
            中略
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeSubnets",
                "ec2:DescribeVpcs"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

ここでは説明を省きますが、注意点としてはこのIAMポリシーは関数ロールに設定するIAMポリシーとは異なるという点です。config/application.rbの方で関数ロールへIAMポリシーをアタッチできます。気が向いたらそちらも書く予定です。

好みの名前を入力してポリシーを作成します。

Untitled (2).png

この後はお好みの設定でユーザを作成してください。

credentialをローカルに設定

IAMコンソールで作成したIAMユーザの画面へ行き、「認証情報」タブからアクセスキーとシークレットキーを作成してください。

取得した2つのキーを、以下を参考に~/.aws/credentialsと~/.aws/configに設定します。

https://rubyonjets.com/docs/deploy/

~/.aws/credentials:

[default]
aws_access_key_id=<アクセスキー>
aws_secret_access_key=<シークレットキー>

~/.aws/config:

[default]
region=<リージョン>
output=json

デプロイ実行

デプロイにはjets deployというコマンドを使います。ちなみに裏ではcloud formationが動いています。

dockerコンテナからそのままデプロイします。

ちなみに①で記述したDockerfileでaws-cliがコンテナに入っている状態になっています。

(①の方でDockerfileやdocker-compose.ymlの設定を載せています)

.env.containerでコンテナの環境変数を管理しているのでここにENVを記述します。

# .env.container
JETS_ENV = production

次に.env.production.remoteにDB情報などの、関数で使うための環境変数を記述します

(.env.developmentはローカル用、.env.development.remoteはリモート用でstagingとprodも同様)

# .env.production.remote
# DB情報などを記述

後はdeployするだけです!

$ docker-compose run --rm app bundle exec jets deploy

lambdaコンソールからアプリケーションがデプロイされているのを確認できれば完了です!

https://ap-northeast-1.console.aws.amazon.com/lambda/home?region=ap-northeast-1#/applications

staging環境を作成する

jetsでは先ほど記述したJETS_ENVという環境変数によって別の環境を簡単に作れます

以下のように.envなどに設定してみます

# .env.container
JETS_ENV=staging

先程と同様にdeployします

この時関数の環境変数は.env.staging.remoteに記述しましょう

$ docker-compose run --rm app bundle exec jets deploy

環境を入れ替えたいときはJETS_ENVの値を変えるだけでいいのでCI/CDの構築も

環境変数を切り替えてあげるだけで大丈夫です!

アプリケーションの削除

以下のコマンドでアプリケーションに依存しているリソース全てを消すことができます

扱いには注意が必要です

$ docker-compose run --rm app bundle exec jets delete

https://rubyonjets.com/reference/jets-delete/

まとめ

まだまだ書きたいことがたくさんあるのですが、とりあえずデプロイするところまで

行けました!!

引き続き気づいたことや詰まったことは発信していきたいと思います。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?