DEVELOPMENT
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から)。
前提
- VPC( ▶ 参考 Qiita記事)
- elasticsearch( ▶ 参考 classmethod記事)
Lambda用のロールを作成
Lambdaから必要なアクセスは、デフォルトのlog書き込み等、Elasticsearch、VPC内にLambdaを配置するためのポリシーが必要になります。
- AWSLambdaBasicExecutionRole(lambda作成時のdefaultのやつ)
- AWSLambdaElasticsearchExecutionRole(Elasticsearchへのアクセス)
- AWSLambdaVPCAccessExecutionRole(VPCへのアクセス)
※これは、VPC内に配置する際に使用するので、外に出す場合はもちろん必要ありません。
これらのポリシーを持つロールを作成します。 - ロール作成
- 「使用するサービスを選択」で、Lambdaを選択
- 「アクセス権限ポリシーをアタッチする」で、上記3つ(2つ)を検索し、チェックを入れる
- 次のページでロール名を入力して作成する
- 作成表示されるARNを控えておく(Elasticsearch側にこれを設定するため)
※ここで、AWSLambdaVPCAccessExecutionRoleを追加しないと、VPC内にLambdaを設定しようとする際に、怒られます。 ▶ 参考 Qiita 記事
Lambda関数をVPC内に設定
※ lambdaをVPC内に置かない場合は、ここは割愛する
ロールの設定
新規作成の場合は作成時のロール選択で、上記で作成したロールを指定します。既存の関数がある場合はそれを選択し、関数詳細画面で設定します。
VPC
VPC内にLambdaを配置すると、VPC内のサービスへの接続はとても簡単ですが、インターネットに疎通させようとした時に、外に出られないので、ちょっと設定が必要です。 VPC、サブネット、Natの割当
▶ 参考 Qiita 記事
サブネットはプライベートサブネットを指定する
Elasticsearchを起動
※ ここはVPC内に配置しない場合は、パブリック・アクセスにし、アクセスポリシーを設定します。VPC内に配置する際は、同一VPC内からのみアクセスできなくなるので、アクセスポリシーは特に設定しなくてもいいかと思います。
手順に沿って設定していきますが、VPCのところで、Lambdaに設定したVPCやサブネット、セキュリティグループを指定します。
アクセスポリシーを「1つ以上のAWSアカウントまたはIAMユーザーにアクセス許可…」を選択し、
ARNに先程作成したロールのARNを指定する
VPC内か外かで、上記どちらかを設定
これで起動します。
※Elasticsearchの起動時の設定詳細はこちらを参考に
▶ 参考 classmethod記事
まとめ
本来は同一vpc内に配置すべきかとは思いますが、ラーニングコスト面等を考え、外に出し、iam認証の設定をしました。 lambda関数で、elasticsearchへの接続し、index作成とデータの取得については、別の記事で記載しようと思います。
株式会社UKAI 代表取締役CEO。建築を専攻していたが、新卒でYahoo!Japanにエンジニアとして入社。その後、転職、脱サラ、フリーランスエンジニアを経て、田舎へ移住し、ゲストハウスの開業、法人成り。ゲストハウス2軒、焼肉店、カフェ、食品製造業を運営しています。詳細はこちらから