1

私は(Javascriptを、Node.jsの6.10のためのAWS SDKを使用して)AWSラムダによって作成された新しいEC2インスタンスのUserdataのフィールドにスクリプトを渡ししようとしている:AWS LambdaでEC2作成のUserDataフィールドにスクリプトを渡す方法は?

... 
 
var paramsEC2 = { 
 
    ImageId: 'ami-28c90151', 
 
    InstanceType: 't1.micro', 
 
    KeyName: 'myawesomekwy', 
 
    MinCount: 1, 
 
    MaxCount: 1, 
 
    SecurityGroups: [groupname], 
 
    UserData:'#!/bin/sh \n echo "Hello Lambda"' 
 
}; 
 

 
// Create the instance 
 
ec2.runInstances(paramsEC2, function(err, data) { 
 
    if (err) { 
 
     console.log("Could not create instance", err); 
 
     return; 
 
    } 
 
    var instanceId = data.Instances[0].InstanceId; 
 
    console.log("Created instance", instanceId); 
 
    // Add tags to the instance 
 
    params = {Resources: [instanceId], Tags: [ 
 
     { 
 
     Key: 'Name', 
 
     Value: 'taggggg' 
 
     } 
 
    ]}; 
 
    ec2.createTags(params, function(err) { 
 
     console.log("Tagging instance", err ? "failure" : "success"); 
 
    }); 
 
}); 
 
...

私は - 文字列を作成し、その文字列をUserDataに渡す - 機能しない - 文字列を作成してbase64にエンコードし、その文字列をUserDataに渡す - 動作しない - base64でエンコードされた文字列を貼り付ける - 動作しない

UserDataにスクリプトを渡す方法を教えてもらえますか? AWS SDKのドキュメントは少し欠けています。

S3バケットに入れられたスクリプトをUserDataに渡すことはできますか?

+0

*あなたが何を意味*定義することが重要だ「動作していません。」私たちはそれが機能していないことを知っていますが、それは私たちにはほとんど行きません。どのように失敗するのですか? –

+0

yeah @Mark Bもっと詳しく説明してくれなかったのは残念です。まずbase64エンコーディングのために失敗しました。私は必要であることを発見し、ドキュメントに記載されているように自動的には行われませんでした。第二に、文字列が間違った方法で定義されていました。 – raffaeletalarico

答えて

0

まず、を符号化するbase64は、例ではです。ドキュメントではこれが自動的に行われると書かれていますが、ラムダ関数では常にユーザーデータを使ってec2インスタンスを作成する必要があります。第2に、ES6のように、複数行の文字列は、ラムダ関数内にスクリプトを追加する限り、あなたの人生を楽にすることができます。

だから、次の操作を試してください。

var userData= `#!/bin/bash 
echo "Hello World" 
touch /tmp/hello.txt 
` 

var userDataEncoded = new Buffer(userData).toString('base64'); 

var paramsEC2 = { 
    ImageId: 'ami-28c90151', 
    InstanceType: 't1.micro', 
    KeyName: 'AWSKey3', 
    MinCount: 1, 
    MaxCount: 1, 
    SecurityGroups: [groupname], 
    UserData: userDataEncoded 
}; 

// Create the instance 
// ... 
関連する問題