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

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()

http://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()

作成したファイルシステムのマウント設定をする関数。
http://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()

http://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にマウントさせる

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です