S3バケットに保存したログを NewRelic へ転送する

# はじめに
S3に保存されるALBやCFtなどのアクセスログを NewRelic へ転送するための設定を行います。

# 設定
NewRelic が AWS Serverless Application Repository に　Lambdaアプリケーション を提供しているのでそれを利用します。
設定の流れとしては **[Lambdaアプリケーションのデプロイ](https://qiita.com/drafts/7eee1445b8fea7308c54/edit#aws-lambda%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4) > [Lambdaトリガーの追加](https://qiita.com/drafts/7eee1445b8fea7308c54/edit#aws-lambda-%E3%83%88%E3%83%AA%E3%82%AC%E3%83%BC%E3%81%AE%E8%BF%BD%E5%8A%A0)** になります。

## 事前作業
本作業を行う際に API ライセンスキーを利用します。
以下に記事書きましたのでよかったら参考にして発行しておいてください。

https://qiita.com/kooohei/items/00da439f280adc44cdca

## AWS Lambdaアプリケーションのデプロイ
- [AWS Serverless Application Repository](https://serverlessrepo.aws.amazon.com/applications)へアクセスします。

- 検索ボックスで **NewRelic-log-ingestion-s3** を入力し、 **Show apps that create custom IAM roles or resource policies** のチェックボックにチェックを入れます。
すると、**NewRelic-log-ingestion-s3** が表示されるのでそのリンクをクリックします。

![create01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/95a7a603-3a1b-29c4-6e55-8a86935e6917.png)

- **[ Deploy ]** をクリックします。

![create02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/a3c40ba9-af24-64b6-3938-c6831470999e.png)

- Lambdaアプリケーションのデプロイ画面が表示されるので、**API LicenseKey** を入力し、*"このアプリがカスタム IAM ロールを作成することを承認します。"* のチェックボックスにチェックを入れ、**[ デプロイ ]** をクリックします。

![create03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/8e75b770-352b-e868-4373-bff39f44538d.jpeg)

- **[ AWS Lambda > アプリケーション ]** で *"serverlessrepo-NewRelic-log-ingestion-s3"* のステータスが **Create complete** となればデプロイ完了です。

![create04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/5a56473a-04b1-4cbe-d5dd-46bdd9a37baa.png)


## AWS Lambda トリガーの追加
- **[ AWS Lambda > 関数 > NewRelic-s3-log-ingestion ]** で **[ + トリガーを追加 ]** をクリックします。

![create05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/aa5084d0-dd7f-8bc1-fed0-9d29d807957a.png)

- *"ソースを選択"* で **S3** を選び、*"Bucket"* で送信したいバケットを選択します。
また、*"I acknowledge that using the same S3 bucket for both input and output is not recommended and that this configuration can cause recursive invocations, increased Lambda usage, and increased costs."* というチェックボックスにチェックを入れます。
- **[ 追加 ]** をクリックします。

![create06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/cf0b51c2-2508-df37-b106-446f72a8168e.jpeg)

## 確認
- 先ほど **[ + トリガーを追加 ]** だった部分が **[ S3 ]** となります。

![create07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/e6836b5b-2c91-a983-dfe9-0b8afdab6de4.png)

また、**[ S3 ]** をクリックするとトリガー情報が確認できます。
**[ ▶️ 詳細 ]** を開くと詳細情報が確認できるため、ここに先ほど追加した設定内容が表示されます。

![create08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/99e34f2a-8886-ebdd-abfb-adda709bc19d.png)


# トリガーの追加と削除
他の S3 バケットに保存したログに対してはトリガーの追加/削除で対応ができます。
## 追加
- **[ トリガーを追加 ]** をクリックしてあとの手順は先ほどと同様です。

![add01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/416a12d0-de28-1c68-a7ec-6e06ca98139d.png)

## 削除
複数のログ送信が設定されている場合、特定のログ送信を停止する際に行う作業です。

- 対象トリガーのチェックボックスにチェックを入れます。
- **[ 削除 ]** をクリックします。

![delete01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/102ec384-02b2-682f-0d28-29d6d3bb16f2.png)

- **[ 削除 ]** をクリックします。

![delete02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/e6ded56e-12cd-6b5a-c2f5-e6604d9e7c88.png)

- **[ 閉じる ]** をクリックして完了です。

![delete03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/b0661fe8-cc40-84bd-f5b3-efaa10b4f220.png)


# AWS Lambdaアプリケーションの削除
送信設定したログを一括で停止したい際はLambdaアプリケーションを削除することで対応できます。

- **[ CloudFormation > スタック ]** から **serverlessrepo-NewRelic-log-ingestion-s3** をクリックします。

![delete01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/004b47c2-99a0-89ab-191a-035e35200ff7.png)

- **[ 削除 ]** をクリックします。

![delete02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/4708487c-89cd-9b4c-0994-afa57d2d1cfd.png)

- **[ 削除 ]** をクリックします。

![delete03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/42a16b6e-e67d-4958-cdc6-ad2f18039d14.png)


# おわりに
Lambdaアプリケーションをデプロイするだけで転送設定が行えるので便利です。
あとは必要なログだけを転送したり、保持期間を設定するなどのS3バケット側の管理は別途必要かなと感じました。

## その他の NewRelic に関する投稿
その他にも投稿記事があるので良かったら読んでいただけたら嬉しいです。

https://qiita.com/kooohei/items/00da439f280adc44cdca

https://qiita.com/kooohei/items/3e4b3a21cc727ed6ab94

https://qiita.com/kooohei/items/4644383ea85daf021625

### 参考
https://docs.newrelic.com/jp/docs/logs/forward-logs/aws-lambda-sending-logs-s3/

https://newrelic.com/jp/blog/how-to-relic/import-s3-log