はじめに
New Relic では、AWS 環境からのログ連携を実行するための Lambda 関数として、以下2つのアプリケーションをご提供しています。
- CloudWatch ロググループからのログ転送をサポートする aws-log-ingestion
- S3 バケットからのログ転送をサポートする aws-log-ingestion-s3
上記の2アプリケーションのランタイムは Python 3.11 でした。現在、多くの環境で利用されている Python 3.11 ですが、AWS のサポートポリシーに基づき、将来的なセキュリティパッチの提供終了を見据えた最新バージョンへの移行が推奨されています。これに合わせ、New Relic が提供するログ収集用 Lambda 関数も Python 3.12 への対応を完了しました。
本記事では、既存の New Relic ログ転送環境を安全に Python 3.12 へアップデートするための手順を解説します。
2つのアプリケーションの機能による区別
New Relic に AWS のログを転送する仕組みには、大きく分けて 2 つの Lambda 関数が存在します。まずは、ご自身の AWS 環境で動作している関数がどちら(あるいは両方)なのかを確認しましょう。
| 機能名 | 役割 | 主な利用ケース | 更新対象のリポジトリ/SAR名 |
|---|---|---|---|
| log-ingestion | CloudWatch Logs から直接転送 | Lambda 関数の実行ログや、各種 AWS サービスの標準ログを転送している場合。 | NewRelic-log-ingestion |
| log-ingestion-s3 | S3 バケット から転送 | ALB のアクセスログ、VPC フローログ、CloudTrail など一度 S3 に保存されるログを転送している場合。 | NewRelic-log-ingestion-s3 |
Check Point: AWS コンソールの Lambda 一覧画面で newrelic-log-ingestion-[ランダム文字列] または NewRelic-s3-log-ingestion という名前の関数を確認し、これらが「ランタイム: Python 3.11」となっている場合、本ガイドの手順で更新が必要です。本ガイドでは、最も一般的と考えられる Serverless Application Repository を利用した更新手順をご案内します。
log-ingestion (CloudWatch Logs 用) の更新手順
Serverless Application Repository を利用して log-ingestion をインストールしている場合には、この項目の手順を実行します。log-ingestion が Serverless Application Repository を経由してインストールされているかの判断には、リージョン内の CloudFormation スタックをご確認いただき、"serverlessrepo" から始まる CloudFormation スタックを探していただくことで判断することが可能です。デフォルトの状態では serverlessrepo-NewRelic-log-ingestion という名前の CloudFormation スタックが作成されます。
マネージメントコンソール経由での更新
- AWS のマネージメントコンソールを経由して log-ingestion を更新するためには、まず Serverless Application Repository のマネージメントコンソールに遷移します。
- 左ペインから available applications を選択します。
- Public Application のタブを選択し、検索ボックスに "newrelic" と入力、"Show apps that create custom IAM roles or resource policies" のチェックボックスをチェックします。現れた選択肢から、"NewRelic-log-ingestion" を選択します
- 遷移した画面で、Application name(CloudFormation スタック名から serverlessrepo を削除)、FunctionRole、NRLicenseKey を CloudFormation スタックに設定されたものと同一のものを入力します
- Deploy ボタンを押し、変更セットの作成と実行が完了したら更新完了です。
コマンドを利用した更新
本項目の手順では、アップデートに AWS CLI を利用しますが、Serverless Application 作成時に指定したパラメータ(スタックパラメータに指定した内容)により、更新に利用するコマンドに違いが生じます。Serverless Application 作成時に FunctionRole パラメータが指定されたかどうかは、CloudFormation スタックの Parameters の項目を確認し、FunctionRole が空欄であるかどうかをご確認ください。
FunctionRole を指定しない場合のコマンドは以下です。
aws serverlessrepo create-cloud-formation-change-set \
--application-id arn:aws:serverlessrepo:us-east-1:463657938898:applications/NewRelic-log-ingestion \
--stack-name <スタック名から "serverlessrepo-" を削除したもの> \
--capabilities CAPABILITY_RESOURCE_POLICY CAPABILITY_IAM \
--parameter-overrides Name=NRLicenseKey,Value=<New Relic ライセンスキー> \
--region <AWS リージョン>
続いて、FunctionRole を作成時に指定した場合のコマンドは以下です。--parameters オプションに FunctionRole に関する値が入力されている点にご注意ください。
aws serverlessrepo create-cloud-formation-change-set \
--application-id arn:aws:serverlessrepo:us-east-1:463657938898:applications/NewRelic-log-ingestion \
--stack-name <スタック名から "serverlessrepo-" を削除したもの> \
--capabilities CAPABILITY_RESOURCE_POLICY CAPABILITY_IAM \
--parameter-overrides Name=NRLicenseKey,Value=<New Relic ライセンスキー> Name=FunctionRole,Value=<FunctionRole で指定した値> \
--region <AWS リージョン>
上記により、CloudFormation スタックに変更セット(Change Set)が作成されます。コマンドの出力例は以下のような形になります。
{
"ApplicationId": "arn:aws:serverlessrepo:us-east-1:463657938898:applications/NewRelic-log-ingestion",
"ChangeSetId": "<Change Set の ARN>",
"SemanticVersion": "2.10.0",
"StackId": "<CloudFormation スタックの ARN>"
}
次に作成された変更セットを実行します。変更セットの実行のためには、以下2通りの方法があります。
- CloudFormation マネージメントコンソールから該当する CloudFormation スタックの詳細画面を表示し、Change Sets の項目から作成された変更セットを実行する
- AWS CLI で以下のコマンドを実行する
aws cloudformation execute-change-set --change-set-name <上記のコマンド出力中 ChangeSetId の値> --region <AWS リージョン>
変更セットの実行状況が EXECUTE_COMPLETE になれば更新は完了です。
log-ingestion-s3 (S3 用) の更新手順
続いて、本項目では log-ingestion-s3 の更新手順を示します。
マネージメントコンソール経由での更新
マネージメントコンソール経由での更新手順は、ほぼ log-ingestion の場合と同様です。
- AWS のマネージメントコンソールを経由して log-ingestion-s3 を更新するためには、まず Serverless Application Repository のマネージメントコンソールに遷移します。
- 左ペインから available applications を選択します。
- Public Application のタブを選択し、検索ボックスに "newrelic" と入力、"Show apps that create custom IAM roles or resource policies" のチェックボックスをチェックします。現れた選択肢から、"NewRelic-log-ingestion-s3" を選択します
- 遷移した画面で、Application name(CloudFormation スタック名から serverlessrepo を削除)、FunctionRole、NRLicenseKey を CloudFormation スタックに設定されたものと同一のものを入力します
- Deploy ボタンを押し、変更セットの作成と実行が完了したら更新完了です。
コマンドを利用した更新
コマンドでの更新手順も概ね log-ingestion の場合と同様となりますが、実行するコマンドの --application-id オプションが異なる点にご注意ください。
aws serverlessrepo create-cloud-formation-change-set \
--application-id arn:aws:serverlessrepo:us-west-2:533243300146:applications/NewRelic-log-ingestion-s3 \
--stack-name <スタック名から "serverlessrepo-" を削除したもの> \
--capabilities CAPABILITY_RESOURCE_POLICY CAPABILITY_IAM \
--parameter-overrides Name=NRLicenseKey,Value=<New Relic ライセンスキー> \
--region <AWS リージョン>
上記により、CloudFormation スタックに変更セット(Change Set)が作成されます。コマンドの出力例は以下のような形になります。
{
"ApplicationId": "arn:aws:serverlessrepo:us-west-2:533243300146:applications/NewRelic-log-ingestion-s3",
"ChangeSetId": "<Change Set の ARN>",
"SemanticVersion": "1.3.0",
"StackId": "<CloudFormation スタックの ARN>"
}
次に作成された変更セットを実行します。変更セットの実行のためには、以下2通りの方法があります。
- CloudFormation マネージメントコンソールから該当する CloudFormation スタックの詳細画面を表示し、Change Sets の項目から作成された変更セットを実行する
- AWS CLI で以下のコマンドを実行する
aws cloudformation execute-change-set --change-set-name <上記のコマンド出力中 ChangeSetId の値> --region <AWS リージョン>
本ブログに掲載されている見解は著者に所属するものであり、必ずしも New Relic 株式会社の公式見解であるわけではありません。また、本ブログには、外部サイトにアクセスするリンクが含まれる場合があります。それらリンク先の内容について、New Relic がいかなる保証も提供することはありません。