AWS LambdaからElasticSearchへアクセスする設定方法(それぞれVPC内に配置)

目次

Lambda関数を使って外のAPIを叩き、そのデータをElasticsearchへ流し込むという処理を作ろうと検討していたところ、 lambda関数からElasticsearchへ何か操作をする際、どのように接続しセキュリティを保つのか、考えものです。

色々な記事を見ていると、Lambdaも、Elasticsearchも、VPC内への作成が可能になっているようです。 これを使い下記のような構成を取るように対応しました。



構成

が、Natゲートウェイを使用するので(vpc内のlambdaから外部へアクセスするのに必要)、安くても約30ドル程かかります。

だったら、microインスタンスを上げたほうが良さそうですので、今回は、両方ともvpcから外し、iam認証によりlambdaからelasticsearchにアクセスしようと思います。

構成


ちなみにlambda処理のコールは、cloudwatchを使って定期実行するものです。

https://qiita.com/RyujiKawazoe/items/64e8a65ab3e4909678fc

データ取得時は下記のような構成です。 構成

取得用は、cognitoかなんかで認証するか(VPC外の時)、パブリックサブネットに配置するなどして(VPC内の時)直接elasticsearchを叩けばいいかと思いましたが、せっかくなので、作成時と同様にlambdaでelasticsearchへアクセスし取得しようと思います(lambda呼び出しはAPI gatewayから)。

前提

Lambda用のロールを作成

Lambdaから必要なアクセスは、デフォルトのlog書き込み等、Elasticsearch、VPC内にLambdaを配置するためのポリシーが必要になります。 * AWSLambdaBasicExecutionRole(lambda作成時のdefaultのやつ) * AWSLambdaElasticsearchExecutionRole(Elasticsearchへのアクセス) * AWSLambdaVPCAccessExecutionRole(VPCへのアクセス) ※これは、VPC内に配置する際に使用するので、外に出す場合はもちろん必要ありません。
これらのポリシーを持つロールを作成します。

  1. ロール作成
  2. 「使用するサービスを選択」で、Lambdaを選択
  3. 「アクセス権限ポリシーをアタッチする」で、上記3つ(2つ)を検索し、チェックを入れる
  4. 次のページでロール名を入力して作成する
  5. 作成表示されるARNを控えておく(Elasticsearch側にこれを設定するため)

iam role

※ここで、AWSLambdaVPCAccessExecutionRoleを追加しないと、VPC内にLambdaを設定しようとする際に、怒られます。 https://qiita.com/yoshidasts/items/a369f89d34f57ea67aad


Lambda関数をVPC内に設定

lambdaをVPC内に置かない場合は、ここは割愛する

ロールの設定

新規作成の場合は作成時のロール選択で、上記で作成したロールを指定します。既存の関数がある場合はそれを選択し、関数詳細画面で設定します。 lambda role

VPC

VPC内にLambdaを配置すると、VPC内のサービスへの接続はとても簡単ですが、インターネットに疎通させようとした時に、外に出られないので、ちょっと設定が必要です。 VPC、サブネット、Natの割当 https://qiita.com/kojiisd/items/a15c1807c5c6bb08add0 こちらを参考

サブネットはプライベートサブネットを指定する lambda vpc

Elasticsearchを起動

※ ここはVPC内に配置しない場合は、パブリック・アクセスにし、アクセスポリシーを設定します。VPC内に配置する際は、同一VPC内からのみアクセスできなくなるので、アクセスポリシーは特に設定しなくてもいいかと思います。

手順に沿って設定していきますが、VPCのところで、Lambdaに設定したVPCやサブネット、セキュリティグループを指定します。 es vpc

アクセスポリシーを「1つ以上のAWSアカウントまたはIAMユーザーにアクセス許可….」を選択し、 es policy

ARNに先程作成したロールのARNを指定する es arn

VPC内か外かで、上記どちらかを設定

これで起動します。

※Elasticsearchの起動時の設定詳細はこちらを参考に

https://dev.classmethod.jp/cloud/aws/cm-advent-calendar-2015-getting-started-again-amazon-es/


まとめ

本来は同一vpc内に配置すべきかとは思いますが、ラーニングコスト面等を考え、外に出し、iam認証の設定をしました。 lambda関数で、elasticsearchへの接続し、index作成とデータの取得については、別の記事で記載しようと思います。

U-chan ( Nobuyuki Ukai )

学生時代は建築やデザインを専攻していたが、Yahoo!Japanにエンジニアとして運良く入社し、2年半で波情報を配信する波伝説に転職。3年後、Yahoo!時代の先輩の立ち上げたベンチャーに転職。数年後、伊豆下田に移住し、ゲストハウスを開業しながらリモートでエンジニアを続けたが、焼肉店の開業とともに株式会社UKAIを立ち上げ、法人成り。その後、カフェとゲストハウスをもう一軒開業し、現在は焼肉店、カフェ、ゲストハウス2件目を運営。今季は自社Webサイトの立ち上げ予定!

comments powered by Disqus