Amazon web services 使用AWS SDK启动实例和AWS cli管理实例是一种好方法吗?

Amazon web services 使用AWS SDK启动实例和AWS cli管理实例是一种好方法吗?,amazon-web-services,ssh,amazon-ec2,aws-sdk,aws-cli,Amazon Web Services,Ssh,Amazon Ec2,Aws Sdk,Aws Cli,我刚开始学习AWS,我有一些问题 首先,我遵循了关于如何使用AWS SDK for JAVA启动实例的官方文档,如下所示: AmazonEC2 Client = new AmazonEC2Client(awsCreds); CreateSecurityGroupRequest csgr = new CreateSecurityGroupRequest(); csgr.withGroupName("Azzouz_group").withDescription("My sec

我刚开始学习AWS,我有一些问题

首先,我遵循了关于如何使用AWS SDK for JAVA启动实例的官方文档,如下所示:

    AmazonEC2 Client = new AmazonEC2Client(awsCreds);
    CreateSecurityGroupRequest csgr = new CreateSecurityGroupRequest();
    csgr.withGroupName("Azzouz_group").withDescription("My security group");
    IpPermission ipPermission = new IpPermission();
    ipPermission.withIpRanges("0.0.0.0/0").withIpProtocol("tcp");
    AuthorizeSecurityGroupIngressRequest authorizeSecurityGroupIngressRequest = new AuthorizeSecurityGroupIngressRequest();

    authorizeSecurityGroupIngressRequest.withGroupName("Azzouz_group").withIpPermissions(ipPermission);


    RunInstancesRequest runInstancesRequest = new RunInstancesRequest();

    runInstancesRequest.withImageId("ami-4b814f22")
            .withInstanceType("m1.small")
            .withMinCount(1)
            .withMaxCount(1)
            .withKeyName("azzouz_key")
            .withSecurityGroups("Azzouz_group");

    RunInstancesResult runInstancesResult = Client.runInstances(runInstancesRequest);
    RunInstancesResult runInstancesResult = Client.runInstances(runInstancesRequest);

    String instanceId = runInstancesResult.getReservation().getInstances().get(0).getInstanceId();
我没有使用
CreateKeyPairRequest
部分,因为我想将我的公钥上传到amazon,所以当我尝试
ssh
进入时,我不必添加
-I path/to/key.pem
,我只需在我的java代码中提到密钥名称(
“azzouz_key”
),在接下来的几行中,
$USER
包含
azzouz\u键

keypair=$USER  # just a name
publickeyfile=$HOME/.ssh/id_rsa.pub
regions=$(aws ec2 describe-regions \
  --output text \
  --query 'Regions[*].RegionName')

for region in $regions; do
  echo $region
  aws ec2 import-key-pair \
    --region "$region" \
    --key-name "$keypair" \
    --public-key-material "file://$publickeyfile"
done
我现在想要的是连接到实例并自动化一些东西。所以我打算从java代码内部调用shell,脚本获取一个实例id作为参数,然后获取ip地址(使用
aws ec2 descripe instances
),将ssh插入其中并执行一些操作

我想授权ssh从任何ip连接到实例,只是作为开始(0.0.0.0/0),我不确定这是否是我应该做的

所以,我的问题是:这是最好的方法吗?!我是否应该使用aws cli来创建和管理实例?!仅提及密钥对名称是否符合将公共ssh密钥上载到amazon的机制


拜托,我才刚刚开始,我是一名实习生,我还没有访问亚马逊帐户的权限,所以我可以测试我的工作。我只是在脑子里想这些。多谢各位

我的建议是在AWS上设置一个帐户,并开始使用AWS免费层选项

总之,它是免费的(只需关注您在服务中发布或使用的内容)

除此之外,您的问题是如何通过SSH从任何地方授权连接,这是通过安全组完成的()

关于什么是最好的选择,这真的取决于你

如果您需要在AWS上启动两个实例,那么控制台就足够了。如果您想协调您的混合设置,那么您的方式可能是最好的

CLI也是日常操作的优秀解决方案

简单地说,没有最好的方法,也没有好的或坏的方法。这完全取决于你的需要


我希望这能有所帮助。

我的建议是在AWS上设置一个帐户,并开始使用AWS免费层选项

总之,它是免费的(只需关注您在服务中发布或使用的内容)

除此之外,您的问题是如何通过SSH从任何地方授权连接,这是通过安全组完成的()

关于什么是最好的选择,这真的取决于你

如果您需要在AWS上启动两个实例,那么控制台就足够了。如果您想协调您的混合设置,那么您的方式可能是最好的

CLI也是日常操作的优秀解决方案

简单地说,没有最好的方法,也没有好的或坏的方法。这完全取决于你的需要


我希望这能有所帮助。

自动化是一个巨大的主题。如果您想使用脚本扩展AWS自动化,在接触API/SDK之前,首先必须设计自己的AWS资源标签

标记命名是引用AWS资源的一种隐式方法,无需明确指定资源id(例如VPC id、EC2 id、接口id等)。此外,对于EC2这样的资源,在创建过程中不允许立即使用标记,您需要研究“客户端令牌”的用法

AWSCLI允许您进行大量的自动化操作,然而,要操作响应结果,您需要shell脚本技能来操作它们。我建议您选择您熟悉的AWS SDK语言


云配置管理工具(Ansible、saltstack、puppet等工具的支持有限)可以是下一步,如果您计划扩展整个源部署、服务器配置

自动化是一个庞大的主题。如果您想使用脚本扩展AWS自动化,在接触API/SDK之前,首先必须设计自己的AWS资源标签

标记命名是引用AWS资源的一种隐式方法,无需明确指定资源id(例如VPC id、EC2 id、接口id等)。此外,对于EC2这样的资源,在创建过程中不允许立即使用标记,您需要研究“客户端令牌”的用法

AWSCLI允许您进行大量的自动化操作,然而,要操作响应结果,您需要shell脚本技能来操作它们。我建议您选择您熟悉的AWS SDK语言


云配置管理工具(Ansible、saltstack、puppet等工具的支持有限)可以是下一步,如果您计划扩展整个源部署、服务器配置

>你可能想考虑以基础结构作为代码开始。使用代码管道的云形成将确保自动化和一致的环境发布,并使您在市场上具有极高的价值


两者都可以通过awscli启动和管理。随着您的IaC能力和复杂性的增加,与CloudFormation相比,Terraform的模块化可能值得研究

>你可能想考虑以基础结构作为代码开始。使用代码管道的云形成将确保自动化和一致的环境发布,并使您在市场上具有极高的价值


两者都可以通过awscli启动和管理。随着您的IaC能力和复杂性的增加,与CloudFormation相比,Terraform的模块化可能值得研究

非常感谢毛里齐奥。关于免费等级账户,它需要一张信用卡,而在我的国家,我们没有这样的信用卡。这就是问题所在,所以我正在等待我的老板下周批准我访问。对,不幸的是,AWS上没有信用卡,没有派对。在你们国家有办法获得虚拟信用卡吗