

サポート終了通知: 2027 年 3 月 31 日、 AWS は Amazon WorkMail のサポートを終了します。2027 年 3 月 31 日以降、Amazon WorkMail コンソールまたは Amazon WorkMail リソースにアクセスできなくなります。詳細については、[Amazon WorkMail のサポート終了](https://docs.aws.amazon.com/workmail/latest/adminguide/workmail-end-of-support.html)」を参照してください。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# カスタムアベイラビリティプロバイダー Lambda 関数の構築
<a name="building_cap"></a>

カスタムアベイラビリティプロバイダー (CAP) は、明確に定義された JSON スキーマで記述された JSON ベースのリクエスト/レスポンスプロトコルで設定されます。Lambda 関数はリクエストを解析し、有効なレスポンスを返します。

**Topics**
+ [リクエストとレスポンスの要素](#cap_request_response_elements)
+ [アクセス権の付与](#granting_access)
+ [CAP Lambda 関数を使用する Amazon WorkMail の例](#cap_example_github)

## リクエストとレスポンスの要素
<a name="cap_request_response_elements"></a>

### リクエストの要素
<a name="cap_request"></a>

Amazon WorkMail ユーザーの CAP 設定に使用されるリクエストの例を以下に示します。

```
{
    "requester": {
        "email": "user1@internal.example.com",
        "userName": "user1",
        "organization": "m-0123456789abcdef0123456789abcdef",
        "userId": "S-1-5-18",
        "origin": "127.0.0.1"
    },
    "mailboxes": [
        "user2@external.example.com",
        "unknown@internal.example.com"
    ],
    "window": {
        "startDate": "2021-05-04T00:00:00.000Z",
        "endDate": "2021-05-06T00:00:00.000Z"
    }
}
```

リクエストは、**リクエスタ**、**メールボックス**、**ウィンドウ**の 3 つのセクションで構成されています。これらについては、本ガイドの次の[リクエスタ](#cap_request_requester)、[メールボックス](#cap_request_mailboxes)、[Window](#cap_request_window)の各セクションで説明しています。

#### リクエスタ
<a name="cap_request_requester"></a>

*リクエスタセクション*、Amazon WorkMail に最初のリクエストを行ったユーザーに関する情報が表示されます。CAP はこの情報を使用してプロバイダーの行動を変更します。たとえば、このデータを使用してバックエンドのアベイラビリティプロバイダーの同じユーザーになりすましたり、特定の詳細を応答から省略したりできます。


| フィールド | 説明 | 必須 | 
| --- | --- | --- | 
| `Email` | リクエスタのメインメールアドレス。 | はい | 
| `Username` | リクエスタのユーザー名。 | はい | 
| `Organization` | リクエスタの組織 ID。 | はい | 
| `UserID` | リクエスタ ID。 | はい | 
| `Origin` | リクエスタの リモートアドレス。 | いいえ | 
| `Bearer` | 将来の利用のために予約されています。 | いいえ | 

#### メールボックス
<a name="cap_request_mailboxes"></a>

*メールボックスセクション*には、空き状況情報を要求するユーザーの電子メールアドレスのコンマ区切りリストが含まれます。

#### Window
<a name="cap_request_window"></a>

*ウィンドウセクション*には、可用性情報を要求する時間枠が含まれます。`startDate`、`endDate`とも UTC で指定され、[RFC 3339](https://www.rfc-editor.org/rfc/rfc3339) に従ってフォーマットされています。イベントが切り捨てられることは想定されていません。つまり、定義したイベントより前に開始されたイベントは`StartDate`、元の開始位置が使用されます。

### レスポンス要素
<a name="cap_response"></a>

Amazon WorkMail は CAP Lambda 関数から応答を受け取るまで 25 秒間待機します。25 秒後、Amazon WorkMail は関数が失敗したとみなし、EWS の GetUserAvailability レスポンスで関連するメールボックスの障害を生成します。これによって GetUserAvailability オペレーション全体が失敗するわけではありません。

以下は、このセクションの冒頭で定義した構成からの応答例です。

```
{
    "mailboxes": [{
        "mailbox": "user2@external.example.com",
        "events": [{
            "startTime": "2021-05-03T23:00:00.000Z",
            "endTime": "2021-05-04T03:00:00.000Z",
            "busyType": "BUSY"|"FREE"|"TENTATIVE",
            "details": {  // optional
                "subject": "Late meeting",
                "location": "Chime",
                "instanceType": "SINGLE_INSTANCE"|"RECURRING_INSTANCE"|"EXCEPTION",
                "isMeeting": true,
                "isReminderSet": true,
                "isPrivate": false
            }
        }],
        "workingHours": {
            "timezone": {
                "name": "W. Europe Standard Time"
                "bias": 60,
                "standardTime": {  // optional (not needed for fixed offsets)
                    "offset": 60,
                    "time": "02:00:00",
                    "month": "JAN"|"FEB"|"MAR"|"APR"|"JUN"|"JUL"|"AUG"|"SEP"|"OCT"|"NOV"|"DEC",
                    "week": "FIRST"|"SECOND"|"THIRD"|"FOURTH"|"LAST",
                    "dayOfWeek": "SUN"|"MON"|"TUE"|"WED"|"THU"|"FRI"|"SAT"
                },
                "daylightTime": {  // optional (not needed for fixed offsets)
                    "offset": 0,
                    "time": "03:00:00",
                    "month": "JAN"|"FEB"|"MAR"|"APR"|"JUN"|"JUL"|"AUG"|"SEP"|"OCT"|"NOV"|"DEC",
                    "week": "FIRST"|"SECOND"|"THIRD"|"FOURTH"|"LAST",
                    "dayOfWeek": "SUN"|"MON"|"TUE"|"WED"|"THU"|"FRI"|"SAT"
                },                
            },
            "workingPeriods":[{
                "startMinutes": 480,
                "endMinutes": 1040,
                "days": ["SUN"|"MON"|"TUE"|"WED"|"THU"|"FRI"|"SAT"]
            }]
        }
    },{
        "mailbox": "unknown@internal.example.com",
        "error": "MailboxNotFound"
    }]
}
```

レスポンスは、*メールボックス*のリストで構成される 1 つのメールボックスセクションで構成されます。可用性が正常に取得された各メールボックスは、「*メールボックス*」、「*イベント*」、「稼働時間」の 3 つのセクションで構成されています。アベイラビリティプロバイダーがメールボックスの空き時間情報を取得できなかった場合、セクションは*メールボックス*と*エラー*の 2 つのセクションで構成されます。これらについては、本ガイドの次の[メールボックス](#cap_response_mailbox)、[イベント](#cap_response_events)、[稼働時間](#cap_response_workinghours)、[Timezone](#cap_response_timezone)、[作業期間](#cap_response_workingperiods)、[エラー](#cap_response_error)の各セクションで説明しています。

#### メールボックス
<a name="cap_response_mailbox"></a>

*メールボックス*セクションは、リクエストの*メールボックス*セクションにあるユーザーのメールアドレスです。

#### イベント
<a name="cap_response_events"></a>

*イベントセクション*は、リクエストされたウィンドウで発生するイベントのリストです。各イベントは、次のパラメータで定義されます。


| フィールド | 説明 | 必須 | 
| --- | --- | --- | 
| `startTime` | イベントの開始時刻は UTC で、[RFC 3339](https://www.rfc-editor.org/rfc/rfc3339) に従ってフォーマットされています。 | はい | 
| `endTime` | イベントの終了時刻は UTC で、[RFC 3339](https://www.rfc-editor.org/rfc/rfc3339) に従ってフォーマットされています。 | はい | 
| `busyType` | イベントのビジータイプ。`Busy`、`Free`、または `Tentative` のいずれかを設定できます。 | はい | 
| `details` | イベントの詳細 | いいえ | 
| `details.subject` | イベントの件名 | はい | 
| `details.location` | イベントの場所。 | はい | 
| `details.instanceType` | イベントのインスタンスタイプ。`Single_Instance`、`Recurring_Instance`、または `Exception` のいずれかを設定できます。 | はい | 
| `details.isMeeting` | イベントに出席者がいるかどうかを示すブール値。 | はい | 
| `details.isReminderSet` | イベントにリマインダーが設定されているかどうかを示すブール値。 | はい | 
| `details.isPrivate` | イベントが非公開に設定されているかどうかを示すブール値。 | はい | 

#### 稼働時間
<a name="cap_response_workinghours"></a>

*WorkingHours セクションには、メールボックス所有者の勤務時間に関する情報が含まれています*。*これには、*タイムゾーンと稼働期間の* 2 つのセクションがあります。*

#### Timezone
<a name="cap_response_timezone"></a>

*タイムゾーン* サブセクションには、メールボックス所有者のタイムゾーンが記述されています。リクエスタが別のタイムゾーンで働いている場合は、ユーザーの勤務時間を正しく表示することが重要です。アベイラビリティプロバイダーは、名前を使用するのではなく、タイムゾーンを明示的に記述する必要があります。標準化されたタイムゾーンの説明を使用すると、タイムゾーンの不一致を防ぐことができます。


| フィールド | 説明 | 必須 | 
| --- | --- | --- | 
| `name` | タイムゾーンの名前。 | はい | 
| `bias` | GMT からのデフォルトオフセット (単位：分)。 | はい | 
| `standardTime` | 指定されたタイムゾーンの標準時間の開始。 | いいえ | 
| `daylightTime` | 指定したタイムゾーンの夏時間の開始。 | いいえ | 

との両方を定義するか`daylightTime`、`standardTime`両方を省略する必要があります。`standardTime`and `daylightTime` オブジェクトのフィールドは以下のとおりです。


| フィールド | 説明 | 許可された値 | 
| --- | --- | --- | 
| `offset` | デフォルトオフセットを基準にしたオフセット (単位：分)。 | NA | 
| `time` | 標準時間と夏時間の切り替えが行われる時刻。`hh:mm:ss`として指定します。 | NA | 
| `month` | 標準時間と夏時間の切り替えが行われる月。 | `JAN`,`FEB`, `MAR`, `APR`, `JUN`, `JUL`, `AUG`, `SEP`, `OCT`, `NOV`, `DEC` | 
| `week` | 指定した月のうち、標準時間と夏時間の切り替えが行われる週。 | `FIRST`, `SECOND`, `THIRD`, `FOURTH`, `LAST` | 
| `dayOfWeek` | 指定した週のうち、標準時間と夏時間の切り替えが行われる日。 | `SUN`, `MON`, `TUE`, `WED`, `THU`, `FRI`, `SAT` | 

#### 作業期間
<a name="cap_response_workingperiods"></a>

*WorkingPeriods*セクションには、1つ以上の作業期間オブジェクトが含まれています。各期間は、1 日以上の稼働日の開始と終了を定義します。


| フィールド | 説明 | 許可された値 | 
| --- | --- | --- | 
| `startMinutes` | 1 日の開始時刻を午前 0 時から分単位で表したものです。 | NA | 
| `endMinutes` | 1 日の終了時間を午前 0 時からの分単位で表したものです。 | NA | 
| `days` | この期間が適用される日。 | `SUN`, `MON`, `TUE`, `WED`, `THU`, `FRI`, `SAT` | 

#### エラー
<a name="cap_response_error"></a>

*エラー* フィールドには任意のエラーメッセージを格納できます。次の表は、既知のコードと EWS エラーコードのマッピングを示しています。その他のメッセージはすべてにマップされます。`ERROR_FREE_BUSY_GENERATION_FAILED`


| 値 | EWS エラーコード | 
| --- | --- | 
| `MailboxNotFound` | `ERROR_MAIL_RECIPIENT_NOT_FOUND` | 
| `ErrorAvailabilityConfigNotFound` | `ERROR_AVAILABILITY_CONFIG_NOT_FOUND` | 
| `ErrorServerBusy` | `ERROR_SERVER_BUSY` | 
| `ErrorTimeoutExpired` | `ERROR_TIMEOUT_EXPIRED` | 
| `ErrorFreeBusyGenerationFailed` | `ERROR_FREE_BUSY_GENERATION_FAILED` | 
| `ErrorResponseSchemaValidation` | `ERROR_RESPONSE_SCHEMA_VALIDATION` | 

## アクセス権の付与
<a name="granting_access"></a>

 AWS Command Line Interface () から次の Lambda コマンドを実行しますAWS CLI。このコマンドは、CAP を解析する Lambda 関数にリソースポリシーを追加します。この関数により、Amazon WorkMail アベイラビリティサービスが Lambda 関数を呼び出すことができます。

```
aws lambda add-permission \
    --region {{LAMBDA_REGION}} \
    --function-name {{CAP_FUNCTION_NAME}} \
    --statement-id AllowWorkMail \
    --action "lambda:InvokeFunction" \
    --principal availability.workmail.{{WM_REGION}}.amazonaws.com \
    --source-account {{WM_ACCOUNT_ID}} \
    --source-arn arn:aws:workmail:{{WM_REGION}}:{{WM_ACCOUNT_ID}}:organization/{{ORGANIZATION_ID}}
```

コマンドでは、以下のパラメータを指定された場所に追加します。
+ {{LAMBDA\_REGION — CAP Lambda}} がデプロイされているリージョンの名前。例えば、`us-east-1`。
+ {{CAP\_FUNCTION\_NAME}} — CAP Lambda 関数の名前。
**注記**  
これには、CAP Lambda 関数の名前、エイリアス、ARN の一部または全部を使用できます。
+ {{WM\_REGION — Amazon WorkMail}} 組織が Lambda 関数を呼び出すリージョンの名前。
**注記**  
CAP で使用できるのは次のリージョンのみです。  
米国東部 (バージニア北部)
米国西部 (オレゴン)
欧州 (アイルランド)
+ {{WM\_ACCOUNT\_ID}} — 組織アカウントの ID。
+ {{ORGANIZATION\_ID}} — CAP Lambda を呼び出す組織の ID。Org ID: m-934ebb9eb57145d0a6cab566ca81a21fなど

**注記**  
{{LAMBDA\_REGION}} と {{WM\_REGION}} は、クロスリージョン呼び出しが必要な場合にのみ異なります。クロスリージョン呼び出しが不要な場合も同様です。

## CAP Lambda 関数を使用する Amazon WorkMail の例
<a name="cap_example_github"></a>

Amazon WorkMail が CAP Lambda 関数を使用して EWS エンドポイントをクエリする例については、*Amazon WorkMail GitHub リポジトリ用の サーバーレスアプリケーション* にあるこの[AWS サンプルアプリケーション](https://github.com/aws-samples/amazon-workmail-lambda-templates/tree/master/workmail-cap-exchange)を参照してください。