AWS SDK( nodejs )からAmazon EFSのリソースを作成する

Amazonの便利なFileSystem「Amazon EFS」。 「どうせならもっと便利に作ろうぜ」ってことで、AWS SDK使ってnodeで立ち上げるスクリプトを作ってみました。 コード createEfsSys( […]

広告ここから
広告ここまで

目次

    Amazonの便利なFileSystem「Amazon EFS」。

    「どうせならもっと便利に作ろうぜ」ってことで、AWS SDK使ってnodeで立ち上げるスクリプトを作ってみました。

    コード

    createEfsSys( Math.random().toString() );
    
    function createEfsSys( randKey ) {
    	var params = {
    		CreationToken: randKey,
    		PerformanceMode: 'generalPurpose'
    	};
    	var efs = new AWS.EFS({
    		apiVersion: '2015-02-01',
    		accessKeyId: YOUR_AWS_ACCESS_KEY,
    		secretAccessKey: YOUR_AWS_SECRETE_ACCESS_KEY,
    		region: YOUR_REGION
    	});
    	efs.createFileSystem(params).promise()
    	.then( function(data){
    		setTimeout(function(){
    			createEfsMountTarget( efs, data );
    		}, 3000);
    	}).catch( function(err){
    		console.log(err);
    	});
    }
    
    function createEfsMountTarget( efs, data) {
    	var fsId = data.FileSystemId;
    	var params = {
    		FileSystemId: fsId,
    		SubnetId: YOUR_SUBNET_ID,
    		SecurityGroups: [ YOUR_SECURITY_GROUD_ID ]
    	};
    	efs.createMountTarget( params ).promise()
    	.then( function(data){
    		var timestamp = new Date().toDateString();
    		var params = {
    			FileSystemId: fsId,
    			Tags: [
    				{
    					Key: 'Name',
    					Value: 'Created ' + timestamp
    				},
    			]
    		};
    		return efs.createTags(params).promise();
    	}).then( function(data) {
    		console.log(data);
    	}).catch( function(err){
    		console.log(err);
    	});
    }
    

    大文字英数になっている変数は、自分のAWSアカウントで使用している値に書き換えてもらえればです。

    Amazon EFSは「ファイルシステムの作成」と「マウントターゲット設定」と「タグ設定」の3つをそれぞれ別関数でやるので、組み合わせて走るようにしたほうが楽そうです。

    使っている関数

    createFileSystem()

    https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/EFS.html#createFileSystem-property
    Amazon EFSのファイルシステムを立ち上げる関数。

    promiseを使うときはこんな感じになる。

    var params = {
      CreationToken: Math.random().toString(),
      PerformanceMode: 'generalPurpose'
    };
    efs.createFileSystem( params ).promise()
    .then( function( data ) { console.log( data ); } )
    .catch( function( err ) { console.error( err ); } ); 
    

    CreationTokenを使いまわすと「さっき作成処理やったよね?」的なエラー食らうので要注意。面倒くさいならランダムな文字列突っ込んでおけばいいかなと。

    createMountTarget()

    作成したファイルシステムのマウント設定をする関数。
    https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/EFS.html#createMountTarget-property

    promiseを使うときはこんな感じになる。

    var params = {
      FileSystemId: 'fs-XXXXX',
      SubnetId: 'YOUR_SUBNET_ID',
      SecurityGroups: [
        'YOUR_SG_ID',
      ]
    };
    efs.createMountTarget( params ).promise()
    .then( function( data ) { console.log( data ); } )
    .catch( function( err ) { console.error( err ); } ); 
    

    セキュリティグループやサブネットIDなどの設定はここでする。

    createTags()

    https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/EFS.html#createTags-property

    promiseを使うときはこんな感じになる。

    var params = {
      FileSystemId: 'fs-XXXXX',
      Tags: [
        {
          Key: 'Name',
          Value: 'sample EFS'
        },
        {
          Key: 'origin tag',
          Value: 'tag value'
        },
      ]
    };
    efs.createTags( params ).promise()
    .then( function( data ) { console.log( data ); } )
    .catch( function( err ) { console.error( err ); } ); 
    

    Nameでタグをつけておくと、マネジメントコンソールから見やすくなるので便利です。

    「JS書くの面倒くさい」ってなった人は・・・

    CloudFormationを使うと量産しやすいかもです。

    CloudFormationでElasticFileSystem(EFS)をEC2にマウントさせる

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark