ジャギ様のAWSチャレンジ

awsに関したことを書きます。

Mattermost構築の流れ(手動編)Part4 Lambda、Cloud9

Lambda

用途

  • Mattermost起動に必要な初期データをデータベースに作成するためにLambdaを使います。ただLambdaを使いたいが為に使います。
  • EC2からデータベースに接続してデータを作成する場合はskipしてもOKです。難易度がかなり高いので演習ではLamdbaはskipします。次は Mattermost構築の流れ(手動編)Part5 EC2 - ジャギ様の部屋 です。

Lambda用のセキュリティグループの作成

  • AWSコンソール画面の検索窓に「セキュリティグループ」と入力→セキュリティグループをクリック→セキュリティグループを作成ボタンをクリック
画面 設定項目 設定値
基本的な詳細 セキュリティグループ名 mattermost-lambda-sg
説明 Security group applied to Mattermost Lambda
VPC mattermost-vpc
インバウンドルール - -
アウトバウンドルール - -
タグ - オプション キー Name
値 - オプション mattermost-lambda-sg

Lambda用のIAMロールの作成

  • AWSコンソール画面の検索窓に「IAM」と入力し、IAMをクリックする。
  • 左メニューのロールをクリック→ロールを作成ボタンをクリック
  • 設定項目は以下
画面 設定項目 設定値
信頼されたエンティティを選択 信頼されたエンティティタイプ AWS のサービス
ユースケース Lambda
許可を追加 許可ポリシー AmazonRDSFullAccess
AWSLambdaVPCAccessExecutionRole
名前、確認、および作成 ロール名 mattermostRdsAccessRole
説明 This is the role that holds access to RDS and applies to Lambda.
タグを追加 キー Name
値 - オプション mattermost-lambda-role

関数(Lambda Function)の作成

  • AWSコンソール画面の検索窓に「Lambda」と入力し、Lambdaをクリックする。
  • 左メニューの関数をクリック→関数の作成ボタンをクリック→一から作成を選択する。
画面 設定項目 設定値
基本的な情報 関数名 mattermost-create-initdata
ランタイム Python 3.9
アーキテクチャ x86_64
デフォルトの実行ロールの変更 既存のロールを使用する
既存のロールを使用する mattermostRdsAccess
詳細設定 VPC を有効化 チェックを入れる
VPC mattermost-vpc
サブネット mattermost-subnet-private1-ap-northease-1a
mattermost-subnet-private2-ap-northease-1c
セキュリティグループ mattermost-lambda-sg

コード修正

  • lambda_function.pyを開き、このコードに書き換えます。
  • 書き換えた後、Ctrl + s で保存します。
  • その後、デプロイボタンをクリックします。関数 mattermost-create-initdata が正常に更新されました。と画面上部に表示されればOKです。

Cloud9

用途

  • Cloud9でLambdaの実行に必要なpymysqlモジュールをインストールします。Cloud9を使わなくても可能ですが、利用機会がないので使います。
  • 使い方がよくわからず、かろうじて使えてるといった手順になります。

Cloud9の画面起動

  • AWSコンソール画面の検索窓に「Cloud9」と入力し、Cloud9をクリックする。
  • Create environmentボタンをクリックします。

Cloud9の設定画面

  • Name environment画面が起動するので以下の設定を行い、Next stepボタンをクリックします。

Environment name and description

設定項目 設定値
Name mattermost-cloud9
Description (デフォルトのままでOK)

Environment settings

  • 続いてConfigure settings画面が起動します。設定は全てデフォルトのままでNext stepボタンをクリックします。

Review

  • 続いてReview画面が起動します。さらっと設定内容に目を通し、Create environmentボタンをクリックします。Cloud9はすぐ削除するので設定内容は気にしなくてOKです。

ここからCloud9の画面(コンソール)の操作

  • Cloud9の画面が起動したら左メニューのAWSLambdamattermost-create-initdata右クリックDownloadをクリックします。

  • Select a workspace folder for your projectにはmattermost-cloud9をクリックします。

  • するとダウンロードが始まるので、左メニューのEnvironmentLambdamattermost-create-initdataがあることを確認します。

  • 画面下部のコンソールで以下のコマンドを実行します。インストール後はzipコマンドで圧縮します。pymysqlはdbにアクセスするために必要なモジュールです。インストールするとCloud9のエクスプローラ上にフォルダが作成されていることが確認できます。

$ cd mattermost-create-initdata
$ pip install pymysql -t ./
$ zip -r mattermost-create-initdata.zip *

  • 左メニューのAWSLambdamattermost-create-initdata右クリックUpload LambdaZip Archivemattermost-create-initdata.zip選択→Openボタンクリック→Yesボタンクリック
  • Lambdaの画面を見て、pymysqlフォルダが確認できればOK

S3にmattermost-create-initdata.zipアップロード

  • 手動編の手順では使わないのですが、自動編の手順で使うのでここでアップロードしておきます。
  • Cloud9からバケットの作成とファイルのアップロードが可能です
    • 左メニューのAWSS3→右クリック→Create Bucket...バケットcfn-lambda-mattermost
      • バケット名は他人のバケットを含めて一意のものである必要があります。エラーが起きたら名前を変えましょう。バケットcfn-lambda-mattermostは筆者が使っているので絶対使えません。
    • 左メニューのAWSS3cfn-lambda-mattermost右クリックUpload FilesZip Archivemattermost-create-initdata.zip選択→Uploadボタンクリック→Yesボタンクリック
  • S3の画面でアップロードされたことを確認しましょう。

テストイベントを設定

  • Testボタンを押下します。するとテストイベントを設定画面が起動しますので以下のように設定します。
設定項目 設定値
イベントアクションをテスト 新しいイベントを作成
イベント名 mattermost-createdata
イベント共有の設定 プライベート
テンプレート - オプション (デフォルトのままでOK)
イベント JSON (デフォルトのままでOK)
  • 保存ボタンをクリックします。

環境変数の設定

設定項目 設定値
DB_NAME mattermost
DB_PASSWORD adminadmin
DB_USER admin
DB_WRITER_ENDPOINT_ADDRESS (RDSのエンドポイントを設定します。RDSの画面からコピーしてください。書き込みの方です。読み取りの方はNG)



Lambda実行

  • Deployボタンの押下が必要かも。押せる状態なら押しておく。
  • Testボタンをクリックし、以下のような出力があれば実行は成功です。time outで失敗するときはセキュリティグループの設定が悪い、別のVPCに所属していることを疑います。
  • 実際にデータベースのデータを見るのはEC2の手順内で行います。

Cloud9の削除

  • AWSコンソール画面の検索窓にCloudFormationと入力し、CloudFormationを選択する

  • Cloud9から削除しましょう。