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を使うと量産しやすいかもです。