英文:
Non interactive shell of an EC2 using aws golang sdk v2
问题
使用AWS Go SDK v2可以实现相同的功能。您可以使用AWS Systems Manager来执行命令,而无需使用SSH。您可以直接在Go代码中获取输出,并将其打印到控制台上,而无需使用交互式shell。
以下是一个示例代码片段,演示如何使用AWS Go SDK v2执行命令并获取输出:
package main
import (
"context"
"fmt"
"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/service/ssm"
"os"
)
func main() {
// 创建AWS配置
cfg, err := config.LoadDefaultConfig(context.TODO())
if err != nil {
fmt.Println("无法加载AWS配置", err)
os.Exit(1)
}
// 创建SSM客户端
client := ssm.NewFromConfig(cfg)
// 创建命令输入参数
input := &ssm.SendCommandInput{
DocumentName: aws.String("AWS-RunShellScript"),
InstanceIds: []string{"your-instance-id"},
Parameters: map[string][]string{
"commands": {"ls"},
},
}
// 发送命令并获取输出
output, err := client.SendCommand(context.TODO(), input)
if err != nil {
fmt.Println("无法发送命令", err)
os.Exit(1)
}
// 获取命令输出
commandOutput, err := client.GetCommandInvocation(context.TODO(), &ssm.GetCommandInvocationInput{
CommandId: output.Command.CommandId,
InstanceId: aws.String("your-instance-id"),
})
if err != nil {
fmt.Println("无法获取命令输出", err)
os.Exit(1)
}
// 打印输出结果
fmt.Println(commandOutput.StandardOutputContent)
}
请注意,您需要将your-instance-id
替换为您实际的EC2实例ID。此示例使用AWS-RunShellScript
文档来执行命令,您可以根据需要更改文档名称和命令参数。
希望这可以帮助到您!
英文:
With bash
I type this command:
ssh -i key.pem ubuntu@ec2-instance ls
And the result will be something like:
file1
file2
file3
Question:
Can I do the same thing with AWS go SDK v2?
What I need:
- Use AWS systems manager
- Do not use ssh.
- Get the output directly in my go code to print it to the console
- Don't need an interactive shell
答案1
得分: 1
API可以实现这个功能。不过我对Go SDK不太熟悉。
这里有一个JavaScript SDK的链接(我假设功能是相同的):https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SSM.html#sendCommand-property
也可以通过命令行完成:
aws ssm send-command --instance-ids "i-INSTANCEID" --document-name "AWS-RunShellScript" --comment "List" --parameters commands=ls --region "ap-northeast-1"
你可以使用list-command-invocations命令获取结果:
aws ssm list-command-invocations --command-id "4f65c2da-NNNN-JJJJ-LLLL-6efc67e6cd5d" --details --region "ap-northeast-1"
使用的用户/角色需要具有ssm:SendCommand和ssm:ListCommandInvocations的访问权限,例如:
{
"Effect": "Allow",
"Action": [
"ssm:SendCommand",
"ssm:ListCommandInvocations"
],
"Resource": "*"
}
英文:
The API allows this. I'm not familar with the go SDK though.
here's a link to the JavaScript SDK (I assume functionality is the same) : https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SSM.html#sendCommand-property
It can be done by the command line as well:
aws ssm send-command --instance-ids "i-INSTANCEID" --document-name "AWS-RunShellScript" --comment "List" --parameters commands=ls --region "ap-northeast-1"
you get the result with list-command-invocations
aws ssm list-command-invocations --command-id "4f65c2da-NNNN-JJJJ-LLLL-6efc67e6cd5d" --details --region "ap-northeast-1"
The user/role used needs access to ssm:SendCommand and ssm:ListCommandInvocations - e.g.
{
"Effect": "Allow",
"Action": [
"ssm:SendCommand",
"ssm:ListCommandInvocations"
],
"Resource": "*"
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论