記事公開日
最終更新日
【AWS】AWS CloudFormationを利用したAmazon DataZone環境構築

はじめに
こんにちは。DXソリューション営業本部の後藤です。
本記事では、AWSのデータ管理サービスであるAmazon DataZoneの環境をAWS CloudFormationを利用して自動構築する方法についてご説明したいと思います。
Amazon DataZoneとは
Amazon DataZone は、AWS、オンプレミス、およびサードパーティのソースに保存されているデータのカタログ化、検出、共有、ガバナンスをより迅速かつ簡単に行うことができるデータ管理サービスです。Amazon DataZone を使用すると、組織のデータアセットを監督する管理者は、きめ細かなコントロールを使用してデータへのアクセスを管理および統制できます。引用元:https://docs.aws.amazon.com/ja_jp/datazone/latest/userguide/what-is-datazone.html
今回行いたいこと&構成図
今回行いたいこと
・CloudFormationを利用してDataZone環境を構築する。
・Glue Crawlerでテーブルを作成する。
・サブスクライブを行ってプロジェクト間でデータを共有できるようにする。
構成図
今回使用するCloudFormationテンプレート
DataZone環境を構築するテンプレートを以下のように作成しました。<テンプレートを表示>からコード部分をコピペし、拡張子をyamlとして任意のファイル名(UTF-8 BOMなし形式)で保存してください。DataZone環境作成用テンプレート(クリックしてテンプレートを表示)
AWSTemplateFormatVersion: '2010-09-09' Description: createdatazone Parameters: # アカウントID AccountId: Type: String Default: "" # リージョン Region: Type: String Default: "" # S3バケットパス S3BucketPath: Type: String Default: "" # IAMUser IAMUser: Type: String Default: "" # ドメイン実行用ロール名 DomainExecutionIAMRoleName: Type: String Default: "" # GlueACCESS管理用ロール名 GlueAccessIAMRoleName: Type: String Default: "" # Provisioning用ロール名 ProvisioningIAMRoleName: Type: String Default: "" # ドメイン名 DataZoneDomainName: Type: String Default: "" # 管理用プロジェクト名 DataZoneProject1Name: Type: String Default: "" # 分析用プロジェクト名 DataZoneProject2Name: Type: String Default: "" # 環境プロファイル名 DataZoneEnvironmentProfileName: Type: String Default: "" # 管理用環境名 DataZoneEnvironmentName1: Type: String Default: "" # 分析用環境名 DataZoneEnvironmentName2: Type: String Default: "" Resources: # ドメイン実行用ロール DomainExecutionIAMRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Principal: Service: "datazone.amazonaws.com" Action: - "sts:AssumeRole" - "sts:TagSession" Condition: "StringEquals": "aws:SourceAccount": !Ref AccountId "ForAllValues:StringLike": "aws:TagKeys": "datazone*" ManagedPolicyArns: - arn:aws:iam::aws:policy/service-role/AmazonDataZoneDomainExecutionRolePolicy RoleName: !Ref DomainExecutionIAMRoleName # GlueACCESS管理用ロール GlueAccessIAMRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Principal: Service: "datazone.amazonaws.com" Action: "sts:AssumeRole" Condition: "StringEquals": "aws:SourceAccount": !Ref AccountId "ArnEquals": "aws:SourceArn": !Sub "arn:aws:datazone:${Region}:${AccountId}:domain/*" ManagedPolicyArns: - arn:aws:iam::aws:policy/service-role/AmazonDataZoneGlueManageAccessRolePolicy RoleName: !Ref GlueAccessIAMRoleName DependsOn: DomainExecutionIAMRole # Provisioning用ロール ProvisioningIAMRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Principal: Service: "datazone.amazonaws.com" Action: "sts:AssumeRole" Condition: "StringEquals": "aws:SourceAccount": !Ref AccountId ManagedPolicyArns: - arn:aws:iam::aws:policy/AmazonDataZoneRedshiftGlueProvisioningPolicy - arn:aws:iam::aws:policy/AmazonS3FullAccess RoleName: !Ref ProvisioningIAMRoleName DependsOn: GlueAccessIAMRole # ドメインを作成 DataZoneDomain: Type: AWS::DataZone::Domain Properties: DomainExecutionRole: !GetAtt DomainExecutionIAMRole.Arn Name: !Ref DataZoneDomainName # 管理用プロジェクト作成 DataZoneProject1: Type: AWS::DataZone::Project Properties: DomainIdentifier: !Ref DataZoneDomain Name: !Ref DataZoneProject1Name # 分析用プロジェクト作成 DataZoneProject2: Type: AWS::DataZone::Project Properties: DomainIdentifier: !Ref DataZoneDomain Name: !Ref DataZoneProject2Name # LakeFormation管理者にIAMUserを追加 DataLakeAdmins: Type: AWS::LakeFormation::DataLakeSettings Properties: Admins: - DataLakePrincipalIdentifier: !Sub "arn:aws:iam::${AccountId}:user/${IAMUser}" # ブループリントの作成 DataZoneEnvironmentBlueprintConfiguration: Type: AWS::DataZone::EnvironmentBlueprintConfiguration Properties: DomainIdentifier: !Ref DataZoneDomain EnabledRegions: - !Ref Region EnvironmentBlueprintIdentifier: DefaultDataLake ManageAccessRoleArn: !GetAtt GlueAccessIAMRole.Arn ProvisioningRoleArn: !GetAtt ProvisioningIAMRole.Arn RegionalParameters: - Parameters: S3Location: !Ref S3BucketPath Region: !Ref Region # 環境プロファイルの作成 DataZoneEnvironmentProfile: Type: AWS::DataZone::EnvironmentProfile Properties: AwsAccountId: !Ref AccountId AwsAccountRegion: !Ref Region DomainIdentifier: !Ref DataZoneDomain EnvironmentBlueprintIdentifier: !GetAtt DataZoneEnvironmentBlueprintConfiguration.EnvironmentBlueprintId Name: !Ref DataZoneEnvironmentProfileName ProjectIdentifier: !GetAtt DataZoneProject1.Id DependsOn: DataZoneEnvironmentBlueprintConfiguration # 管理用環境の作成 DataZoneEnvironment1: Type: AWS::DataZone::Environment Properties: DomainIdentifier: !Ref DataZoneDomain EnvironmentAccountIdentifier: !Ref AccountId EnvironmentAccountRegion: !Ref Region EnvironmentProfileIdentifier: !GetAtt DataZoneEnvironmentProfile.Id EnvironmentRoleArn: !GetAtt ProvisioningIAMRole.Arn Name: !Ref DataZoneEnvironmentName1 ProjectIdentifier: !GetAtt DataZoneProject1.Id DependsOn: DataZoneEnvironmentProfile # 分析用環境の作成 DataZoneEnvironment2: Type: AWS::DataZone::Environment Properties: DomainIdentifier: !Ref DataZoneDomain EnvironmentAccountIdentifier: !Ref AccountId EnvironmentAccountRegion: !Ref Region EnvironmentProfileIdentifier: !GetAtt DataZoneEnvironmentProfile.Id EnvironmentRoleArn: !GetAtt ProvisioningIAMRole.Arn Name: !Ref DataZoneEnvironmentName2 ProjectIdentifier: !GetAtt DataZoneProject2.Id DependsOn: DataZoneEnvironmentProfile Outputs: DataZoneDomainId: Value: !Ref DataZoneDomain Export: Name: DataZoneDomainId DataZoneProjectId1: Value: !GetAtt DataZoneProject1.Id Export: Name: DataZoneProjectId1 DataZoneProjectId2: Value: !GetAtt DataZoneProject2.Id Export: Name: DataZoneProjectId2 DataZoneExecution: Value: !GetAtt DomainExecutionIAMRole.Arn Export: Name: DataZoneExecutionIAMRole DataZoneGlueAccess: Value: !GetAtt GlueAccessIAMRole.Arn Export: Name: DataZoneGlueAccess DataZoneprovisioning: Value: !GetAtt ProvisioningIAMRole.Arn Export: Name: DataZoneprovisioning
テンプレートの説明
・DataZoneドメイン
・DataZone環境内のプロジェクト
・プロジェクト内のデータレイク環境(Glue,S3,Athena)
このテンプレートを使ってDataZone環境を自動構築していきたいと思います。
CloudFormationで実行する










Glue Crawlerでテーブルを作成する











動作確認

















まとめ
最後までお読みいただきありがとうございます。
今回はAWS CloudFormationでAmazon DataZone環境を自動構築してみました。AWS CloudFormationを活用することで簡単にAmazon DataZone環境を構築することができ、新規プロジェクトの導入やプロジェクトに新規メンバーを追加する際にもテンプレートを流用することで作業負荷を軽減することが可能になります。Amazon DataZoneの導入を検討されている方はぜひご参考にしていただければと思います。
最後に「このサービスについて知りたい」「AWS環境の構築、移行」などのリクエストがございましたら、弊社お問合せフォームまでお気軽にご連絡ください! のちほど当ブログにてご紹介させていただくか、複雑な内容に関するお問い合わせの内容の場合には直接営業からご連絡を差し上げます。
※Amazon Web Services、”Powered by Amazon Web Services”ロゴ、およびブログで使用されるその他のAWS商標は、米国その他の諸国における、Amazon.com, Inc.またはその関連会社の商標です。