What's?

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

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

DEVELOPMENT

web
js
aws
lambda
vpc
elasticsearch

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

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

構成

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

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

構成


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

▶ 参考 Qiita記事

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

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

前提

Lambda用のロールを作成

Lambdaから必要なアクセスは、デフォルトのlog書き込み等、Elasticsearch、VPC内にLambdaを配置するためのポリシーが必要になります。

  • AWSLambdaBasicExecutionRole(lambda作成時のdefaultのやつ)
  • AWSLambdaElasticsearchExecutionRole(Elasticsearchへのアクセス)
  • AWSLambdaVPCAccessExecutionRole(VPCへのアクセス) ※これは、VPC内に配置する際に使用するので、外に出す場合はもちろん必要ありません。
    これらのポリシーを持つロールを作成します。
  • ロール作成
  • 「使用するサービスを選択」で、Lambdaを選択
  • 「アクセス権限ポリシーをアタッチする」で、上記3つ(2つ)を検索し、チェックを入れる
  • 次のページでロール名を入力して作成する
  • 作成表示されるARNを控えておく(Elasticsearch側にこれを設定するため)

iam role

※ここで、AWSLambdaVPCAccessExecutionRoleを追加しないと、VPC内にLambdaを設定しようとする際に、怒られます。 ▶ 参考 Qiita 記事


Lambda関数をVPC内に設定

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

ロールの設定

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

VPC

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

▶ 参考 Qiita 記事

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

Elasticsearchを起動

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

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

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

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

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

これで起動します。

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

▶ 参考 classmethod記事


まとめ

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

うかい / 株式会社UKAI
うかい@代表取締役兼エンジニア株式会社UKAI
Nobuyuki Ukai

株式会社UKAI 代表取締役CEO。建築を専攻していたが、新卒でYahoo!Japanにエンジニアとして入社。その後、転職、脱サラ、フリーランスエンジニアを経て、田舎へ移住し、ゲストハウスの開業、法人成り。ゲストハウス2軒、焼肉店、カフェ、食品製造業を運営しています。詳細はこちらから

🙏よかったらシェアお願いします🙏
WRITTEN BY
うかい / 株式会社UKAI
うかい@代表取締役兼エンジニア株式会社UKAI

Nobuyuki Ukai

株式会社UKAI 代表取締役CEO。建築を専攻していたが、新卒でYahoo!Japanにエンジニアとして入社。その後、転職、脱サラ、フリーランスエンジニアを経て、田舎へ移住し、ゲストハウスの開業、法人成り。ゲストハウス2軒、焼肉店、カフェ、食品製造業を運営しています。詳細はこちらから

CONACT
入力して下さい
Slack からもどうぞ

※お気軽にどうぞ!(6月20日まで有効!お早めに)

COPYRIGHT © 2020 UKAI CO., LTD. ALL RIGHTS RESERVED.