はじめに
こちらのモジュールをつかって、VPCエンドポイントを作成する際、service_name
を渡さなくても、自動で設定されます
module "endpoints" {
source = "terraform-aws-modules/vpc/aws//modules/vpc-endpoints"
vpc_id = "vpc-12345678"
security_group_ids = ["sg-12345678"]
endpoints = {
s3 = {
# interface endpoint
service = "s3"
tags = { Name = "s3-vpc-endpoint" }
},
}
tags = {
Owner = "user"
Environment = "dev"
}
}
出典:https://github.com/terraform-aws-modules/terraform-aws-vpc/tree/master/modules/vpc-endpoints
上記の例から見てもわかるように、設定しているのはservice
だけです
直感的に、service
からservice_name
が設定されていると想定されます
また、公式ドキュメントには以下のように説明されています
service_name - (Required) The service name. For AWS services the service name is usually in the form com.amazonaws.. (the SageMaker Notebook service is an exception to this rule, the service name is in the form aws.sagemaker..notebook).
service_name
は通常、com.amazonaws.<region>.<service>
の形式です
ソースを確認してみた
以下で設定されているのを見つけました
if v, ok := d.GetOk("service_name"); ok {
serviceName = v.(string)
} else if v, ok := d.GetOk("service"); ok {
serviceName = fmt.Sprintf("com.amazonaws.%s.%s", meta.(*conns.AWSClient).Region, v.(string))
}
出典: https://github.com/hashicorp/terraform-provider-aws
service_name
のフィールドは必須なのですが、取得できなかった場合に、service
から組み立てられているのがわかります