他メンバーが開発した Serverless Framework のサービスをデプロイする

他メンバーが開発した Serverless Framework のサービスをデプロイしました。端末の環境設定差異を吸収する方法を整理しています。
2021.01.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、筧(カケイ)です。

他のメンバーが作成した Serverless Framework のサービスをデプロイする機会があったのでブログにまとめます。

前提条件

  • リモートリポジトリから端末にクローンできる
  • デプロイ先の AWS 環境に対して、デプロイに必要なアクセス権限を持っている
  • コードは Python で書かれており、パッケージ管理には Pipenv を利用
  • 端末に Serverless Framework をインストール済み
  • 端末に Pipenv をインストール済み

やってみた

以下の流れで作業します。

  1. リモートリポジトリからクローン
  2. プラグインインストール
  3. パッケージインストール
  4. Python の Version 設定
  5. デプロイ

1.リモートリポジトリからクローン

リモートリポジトリから端末にクローンします。

$ git clone {URL}
$ cd {サービス名}

2.プラグインインストール

インストールが必要なプラグインを確認します。 例えば package.json を確認します。

package.json(抜粋)

{
  {中略}
  "devDependencies": {
    "serverless-python-requirements": "^5.1.0",
    "serverless-step-functions": "^2.19.0"
  }
}

必要なプラグインをインストールします。

$ sls plugin install -n serverless-python-requirements --stage dev && sls plugin install -n serverless-step-functions --stage dev

3.パッケージインストール

インストールが必要なパッケージを確認します。 例えば Pipfile を確認します。

Pipfile(抜粋)

[packages]
boto3 = "*"
requests = "*"

必要なパッケージをインストールします。

$ pipenv install requests boto3

4.Python の Version 設定

デプロイ時の Python の Version を確認します。 例えば serverless.yml の runtime を確認して、端末側のバージョンも合わせます。

serverless.yml(抜粋)

provider:
  name: aws
  runtime: python3.8

以下は Python 3.8 にする場合です。

$ python -V
$ pipenv --python 3.8

5.デプロイ

サービスをデプロイします。 以下ではデプロイ先の AWS アカウントに assume role してからデプロイしています。 MFA を設定している場合は、MFA が聞かれたタイミングで入力ください。

$ export AWS_SDK_LOAD_CONFIG=1
  export AWS_PROFILE={プロファイル}
$ aws sts get-caller-identity
$ sls deploy --stage {ステージ名}
{中略}
Enter MFA code for arn:aws:iam::{AWS アカウント ID}:mfa/{ユーザ名}:{ワンタイムパスワード}

エラーなく終了しており、サービスがちゃんと動いていればデプロイ完了です。お疲れ様でした!

終わりに

他のメンバーが開発したサービスを自分でデプロイするのは緊張しますよね。 前提が絞られていて恐縮ですが、皆さんの役にも立つと幸いです。

以上、 筧(カケイ) がお送りしました。それでは皆さん良い一日を!