

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

# Amazon Relational Database Service (Amazon RDS) での Infrastructure Composer の使用
<a name="using-composer-services-rds"></a>

AWS Infrastructure Composer は、Amazon Relational Database Service (Amazon RDS) との統合を備えています。Infrastructure Composer の **RDS Database (External)** 拡張コンポーネントカードを使用すると、アプリケーションを別の CloudFormation または AWS Serverless Application Model (AWS SAM) テンプレートで定義されている Amazon RDS DBクラスター、インスタンス、プロキシに接続できます。

**RDS データベース (外部)** 拡張コンポーネントカードは、別のテンプレートで定義されている Amazon RDS リソースを表します。これには、以下が含まれます。
+ 別のテンプレートで定義されている Amazon RDS DBクラスターまたはインスタンス
+ Amazon RDS DBプロキシ

**RDS データベース (外部)** 拡張コンポーネントカードは、 **リソース**パレットから入手できます。

![Amazon RDS データベース (外部) 拡張コンポーネントカード。](http://docs.aws.amazon.com/ja_jp/infrastructure-composer/latest/dg/images/aac_use_rds_01.png)


このカードを使用するには、Infrastructure Composer キャンバスにドラッグして設定し、他のリソースに接続します。

Lambda 関数を使用して、アプリケーションを外部の Amazon RDS DBクラスターまたはインスタンスに接続できます。

## 要件
<a name="using-composer-services-rds-requirements"></a>

この機能を使用するには、次の要件を満たす必要があります。

1. 外部の Amazon RDS DBクラスター、インスタンス、またはプロキシは、 を使用してユーザーパスワード AWS Secrets Manager を管理する必要があります。詳細については、[「Amazon RDS ユーザーガイド」の「Amazon RDS でのパスワード管理」および AWS Secrets Manager](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-secrets-manager.html)**「」を参照してください。

1. Infrastructure Composer のアプリケーションは、新しいプロジェクトであるか、Infrastructure Composer で最初に作成されたものである必要があります。

## 手順
<a name="using-composer-services-rds-connect"></a>

### ステップ 1: 外部 RDS データベースカードを設定する
<a name="using-composer-services-rds-connect-step1"></a>

**リソース**パレットから、**RDS データベース (外部)** 拡張コンポーネントカードをキャンバスにドラッグします。

カードを選択して**詳細**を選択するか、カードをダブルクリックして**リソースプロパティ**パネルを表示します。カードのリソースプロパティパネルが表示されます。

![RDS Database (外部) 拡張コンポーネントカードのリソースプロパティパネル。](http://docs.aws.amazon.com/ja_jp/infrastructure-composer/latest/dg/images/aac_use_rds_03.png)


ここで以下を設定できます。
+ **論理 ID** – 外部の Amazon RDS DBクラスター、インスタンス、またはプロキシの一意の名前。この ID は、外部 Amazon RDS DBリソースの論理 ID 値と一致する必要はありません。
+ **データベースシークレット** – Amazon RDS DBクラスター、インスタンス、またはプロキシに関連付けられている AWS Secrets Manager シークレットの識別子。このフィールドには、次の値を使用できます。
  + **静的値** – シークレット ARN などのデータベースシークレットの一意の識別子。以下に例を示します。`arn:aws:secretsmanager:us-west-2:123456789012:secret:my-path/my-secret-name-1a2b3c`。詳細については、*AWS Secrets Manager ユーザーガイド*の「[AWS Secrets Manager コンセプト](https://docs.aws.amazon.com/secretsmanager/latest/userguide/getting-started.html) 」を参照してください。
  + **出力値** – Secrets Manager シークレットがデプロイされると AWS CloudFormation、出力値が作成されます。ここで、 `[Fn::ImportValue](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-importvalue.html)`組み込み関数を使用して出力値を指定できます。例えば、`!ImportValue MySecret`。
  + **SSM パラメータストアの値** – SSM パラメータストアにシークレットを保存し、動的リファレンスを使用してその値を指定できます。例えば、`{{resolve:ssm:MySecret}}`。詳細については、「 *AWS CloudFormation ユーザーガイド*」の[「SSM パラメータ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html#dynamic-references-ssm)」を参照してください。
+ **データベースホスト名** – Amazon RDS DBクラスター、インスタンス、またはプロキシへの接続に使用できるホスト名。この値は、Amazon RDS リソースを定義する外部テンプレートで指定されます。次の値を使用できます。
  + **静的値** – エンドポイントアドレスなど、データベースホスト名の一意の識別子。以下に例を示します。`mystack-mydb-1apw1j4phylrk.cg034hpkmmjt.us-east-2.rds.amazonaws.com`。
  + **出力値** – デプロイされた Amazon RDS DBクラスター、インスタンス、またはプロキシの出力値。`[Fn::ImportValue](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-importvalue.html)` 組み込み関数を使用して出力値を指定できます。例えば、`!ImportValue myStack-myDatabase-abcd1234`。
  + **SSM パラメータストアの値** – データベースホスト名を SSM パラメータストアに保存し、動的リファレンスを使用してその値を指定できます。例えば、`{{resolve:ssm:MyDatabase}}`。
+ **データベースポート** – Amazon RDS DBクラスター、インスタンス、またはプロキシへの接続に使用できるポート番号。この値は、Amazon RDS リソースを定義する外部テンプレートで指定されます。次の値を使用できます。
  + **静的値** – データベースポート。例えば、`3306`。
  + **出力値** – デプロイされた Amazon RDS DBクラスター、インスタンス、またはプロキシの出力値。例えば、`!ImportValue myStack-MyRDSInstancePort`。
  + **SSM パラメータストアの値** – データベースホスト名を SSM パラメータストアに保存し、動的リファレンスを使用してその値を指定できます。例えば、`{{resolve:ssm:MyRDSInstancePort}}`。

**注記**  
ここで設定する必要があるのは論理 ID 値のみです。必要に応じて、デプロイ時に他のプロパティを設定できます。

### ステップ 2: Lambda 関数カードを接続する
<a name="using-composer-services-rds-connect-step2"></a>

**リソース**パレットから、**Lambda Function** 拡張コンポーネントカードをキャンバスにドラッグします。

**Lambda 関数**カードの左ポートを **RDS データベース (外部)** カードの右ポートに接続します。

![RDS データベース (外部) 拡張コンポーネントカードに接続された Lambda 関数カード。](http://docs.aws.amazon.com/ja_jp/infrastructure-composer/latest/dg/images/aac_use_rds_02.png)


Infrastructure Composer はこの接続を容易にするためにテンプレートをプロビジョニングします。

## Infrastructure Composer が接続を作成するために行うこと
<a name="using-composer-services-rds-ref-how"></a>

上記の手順を完了すると、Infrastructure Composer は Lambda 関数をデータベースに接続するための特定のアクションを実行します。

### 外部 Amazon RDS DBクラスター、インスタンス、またはプロキシを指定する場合
<a name="using-composer-services-rds-ref-how-specify"></a>

**RDS データベース (外部)** カードをキャンバスにドラッグすると、Infrastructure Composer は必要に応じてテンプレートの `Metadata`および `Parameters`セクションを更新します。以下に例を示します。

```
Metadata:
  AWS::Composer::ExternalResources:
    ExternalRDS:
      Type: externalRDS
      Settings:
        Port: !Ref ExternalRDSPort
        Hostname: !Ref ExternalRDSHostname
        SecretArn: !Ref ExternalRDSSecretArn
Parameters:
  ExternalRDSPort:
    Type: Number
  ExternalRDSHostname:
    Type: String
  ExternalRDSSecretArn:
    Type: String
```

[メタデータ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/metadata-section-structure.html)は、 CloudFormation テンプレートに関する詳細を保存するために使用されるテンプレートセクションです。Infrastructure Composer に固有のメタデータは、`AWS::Composer::ExternalResources`メタデータキーの下に保存されます。ここでは、Infrastructure Composer は Amazon RDS DBクラスター、インスタンス、またはプロキシに指定した値を保存します。

 CloudFormation テンプレートの[パラメータ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html)セクションは、デプロイ時にテンプレート全体に挿入できるカスタム値を保存するために使用されます。指定した値のタイプに応じて、Infrastructure Composer は Amazon RDS DBクラスター、インスタンス、またはプロキシの値をここに保存し、テンプレート全体で指定する場合があります。

`Metadata` および `Parameters`セクションの文字列値は、**RDS データベース (外部)** カードで指定した論理 ID 値を使用します。論理 ID を更新すると、文字列値が変更されます。

### Lambda 関数をデータベースに接続する場合
<a name="using-composer-services-rds-ref-how-connecting"></a>

**Lambda 関数**カードを **RDS データベース (外部)** カードに接続すると、Infrastructure Composer は環境変数と AWS Identity and Access Management (IAM) ポリシーをプロビジョニングします。以下に例を示します。

```
Resources:
  Function:
    Type: AWS::Serverless::Function
    Properties:
      ...
      Environment:
        Variables:
          EXTERNALRDS_PORT: !Ref ExternalRDSPort
          EXTERNALRDS_HOSTNAME: !Ref ExternalRDSHostname
          EXTERNALRDS_SECRETARN: !Ref ExternalRDSSecretArn
      Policies:
        - AWSSecretsManagerGetSecretValuePolicy:
            SecretArn: !Ref ExternalRDSSecretArn
```

[環境](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html#sam-function-environment)変数は、実行時に関数で使用できる変数です。詳細については、「 *AWS Lambda デベロッパーガイド*」の[「Lambda 環境変数の使用](https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html)」を参照してください。

[ポリシー](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html#sam-function-policies)は、関数のアクセス許可をプロビジョニングします。ここでは、Infrastructure Composer は、関数から Secrets Manager への読み取りアクセスを許可するポリシーを作成し、Amazon RDS DBクラスター、インスタンス、またはプロキシにアクセスするためのパスワードを取得します。