6

AWS Lambda によって作成された新しい EC2 インスタンスの Userdata フィールドにスクリプトを渡そうとしています (AWS SDK for Javascript、Node.js 6.10 を使用):

...
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 に渡すことも可能ですか?

4

1 に答える 1

8

まず、あなたの例では base64 エンコーディング必要です。ドキュメントには、これは自動的に行われると記載されていますが、ユーザー データを使用して ec2 インスタンスを作成するラムダ関数で常に必要です。次に、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
// ...
于 2017-09-29T14:48:00.063 に答える