2

私の要件は、同じ Cloudformation テンプレートからキーペアが動的に作成される EC2 インスタンスを作成することです。現在、AWS コンソールからキーペアを作成し、ユーザーからの入力を取得して Cloudformation を介して EC2 インスタンスに割り当てています。

AWS ドキュメントを確認したところ、KeyPair は AWS コンソールから作成できることがわかりました。

とにかく、Cloudformation からキーペアを作成し、インスタンスに .PEM ファイルをコピーできる方法はありますか?

4

3 に答える 3

1

アントンの答えに従い、その作品はうまくいきました。cloudformation テンプレートを起動するシェル スクリプトを記述します。キーが事前設定されていない場合、スクリプトはそれを作成し、s3 バケットにアップロードします。

#!/bin/bash
Region=eu-central-1
key=myapp-engine-$Region
Available_key=`aws ec2 describe-key-pairs --key-name $key | grep KeyName | awk -F\" '{print $4}'`

if [ "$key" = "$Available_key" ]; then
    echo "Key is available."
else
    echo "Key is not available: Creating new key"
    aws ec2 create-key-pair --key-name $key --region $Region > myapp-engine-$Region.pem
    aws s3 cp myapp-engine-$Region.pem s3://mybucket/myapp-engine-$Region.pem
fi

##### create stack  #########

/usr/local/bin/aws cloudformation deploy  --stack-name myapp-engine --template-file ./lc.yml --parameter-overrides file://./config.json  --region $Region

以下は、キーを渡すことができる CloudFormation 起動構成スタックの例です。

Resources:
  renderEnginelc:
    Type: AWS::AutoScaling::LaunchConfiguration
    Properties:
      ImageId:
        Ref: "AMIID"
      SecurityGroups:
        - Fn::ImportValue:
            !Sub "${SGStackName}-myapp"
      InstanceType:
        Ref: InstanceType
      LaunchConfigurationName : !Join [ "-", [ !Ref Environment, !Ref ApplicationName, lc ] ]
      KeyName: !Join [ "-", [ !Ref KeyName, !Ref AWS::Region ] ]

KeyName のパラメータ値を渡すのは「myapp-engine」であり、AWS::Region に従ってリージョンを考慮します

于 2021-03-11T20:36:05.627 に答える