はじめに
NewRelicはITシステムのモニタリングツールで、ログの監視や分析で使用する用途がありました。クラウドサービスとログ連携も当然サポートしています。
今回AWSの大阪リージョンのCloudWatch Logsのログを連携する時に、少し苦労したのでメモを残しておきます。
ハマったこと
大阪リージョンでは、Serverless Application Repositoryに対応していないため、ログ連携するためのアプリケーションを、AWSのコンソールからウィザードで導入できませんでした。東京リージョンでは、下記のようにサーバーレスアプリケーションから選択することでウィザード画面へ遷移できます。
大阪リージョンでは、アプリケーションの作成ボタンがありません。
これは、Serverless Application Repositoryが大阪リージョンをサポートしていないためです。マイナーなリージョンを利用した場合によくあることなのかなと思いました。
行ったこと
Githubに記載されていたインストラクションに従って、マニュアルでインストールを行いました。
Manual DeploymentのSAMの手順を参考にしました。
SAMをビルドするための、EC2インスタンスをたてる
Gitのソースから、自分でアプリケーションをビルドし、Serverless Applicatonとして登録することになります。その操作用のEC2を用意します。
EC2にアタッチする下表のロールを作成します。今回は一時的なので、大雑把に権限設定します。
ロール | 目的 |
---|---|
AmazonSSMManagedInstanceCore | マネジメントコンソールからEC2に接続するため |
AmazonS3FullAccess | ビルドされたコードを格納するS3バケットを作成するため |
AWSCloudFormationFullAccess | CFn操作のため |
AWSLambda_FullAccess | Lambdaアプリケーションをデプロイするため |
IAMFullAccess | Lambda用のロール作成のため |
sh-5.2$ bash
[ssm-user@ip-172-31-35-168 bin]$ cd ~
[ssm-user@ip-172-31-35-168 ~]$
SAM Cli、Docker、gitをインストール
EC2にSAM Cliをインストールします。
curl -LO https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-x86_64.zip
unzip aws-sam-cli-linux-x86_64.zip -d sam-installation
sudo ./sam-installation/install
[ssm-user@ip-172-31-35-168 ~]$ sam --version
SAM CLI, version 1.131.0
DockerはSAMのビルド時に必要となるため、こちらの記事を参考にインストールしました。
$USERのところは、ssm-userにしました。
sudo usermod -aG docker ssm-user
続いて、Gitをインストールします。
sudo yum install -y git
ようやく、SAMの手順を実行できる準備が整いました。
SAMのビルドとデプロイ
手順にしたがってコマンドを入力していきます。
git clone https://github.com/newrelic/aws-log-ingestion.git
cd aws-log-ingestion/
sam build -u --parameter-overrides 'ParameterKey=NRLicenseKey,ParameterValue=your-license-key-here'
つづいて、デプロイをガイドありモードで実行します。
sam deploy --guided
デプロイのガイドでは、Stack名やリージョンを聞かれますので、入力していきます。
NRLicenseKeyには、NewRelicのログ取り込み用のAPIキーの値を入力します。
ほとんどはデフォルトでOKでした。
Stack Name [sam-app]: newrelic-log-ingestion
AWS Region [us-east-1]: ap-northeast-3
Parameter NRLicenseKey:
Parameter NRLoggingEnabled [True]:
Parameter NRInfraLogging [True]:
Parameter MemorySize [128]:
Parameter Timeout [30]:
Parameter FunctionRole []:
Parameter LogIngestionFunctionArnExportName [LogIngestionFunctionArn]:
Parameter PermissionsBoundary []:
Parameter DebugLoggingEnabled [false]:
#Shows you resources changes to be deployed and require a 'Y' to initiate deploy
Confirm changes before deploy [y/N]:
#SAM needs permission to be able to create roles to connect to the resources in your template
Allow SAM CLI IAM role creation [Y/n]:
#Preserves the state of previously provisioned resources when an operation fails
Disable rollback [y/N]:
Save arguments to configuration file [Y/n]:
SAM configuration file [samconfig.toml]:
SAM configuration environment [default]: test
デプロイ処理が成功したことを確認します。
Successfully created/updated stack - newrelic-log-ingestion in ap-northeast-3
大阪リージョンに、ログ連携用のアプリケーションが登録されました。
あとは、NewRelicの公式のドキュメントにしたがって、Lambda関数のトリガーに、ログ転送したいCloudWatch Logsのロググループを指定するだけでログ連携が開始されます。
ビルドに使用したEC2は削除可能です。削除後も登録されたアプリケーションは利用できます。
まとめ
SAMを使用してアプリケーションを直接登録することで、大阪リージョンでもCloudWatch LogsとNewRelicをログ連携するためのアプリケーションを利用できました。SAMについては、まだよくわかっていないことが多いので、あとで調べてみたいと思います。