- はじめに
- エージェント
- インテグレーション
- Watchdog
- イベント
- ダッシュボード
- モバイルアプリケーション
- インフラストラクチャー
- サーバーレス
- メトリクス
- ノートブック
- アラート設定
- APM & Continuous Profiler
- CI Visibility
- RUM & セッションリプレイ
- データベース モニタリング
- ログ管理
- セキュリティプラットフォーム
- Synthetic モニタリング
- ネットワークモニタリング
- 開発者
- API
- アカウントの管理
- データセキュリティ
- ヘルプ
Datadog では、AWS SAM をご利用のお客様のサーバーレスアプリケーションのデプロイに、サーバーレスの CloudFormation マクロをおすすめしています。
以下を行うことで、サーバーレスアプリケーションからのメトリクス、トレース、ログの収集をマクロで自動的に構成できます。
AWS アカウントでマクロを使用可能にするには、Datadog のテンプレートで CloudFormation スタックをデプロイします。このデプロイには、CloudFormation マクロリソースと、マクロを実行したときに呼び出される Lambda 関数が含まれます。このスタックを有効にすると、同じアカウントにデプロイされた他の CloudFormation スタックにマクロを使用できるようになります。アカウントのマクロ定義に関する詳細は、CloudFormation ドキュメントページを参照してください。
初めてインストールする場合は、以下のようにデプロイします。
aws cloudformation create-stack \
--stack-name datadog-serverless-macro \
--template-url https://datadog-cloudformation-template.s3.amazonaws.com/aws/serverless-macro/latest.yml \
--capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_IAM
新しいリリース後にマクロを更新する場合は、同じパラメータを使い update-stack
メソッドを使用します。また、最新の リリース からマクロのバージョンを指定することもできます。それには、latest.yml
をリリースバージョンに置き換えます(例、0.1.2.yml
)。
aws cloudformation update-stack \
--stack-name datadog-serverless-macro \
--template-url https://datadog-cloudformation-template.s3.amazonaws.com/aws/serverless-macro/latest.yml \
--capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_IAM
注: マクロは、AWS アカウントのリージョンに 1 回デプロイするだけで、同じリージョンにデプロイされたすべての CloudFormation スタックに使用できます。
SAM を使用してサーバーレスアプリケーションをデプロイするには、必要な SAM 変換の後に Datadog Serverless CloudFormation マクロを template.yml
ファイルの Transform
セクションに追加します。
Transform:
- AWS::Serverless-2016-10-31
- Name: DatadogServerless
Parameters:
stackName: !Ref "AWS::StackName"
apiKey: "<DATADOG_API_KEY>"
pythonLayerVersion: "<LAYER_VERSION>" # Node.js には nodeLayerVersion を使用
extensionLayerVersion: "<LAYER_VERSION>"
service: "<SERVICE>" # オプション
env: "<ENV>" # オプション
# その他のパラメーターについては、コンフィギュレーションセクションを参照
注: マクロをインストールしたときに、提供された template.yml
ファイルを変更しないと、アカウントに定義されたマクロ名は DatadogServerless
になります。オリジナルのテンプレートを変更する場合は、個々に追加する変換の名前が AWS::CloudFormation::Macro
リソースの Name
プロパティと一致するようにしてください。
プラグインをさらに構成するには、以下のカスタムパラメーターを使用します。
パラメーター | 説明 |
---|---|
addLayers | Lambda レイヤーを追加またはユーザーが独自のレイヤーを使用。デフォルトは true。「true」の場合、Lambda ライブラリのバージョン変数も必要になります。「false」の場合は、関数のデプロイメントパッケージに Datadog Lambda ライブラリを含める必要があります。 |
pythonLayerVersion | インストールする Python Lambda レイヤーのバージョン(例: “21”)。Python で記述された Lambda 関数を 1 つ以上デプロイする場合で、addLayers が「true」のときは必須。最新バージョンの数字は、https://github.com/DataDog/datadog-lambda-python/releases で確認できます。 |
nodeLayerVersion | インストールする Node.js Lambda レイヤーのバージョン(例: “29”)。Node.js で記述された Lambda 関数を 1 つ以上デプロイする場合で、addLayers が「true」のときは必須。最新バージョンの数字は、https://github.com/DataDog/datadog-lambda-js/releases で確認できます。 |
extensionLayerVersion | 5 など、インストールする Datadog Lambda Extension レイヤーのバージョン。extensionLayerVersion が設定されている場合は、apiKey (または apiKMSKey ) の設定も必要となります。extensionLayerVersion を使用する場合は、forwarderArn を設定しないでください。Lambda Extension の詳細はこちら。 |
forwarderArn | 設定すると、プラグインにより関数のロググループが自動的に Datadog Forwarder にサブスクライブされます。または、AWS::Logs::SubscriptionFilter リソースを使用してログサブスクリプションを定義できます。注: ロググループおよびサブスクリプションフィルターの作成にはマクロに関数名が必要なため、初めてデプロイされる関数には ‘FunctionName’ プロパティが定義されている必要があります。‘FunctionName’ に、!Sub などの CloudFormation 関数を含めることはできません。 |
stackName | デプロイする CloudFormation スタックの名前。forwarderArn が提供されていて、Lambda 関数が動的に命名されている (FunctionName プロパティが Lambda に提供されていない) 場合のみ必須。このパラメーターを SAM および CDK に追加する方法については、以下の例を参照してください。 |
flushMetricsToLogs | Datadog Forwarder Lambda 関数を使用して、ログ経由でカスタムメトリクスを送信します (推奨)。デフォルトは true 。false に設定した場合、Datadog API キーを apiKey または apiKMSKey を使用して定義する必要があります。 |
site | データを送信する Datadog サイトを設定します。flushMetricsToLogs が false の場合にのみ必要です。可能な値は、datadoghq.com 、datadoghq.eu 、us3.datadoghq.com 、ddog-gov.com です。デフォルトは datadoghq.com です。 |
apiKey | Datadog API キー。flushMetricsToLogs が false の場合のみ必要。 |
apiKMSKey | KMS を使用して暗号化された Datadog API キー。flushMetricsToLogs が「false」で、KMS 暗号化を使用している場合、apiKey の代わりにこのパラメーターを使用します。 |
enableEnhancedMetrics | Lambda 関数の拡張メトリクスを有効にします。デフォルトは true 。Datadog Forwarder Lambda 関数が関数ロググループにサブスクライブする必要があります。 |
enableXrayTracing | Lambda 関数のトレースを有効にします。デフォルトは「false」。 |
enableDDTracing | dd-trace、Datadog の APM ライブラリを使用して Lambda 関数のトレースを有効にします。デフォルトは true 。Datadog Forwarder Lambda 関数が関数ロググループにサブスクライブする必要があります。 |
enableDDLogs | Lambda 関数の Datadog ログ収集を有効にします。注: この設定は、Datadog Forwarder を介して送信されるログには影響しません。デフォルトは true です。 |
service | 設定すると、マクロにより service タグがすべての Lambda 関数に、提供された値とともに追加されます。 |
env | 設定すると、マクロにより env タグがすべての Lambda 関数に、提供された値とともに追加されます。 |
logLevel | ログのレベルを設定します。拡張ロギングの場合 DEBUG に設定します。 |
このマクロにより CloudFormation テンプレートが変更され、Node.js および Python 用の Lambda レイヤーを関数にアタッチすることで Datadog Lambda ライブラリがインストールされます。そして、コードの変更を必要とせずに、Lambda ライブラリを初期化する置換ハンドラーへリダイレクトされます。
デバッグの問題が発生した場合は、CloudWatch ログでマクロ Lambda 関数を確認することができます。CloudWatch ログへのアクセス方法:
datadog-serverless-macro
となります) を検索しますMacroFunctionLogGroup
のCloudWatch ロググループを見つけますこのエラーは、forwarderArn
を提供し、Lambda 関数を初めてデプロイする場合に発生します。ロググループが存在せず、マクロはこのロググループの作成または Forwarder へのサブスクライブができません。この問題を修正する一つの方法は、Lambda で FunctionName
プロパティを明示的に定義することです(下記の例を参照)。
Resources:
MyLambda:
Type: AWS::Serverless::Function
Properties:
Handler: index.handler
Runtime: nodejs12.x
FunctionName: MyFunctionName # このプロパティを Lambda に追加します
FunctionName
を明示的に定義できない(または定義しない)場合は、SAM テンプレートまたは CDK ソースコードから forwarderArn
パラメーターを削除し、以下のように AWS::Logs::SubscriptionFilter リソースを使用してサブスクリプションフィルターを定義します。
Resources:
MyLogSubscriptionFilter:
Type: "AWS::Logs::SubscriptionFilter"
Properties:
DestinationArn: "<DATADOG_FORWARDER_ARN>"
LogGroupName: "<CLOUDWATCH_LOG_GROUP_NAME>"
FilterPattern: ""
FunctionName
に、!Sub
などの CloudFormation 関数が含まれる場合、forwarderArn
オプションは機能しません。この場合、マクロは実際の関数名にアクセスできません(CloudFormation は変換後に関数を実行します)。そのため、関数にロググループやサブスクリプションフィルターを作成できません。
SAM テンプレートまたは CDK ソースコードから forwarderArn
パラメーターを削除し、以下のように AWS::Logs::SubscriptionFilter リソースを使用してサブスクリプションフィルターを定義します。
Resources:
MyLogSubscriptionFilter:
Type: "AWS::Logs::SubscriptionFilter"
Properties:
DestinationArn: "<DATADOG_FORWARDER_ARN>"
LogGroupName: "<CLOUDWATCH_LOG_GROUP_NAME>"
FilterPattern: ""
製品のフィードバックや質問については、Slack の Datadog コミュニティの #serverless
チャンネルに参加してください。