

# CloudFormation テンプレートのリファレンスモジュールリソース
<a name="module-ref-resources"></a>

CloudFormation テンプレートでは、別のリソースの名前またはプロパティに基づいて、あるリソースのプロパティを設定しなければならないことがよくあります。詳細については、「[リソースの参照](resources-section-structure.md#using-cross-resource-references)」を参照してください。

CloudFormation テンプレートのモジュール内に含まれるリソースを参照するには、次の 2 つの論理名を組み合わせる必要があります。
+ テンプレートにモジュールを含めたときにそのモジュール自体に付けた論理名。
+ そのモジュール内にある特定リソースの論理名。

これらの 2 つの論理名は、それらの間にピリオド (.) を使用するか、使用せずに組み合わせることができます。たとえば、モジュールの論理名が「`MyModule`」でリソースの論理名が「`MyBucket`」の場合、「`MyModule.MyBucket`」または「`MyModuleMyBucket`」とすることで、そのリソースを参照できます。

モジュール内のリソースの論理名を確認するには、CloudFormation レジストリまたは「[https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeType.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeType.html)」操作を使用することにより、モジュールのスキーマを参照できます。スキーマリストには、モジュールの一部であるすべてのリソースおよびその論理名が一覧表示されます。

完全な論理名を取得したら、`GetAtt` や `Ref` などの CloudFormation 関数を使用してモジュールリソースのプロパティ値にアクセスできます。

たとえば、「`S3Bucket`」という論理名の `AWS::S3::Bucket` リソースを含む `My::S3::SampleBucket::MODULE` モジュールがあるとします。`Ref` 関数を使用してこのバケットの名前を参照するには、テンプレート (`MyBucket`) のモジュール名をモジュール (`S3Bucket`) のリソースの論理名と組み合わせます。完全な論理名は「`MyBucket.S3Bucket`」または「`MyBucketS3Bucket`」のいずれかです。

**サンプルテンプレート**  
次のテンプレート例では、`My::S3::SampleBucket::MODULE` モジュールを使用して S3 バケットを作成します。Amazon SQS キューも作成し、名前をモジュールのバケット名と同じに設定します。さらに、テンプレートは作成された S3 バケットの Amazon リソースネーム (ARN) を出力します。

```
# Template that uses My::S3::SampleBucket::MODULE
Parameters:
  BucketName:
    Description: Name for your sample bucket
    Type: String
Resources:
  MyBucket:
    Type: My::S3::SampleBucket::MODULE
    Properties:
      BucketName: !Ref BucketName
  exampleQueue:
    Type: AWS::SQS::Queue
    Properties:
      QueueName: !Ref MyBucket.S3Bucket
Outputs:
  BucketArn:
    Value: !GetAtt MyBucket.S3Bucket.Arn
```