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