Question: Reconnecting PlayerSessions - Gamelift Realtime

"Using GameLift realtime, if a PlayerSession is created, client connects, then dropped (e.g. network issue) there appears no way to reconnect that client without creating a new player session.Or am I missing something.What should ideally happen:Client calls "connect" with the same PlayerSessionID and get a handle back on the same  Game, same PeerID.What appears to actually happen:The connect is rejected as "GameLiftServerAPI.AcceptPlayerSession failed for player session id: psess-XXXX with error: [GameLiftError: ErrorType=5, ErrorMessage=PlayerSession (XXX) has a status of COMPLETED instead of RESERVED]What this means:All interaction with the server and between clients needs to be based on an external ID (e.g. PlayerID or passed in PlayerData)Extra processing on the ClientServer to handle to request and re-create the session (as a new session)Extra processing on the GameLiftServer to keep track of the additional session (the are actually the same)As neither PlayerID or PlayerData are available in RealTime server (WHY NOT?!) this means the PlayerID needs to be retrieved from the ClientServer based on the PlayerSession.This therefore involves a total of 5 network interactions (latency = 5  * 2 both ways) where 1 should do, and a map of PlayerSessions to PlayerIDs maintained. A lot of extra processing and complication. Network drop-outs/application crashes happen so this is unavoidable.Or am I missing something - is there a way to reconnect a PlayerSession back to GameSession without the rigmarole?FollowComment"

Answer: "0Some additional information from logs:When the client disconnects, here are the logs:[INFO] (index.js) 474: Player 1 disconnected from IP:X.X.X.X[INFO] (gamelift.js) 93: Calling GameLiftServerAPI.RemovePlayerSession with player session id: psess-XXX[INFO] (gamelift.js) 98: GameLiftServerAPI.RemovePlayerSession succeeded with player session id: psess-ff7fdade-bd86-4767-8d01-9eafc7d0ae3aIdeally we ask the application if we "RemovePlayerSession" or hold it open? And even if we do, can a client reconnect to an "ACTIVE" session?CommentSharerePost-User-7028274answered 3 years ago0When using a PlayerSession, I don't know if you can reopen a player session thats been marked closed (via RemovePlayerSession).The ping/pong connection health I believe is managed by GameLift Realtime and looking at https://docs.aws.amazon.com/gamelift/latest/developerguide/realtime-script-callbacks.html there doesn't seem to be a way to intercept change this behaviour.I can see a situation where you do the scenario you pointed out:Player reconnects with an invalid player sessionServer sees that player session was previously hosted on session and makes a new sessionAccepts player on new sessionLets the player know of the new session idSeems a little messy as you pointed out or you can make a new player session for the player on connection failure.I will ping the GameLift service team to see if they have any advice.CommentSharerePost-User-5332620answered 3 years ago0My studio handles this the route of ignoring peerid for the most part and tracking players with PlayerID. This gives some advantages as well that should be noted:Their status in the game can be decoupled from their connectionThey can reconnect to the gamesession with a different device and still get their player data from the previous device (this is the largest benefit in my opinion).In general I believe using peerid in terms of connections that have occurred and went through a lifecycle is the standard of digital communication systems and isn't intended to actually identify users.Player reconnects with an invalid player sessionServer sees that player session was previously hosted on session and makes a new sessionAccepts player on new sessionLets the player know of the new session idThis actually would be a nice addition to GameLift. Currently in my code, if a disconnection happens due to connection failure or my KeepAlive checks fail (the client OnConnectionErrorEvent/OnCloseEvent are really slow at realizing it has lost connection), I disconnect the client and immediately create a new playersession using the stored gamesession id.However, I also have a system already in place to handle connecting to playersessions informed from the server (since this is essentially what FlexMatch does as well).Having the server automate this process would remove a small amount of computing from the client (although not enough to really be notable), but would be a nice quality of life addition.CommentSharerePost-User-6168330answered 3 years ago0I can expand a little on what @REDACTEDUSERA few things  start.I know there are lots of ways that you can go about making PlayerSessions and GameSessions. What I am about to present represents a particular workflow. This is not how you have to solve this problem, this is just an overview of how we solved this problem.There will be times where I probably make assumptions about how well people know AWS/js or I will keep things short for the sake of not making this an AWS/js tutorial and I may hand wave a few steps. Feel free to yell at me.As best as I can tell the the object you get on onPlayerConnect just does not have enough information to get the PlayerName. It is kind of baffling frankly. This is an example dump of the connectMessage passed in https://pastebin.com/sRcKkcTS The payload part does translate to a playername however that was provided explicitly by the client and not really secure. More on that later.With that out of the way. Here is how we dealt with this.Our player sessions are created by lambdas making authenticated calls to to a restful API backed by API Gateway.  Roughly speaking it looks like this.    //So really I do all this in TypeScript but since it is all just js in the end     //and more people will probably know js     //I will try to keep this examples as vanilla as I can.    const aws = require("aws-sdk");    const gameLift = new aws .GameLift();    const standardApiResponse = (payload, status) => {        const response = {            statusCode: status,            body: payload        };        return response;    };    const createPlayerSession = async (userName, sessionId) => {            const playerSessionInput = {            PlayerId: userName,            GameSessionId: sessionId        };        const playerSession = await gameLift.createPlayerSession(playerSessionInput).promise();        return playerSession;    };    //This is the lambda that is actually getting hooked up the the API call. This is kind of where    //This can be come a 10 page tutorial just on AWS depending on how deep we want to go into things.     //The assumes that the caller has a game session ready to go. Again this is just one workflow.     //This is a lot of missing validation here for the sake of being simple.    exports.addPlayerSession = async (event) => {        if (!event || !event.body) {            return standardApiResponse("Missing post body", 400);        }        const body = JSON.parse(event.body);        const { gameSession } = body;            //Hand waving here. This is where you make sure PLAYER_X is the the one making the call        //and that that are the only one who can make a PlaerSession in the name of PLAYER_X.         //This is an over simplification of what we do.         //How you do this really depends on how your game works        //and your security needs        const { requestContext: { authorizer } } = event;        if (!authorizer) {            return standardApiResponse("Problem getting authorizer", 400);        }        const userName = authorizer.userName;                if (!gameSession ) {            return standardApiResponse("The field gameSession is required in the post body", 400);        }        try {            const playerSession = await createPlayerSession(userName, gameSession);                    return standardApiResponse(JSON.stringify(playerSession), 200);        }        catch (error) {            return standardApiResponse(error.message, 400);        }    }The above just means that if you have a PLAYER_X. Then only PLAYER_X should be able to make that call and great a session in the name of PLAYER_X. It will return the ploop of json I am sure you are already familiar working with. You may not need any of the above.This is where things get strange. Armed with this PlayerSession a client can now connect to a game and send a payload when it does. This is where we enter the realm of the realtime script. In my opinion there are really 2 problem to solve now.How to we verify a person who connects really is PLAYER_XHow do deal with that player leaving and coming back for any number of reasons.In terms of dealing with #1. You can look at that above pastbin link for an example of what the connectMsg is infunction onPlayerConnect(connectMsg) {    return true;}There are two ways as best I can tell to figure out a name backing that PlayerSession.The client can pass a payload in when it connects. It becomes a byte array and can be turned back into a string. This is quick, dirty, and not at all secure.That object does have the playerSessionId and your realtime script can do something like make an API call to access a resource where it passes in the playerSessionId and gets back the information it needs that is not in connectMsg.... you know like the name of the the player that you can see in the gamelift console.For the sake of keeping it short I will use this first one for this example. The second one can be left for further discussion if needed or as an exercise for the reader.Really I just want somebody to step in and tell me I am missing something because man that part is frustrating.Anyhow on to your actual problem. This is stripped down parts of a basic realtime script that you should already be familiar with. Again I do things mostly in typescript so I may have missed a few things, if something is wrong please just yell.let peerMap = {};const STATUS_PLAYER_CONNECTED = 100;const STATUS_PLAYER_DISCONNECTED = 200;const USER_GROUPS_GLOBAL = 1;const sendToGlobalGroup = (opCode, message) => {    const outMsg = session.newTextGameMessage(opCode, session.getServerId(), message);    session.sendReliableGroupMessage(outMsg, USER_GROUPS_GLOBAL);}; const messagePayload2String = (array) => {    var result = "";    for (var i = 0; i < array.length; i++) {        result += String.fromCharCode(array[i]);    }    return result;};const onPlayerConnect = (connectMsg) => {    const name = messagePayload2String(connectMsg.payload); //Sad hack here    let returningPlayer = false;    for (let key in peerMap) {        const playerConnection = peerMap[key];        if (playerConnection && playerConnection.name == name) {            returningPlayer = true;            break;        }    }    if (returningPlayer) {        //Hand waving        //Do something like        const data = CallAFunctionThatGetsTheOldPlayersDataByName(name);        //send that data to connectMsg.player.peerId                //send a message to all players letting them know name is back.        //If you have anything in your code the references a resource by peerID this        //is where you update that. However really you should strive to associate things        //by name if you can.         //update the peermap!        //Because this is over simplified it looks like the below code could be        //cut down. Really for your game you should have more player data here        //and how you update the peermap will be different on connect vs        //on reconnect.         peerMap[connectMsg.player.peerId] = {            name: name,                        lostConnection: false        };    }    else {                peerMap[connectMsg.player.peerId] = {            name: name,                        lostConnection: false                    };    }    return true;};const onPlayerAccepted = (player) => {    if (peerMap[player.peerId]) {        const connectingPLayer = {            playerName: peerMap[player.peerId].name                    };        //Again here is where you should add your data for whatever you are doing        sendToGlobalGroup(STATUS_PLAYER_CONNECTED, JSON.stringify(connectingPLayer));    }};const onPlayerDisconnect = (peerId) => {    //This is again based on our workflow where we try to communicate in terms of the player name    //as ofen as we can.    if (peerMap[peerId]) {        globalMessage(STATUS_PLAYER_DISCONNECTED, peerMap[peerId].name);        peerMap[peerId].lostConnection = true;    }    sendToGlobalGroup(STATUS_PLAYER_CONNECTED, JSON.stringify(connectingPLayer));};const onMessage = (gameMessage) => {    const userName = peerMap[gameMessage.sender].name;    doSomeActionBasedOnOpCodeAndUserName(username, gameMessage.opCode, gameMessage.getPayloadAsText())    //If everything works you should get a playername here and move forward in your game    //using that as the identifier    }Most of the actual game code in our game assumes a unique username. We try to make sure all the glueing is done in onPlayerConnect, onPlayerDisconnect, and onMessage. We try to abstract peerid away from being a thing that the actual game code needs to care about.Hope this helps.CommentSharerePost-User-2661520answered 3 years ago0@REDACTEDUSERCommentSharerePost-User-7028274answered 3 years ago0@REDACTEDUSERThe methods you have described are (practically) exactly how it's being currently handled, namely:PlayerID is our unique handler that signified the User/ClientApp making the call.PlayerID (and/or other details) are passed in the OnPayerConnect using the payload.This PlayerID is passed to the game object and held in a "PENDING" state. At this stage you can only marry against the PlayerSessionID. (Note: this overwrites the existing PlayerID record and prevents calls to the user - but is probably necessary as the client will have changed anyway.)When we get the peerID (OnPlayerAccepted) the player's details ("PENDING") is located by PlayerSessionID and changed to "JOINED" with the new PeerID - communications can start/resume with that user.When a client disconnects, the PlayerID record is marked as "DELETED" but not actually removed - in the hope that the player rejoins. This also stops communications.A tick function cleans up old states.DisadvantagesThere are two looping "findByPlayerSessionID" and "findByPeerID" functions. While possible to duplicate/cache these by separate arrays, those separate arrays will need cleaning up which is not ideal/adds extra work (even async).As noted in my opening post, each re-connection involves a trip back to the main server. Every time you minimise an iPhone app it will disconnect; so imagine that you create a GameRoom and share those details via Social - every time you share you need to reconnect.TL;DR: it's working - could be so much easier!Other notes (for others that may follow this thread):Another trick we are testing is using REDIS as a holder for passing larger information. It seemingly works very well in tests, but the REDIS calls need to await while fetching - so no idea how well this will work under load.We have also used SQS/SNS. We'll use SQS to get messages back to the main application but probably not into GameLift (timing / reliability concerns).CommentSharerePost-User-7028274answered 3 years ago0We have ran into these issues on our project recently.What we do is pre-reserve an additional player session for each player after they connect and send them the reserved ID after they connect. This way re-connection can be much faster because nobody has to wait for HTTP servers to create an additional player session on the spot.We had to modify the matchmaking ruleset to have double the player sessions, and to modify the matchmaking configuration to have "AdditionalPlayerCount" of half the players. A caveat is that player sessions can only be reserved for 1 minute so we have to rotate them throughout the player's session so it becomes even messier (we had to triple the player sessions instead of doubling them) but it seems to work.Would be happy to learn of any better techniques. Instant reconnection is really important for mobile games where trivial events such as receiving a notification can cause a disconnection.CommentSharezganswered a year ago"


Question: EC2 Auto Scaling group - Spot default maximum price when using multiple instance types

"If creating an Auto Scaling group with multiple instance types, the documentation  states:"If you don't specify a maximum price, the default maximum price is the On-Demand price, but you still receive the steep discounts provided by Spot Instances."Is the default price the On-Demand price of the instance type that will be spun up? Or is it the highest/lowest/other On-Demand price of instance types in the ASG?FollowComment"

Answer: "0Accepted AnswerMax-price is set to the On-Demand price of the instance type the ASG launches per instance. So if the ASG launches a c4.large, that instance will be launched with the Max-price set to the On-Demand price of c4.large. Then if it launches an m4.large, Max-price for that instance is set to the On-Demand price of m4.large, etc. etc.CommentShareAWS-User-9555161answered 3 years ago"


Question: ECS Fargate and ALB failed the health check with timeout (Node.js app)

"I have been trying for two days to run a Node.js application on ECS Fargate connected to a Load Balancer, but somehow it does not pass the health check.I use CDK to create the infrastructure and already use other applications with the same setup that work perfectly.The Dockerfile image works perfectly locally with docker-compose.I am not convinced that's a problem at the SG and infrastructure level, but I think more that it's application side, maybe you have an idea where to go to check.The application is not developed by me and uses Express as server with listener on port 9000.IMPORTANT: I created a small application to test with the same port and endpoint for heath check = it worked perfectly. (health check passed)I increased the ECS idle timeout etc. but nothingLooking at the Task Logs (see image), I see that the application returns a 200 status on the heath check endpoint, however if I try to call the load balancer from its address, the call goes to 504 timeout.I tried from an EC2 machine to connect to the task on the private IP-address: with telnet it seems to work, but if I curl on the health check endpoint, it goes to timeouts.Sometimes if I try to call the load balancer several times (perhaps while the task is starting), the application responds (i.e. I see that the endpoint is working), but immediately afterwards it goes into timeoutAny idea?FollowComment"

Answer: "0Are you using IPv6? If so, I am wondering if IPv6 CIDR block is allowed in your security group.Sorry if this is the wrong consideration.CommentShareyanswered 6 months agoMirko Pira 6 months agoI don't use IPv6Share"


Question: S3 prefix-selective cross-account permissions

Hi ExpertsI need to create selective permissions set on a single S3 bucket for different AWS accounts (either role or user) on a per prefix.example for the structure in the S3 bucket:my_s3_bucket/account1my_s3_bucket/account2I want to enable account1\2 programmatic access to put\get\delete objects on their corresponding prefixes without seeing\listing any other account`s prefixIs this a support pattern?If yes - how should it be implemented.ThanksFollowComment

Answer: "0Hi BoazG,check out this blog from aws in wich it is configured with iam-users.But it should be the same procedure with external accounts.Also you should configure it as a bucket resource policy.https://aws.amazon.com/de/premiumsupport/knowledge-center/iam-s3-user-specific-folder/CommentShareHeikoMRanswered 6 months ago"


Question: aws lex v2 export

"When exporting an AWS Lex v2 bot, I noticed that it is exported as multiple separate files. I wondered if there was a way to combine or extract these files from AWS into a single JSON file that includes all the information such as intents and slots.FollowComment"


Question: Alternatives to changing pitch

"I am using the neural mode in Polly. The neural mode does not allow for change in pitch. The only alternative I see is to increase the rate. However, I have tried this, and it sounds very unnatural. In order to emphasize words, I decrease the rate slightly, and increase the volume slightly. A slightly higher change in pitch would certainly help.FollowComment"

Answer: "0Hi, as far as I know, there is no alternative to changing the pitch for voices in neural mode. I've relayed this as a feature request to our team.As a hack-y workaround, and assuming that the voices in question are English, playing with the stress pattern of a multi-syllabic word via the phoneme tag may achieve the results you want, however this may not work for monosyllabic words.CommentShareanton-at-awsanswered 3 years ago0Thanks! I've actually been doing this, and I'm getting pretty good at it. But it does take a lot of work.CommentShareAntiochusanswered 3 years ago"


Question: ECR Cross Region Replication to New Region

"Hi I currently have ECR cross region replication configured for multiple repositories and it works well across 6 regions. I need to add a new region as a destination for the replication. I found the following request, https://github.com/aws/containers-roadmap/issues/1252, which is what I'm looking for, however it's in the proposed state, so not likely to be implemented soon. There is a workaround in the comments https://github.com/aws/containers-roadmap/issues/1252#issuecomment-833878176 which involves creating a temporary tag using the image manifest, deleting the original tag then using put-image for the original tag using the manifest, which triggers the replication. Finally cleaning up the temp tag at the source and all the destination regions.I've tested it and the solution works, but wondered if there is a better solution or there is an issue with deleting and pushing the same image tag? A couple of things I don't really like is the original image is deleted and recreated so will be unavailable for a short time. Also, the temp tag is replicated to all existing regions incurring a cross-region data transfer charge for every region not just the new region. Another solution would be to create some infrastructure in the source region, pull the image and push to the new registry which wouldn't require deleting the tag and would cost slightly less as I would only need to pay one cross region data transfer chargeFollowComment"

Answer: "4I have performed some research into your situation and have performed some testing in my personal lab environment. In this case, due to the current limitations of cross region replication, there are 2 options that I could think of. I have listed them below along with my thoughts:The workaround detailed in the GitHub request you mentioned. This involved creating a temp tag, deleting original image, using put-image thus triggering replication, then cleaning up the temp tags from source and destination registries in affected regions. This option is valid and there is no issue with deleting an image tag and then pushing the same tag again. Obviously, there are data transfer charges involved here as you already mentioned which cannot be avoided. Also there will be some downtime as you will be deleting images from the repos and recreating them.*The other option you mentioned is to create the destination registry, then pull down the images from the source registry and, then push into the destination registry. Then enable the additional region replication on the source registry so, moving forward, new images/tags will be replicated automatically. Only one set of data transfer charges would be needed here to push images to the new registry. Also there would be no downtime on the source registry as no images are being deleted.I'd recommend the second option since this has less impact on users of the registry and there is less risk of things being deleted accidentally. However, since there is manual manipulation of the images there is still risk something is missed when pushing the images to the new registry in the new region. Creating a script to automate this will help reduce risk.CommentShareGovind Kumaranswered a month ago"


Question: Can't select subnet at DocumentDB

"Hi,I'm actually trying to deploy a DOCUMENTDB cluster howerver our EC2 instances are in france, so i tried to create a vpc peering between france and Ireland i tested this one and it works.However when i'm trying to create my DOCUMENTDB I can't select any of my subnets or vpc.If someone can help, or has another solution than vpc peering for cross region using DOCUMENTDB.ThanksFollowComment"

Answer: "0When creating a DocumentDB cluster in EU(Ireland), you should be able to see the VPC and subnets in that region in the console. If you do not specify a VPC or subnet group when creating a cluster, the console/API will use the default VPC and subnet group in that region (if it has not been explicitly deleted - this is not normal).Once the cluster has been created in EU(Ireland), you should be able to connect using VPC peering between EU(Ireland) and EU(France).CommentShareAWS-User-2073714answered 4 years ago"


Question: Cognito authentication in a secure VoD platform

"Within a secure AWS video-on-demand platform, the goal is to authenticate users that can get access to content stored in s3.If there is a different service for authenticating users, how can one integrate that with AWS? Will this be in addition to Cognito or replace Cognito with the other authenticator?Are there specific steps to follow to accomplish this task?This is the architecture diagram for aws service:https://aws.amazon.com/blogs/media/creating-a-secure-video-on-demand-vod-platform-using-aws/FollowComment"

Answer: 1The answer to your question is to use Identity pools in conjunction to user pool . Identity pool provides temporary AWS credentials which will provide access to s3 objects.https://docs.aws.amazon.com/cognito/latest/developerguide/identity-pools.htmlCommentShareJoel_Ponukumatlaanswered 8 months agorePost-User-5553720 8 months agothank you. exploring this approach.Share


Question: Problem to perform simple SQL query via Athena SDK

"I tried to perform simple SQL query via Athena SDK. If I run the same SQL query in the web console, I got the correct result. Here is my input:$athenaClient->startQueryExecution(array('QueryExecutionContext' => array('Catalog' => 'AwsDataCatalog',                'Database' => 'db_mydatabase',),'QueryString' => 'SELECT * FROM "db_mydatabase"."my_table"','ResultConfiguration' => array('OutputLocation' => 'S3://my-s3bucket/my-folder/',),'WorkGroup' => 'primary',)When I query the result via GetQueryExecution(), I got this back: [Status] => Array                (                    [State] => FAILED                    [StateChangeReason] => [ErrorCode: INTERNAL_ERROR_QUERY_ENGINE] Amazon Athena experienced an internal error while executing this query. Please contact AWS support for further assistance. You will not be charged for this query. We apologize for the inconvenience.                    [SubmissionDateTime] => Aws\Api\DateTimeResult Object                        (                            [date] => 2022-08-24 15:03:52.024000                            [timezone_type] => 3                            [timezone] => UTC                        )                    [CompletionDateTime] => Aws\Api\DateTimeResult Object                        (                            [date] => 2022-08-24 15:03:54.168000                            [timezone_type] => 3                            [timezone] => UTC                        )                    [AthenaError] => Array                        (                            [ErrorCategory] => 1                            [ErrorType] => 401                            [Retryable] =>                             [ErrorMessage] => [ErrorCode: INTERNAL_ERROR_QUERY_ENGINE] Amazon Athena experienced an internal error while executing this query. Please contact AWS support for further assistance. You will not be charged for this query. We apologize for the inconvenience.                        )                )I know I probably have some setting related issues, as I can get the correct results in Amazon Console. Thanks!FollowComment"


Question: Block IP address permanently if WAF blocks IP programmatically

"How to block IP address permanently if WAF blocks request of that IP after matching a rate limit rule. Currently , I see manually listing that IP adresses in IP set details under AWS Waf. Instead of manually inserting that blocked IP address, how to make automatic list of blocked IP addresses once WAF blocks it.FollowComment"

Answer: "1Hi Techxonia!This article explains how can you update WAF rules in real time:https://aws.amazon.com/blogs/security/automatically-updating-aws-waf-rule-in-real-time-using-amazon-eventbridge/CommentSharePiotr Blonkowskianswered a year agoTechxonia a year agoThank you for response and still confused to solve the issue that WAF takes about 30 sec to act according to rule action (as per documentation). another issue that I could not solve is  https://repost.aws/questions/QUNQvDBuveTF655KQOTpxjfw/waf-didnt-block-requests-if-block-condition-matched-for-first-timeSummary of qnUsing locust , I made WAF test on my application. I made a rate limit based rule to block IP if requests exceed 100 in a default 5 minute window. When I tested with concurrency 400 with spawn rate 40, then WAF doesnot block after total requests exceeds 100. But when I stop the test and make a new test in locust and then only WAF blocks that IP for 5 min .I tested many times and found when I make a first locust test , WAF is not working even if condition meets. But it works if I stop that test and make a new test. My purpose of blocking through WAF seems not feasible since attacker can make attack with huge requests and that won't be blocked.I have enabled WAF on API gateway.Can I have idea on this?Share"


Question: Accessing job arguments from a Glue script

I've defined a Glue job that accepts parameters but couldn't find an example of how to access these parameters?FollowComment

Answer: "0Accepted AnswerYou can use read parameters like regular Python sys.argv arguments.import sysprint "This is the name of the script: ", sys.argv[0]print "Number of arguments: ", len(sys.argv)print "The arguments are: " , str(sys.argv)Alternatively, you can use Glue's getResolvedOptions to read the arguments by name. In this case, you will need to prepend the argument name with '--' e.g. --Arg1 Value1from awsglue.utils import getResolvedOptionsargs = getResolvedOptions(sys.argv, ['TempDir','JOB_NAME', 'Arg1'])print "The args are: " , str(args)print "The value is: " , args['Arg1']CommentShareAWS-User-4669487answered 6 years ago"


Question: App Runner fails to update on any environment variable change

"I have an App Runner service successfully running using a VPC connector. It is using port 3000 and running an HTTP health check on that port on the endpoint /health. I can see those requests in the logs. Everything seems fine.When I add a new environment variable via the console, the update fails after the health check (it does not say that the health check failed, but the logs stop there; it appears to timeout and then rollback). It mentions "service logs" but I do not see any logs in CloudWatch with any additional details.09-21-2022 02:23:37 PM [AppRunner] Service update failed. For details, see service logs.09-21-2022 02:17:00 PM [AppRunner] Performing health check on port '3000'.09-21-2022 02:16:59 PM [AppRunner] Provisioning instances and deploying image.09-21-2022 02:16:54 PM [AppRunner] Service status is set to OPERATION_IN_PROGRESS.09-21-2022 02:16:53 PM [AppRunner] Service update started.Note: I tried adding a dummy variable that has no effect on the app, and the same result occurred. Something appears to be broken here on App Runner.FollowCommentJosh 3 months agoWe're experiencing the same issue.Have a healthcheck set to /health, all working ok when there's an image update deployment. But if a user changes an env var via the console it results in a rollback deploy as it's hitting / for healthchecking.Share"

Answer: "-2The bug: if you change anything (or nothing) in the configuration using the console GUI, App Runner will silently change the HTTP endpoint to /!Perhaps the log statement thinks printing out / is redundant, but it is not because the log message appears identical to the original default TCP check.I got around this issue by adding a redundant health check on /.CommentSharedbartleanswered 8 months agovictor-guerra-lavanda 3 months agoI'm facing the same issue, is there a way for using the custom health check config instead of adding a redundant?Share"


Question: Missing Data in Athena Resultset using javascript SDK v3.0

"Below is a sample javascript sdk v3 Athena query that uses a prepared statement and parameters that are passed to the queryconst { AthenaClient } = require("@aws-sdk/client-athena");const REGION = 'us-east-1';const athenaClient = new AthenaClient({region: REGION});module.exports = {athenaClient};const tableName = 'employees';const sqlString = "SELECT firstname, lastname, state FROM " +  tableName + " WHERE  " +    "zipcode = ? AND " +     "companyname = ?";    const queryExecutionInput = {    QueryString: sqlString,    QueryExecutionContext: {        Database: 'sample-employee',        Catalog: 'awscatalogname'    },    ResultConfiguration: {        OutputLocation: 's3://athena-query-bucket'    },    WorkGroup: 'primary',    ExecutionParameters: ["12345", "Test 1"]}const queryExecutionId = await athenaClient.send(new StartQueryExecutionCommand(queryExecutionInput));const command = new GetQueryExecutionCommand(queryExecutionId);const response = await athenaClient.send(command);const state = response.QueryExecution?.Status?.State;if(state === QueryExecutionState.QUEUED || state === QueryExecutionState.RUNNING) {    await setTimeout(this.config.pollInterval); //wait for pollInterval before calling again.    return this.waitForQueryExecution(queryExecutionId);} else if(state === QueryExecutionState.SUCCEEDED) {    const resultParams = { QueryExecutionId: response.QueryExecution.QueryExecutionId, MaxResults: this.config.maxResults};    const getQueryResultsCommand:any = new GetQueryResultsCommand(resultParams);    const resp = await athenaClient.send(getQueryResultsCommand);    console.log("GetQueryResultsCommand : ", resp.ResultSet.ResultSetMetadata.ColumnInfo);    console.log("GetQueryResultsCommand : ", resp.ResultSet.Rows);} else if(state === QueryExecutionState.FAILED) {    throw new Error(`Query failed: ${response.QueryExecution?.Status?.StateChangeReason}`);} else if(state === QueryExecutionState.CANCELLED) {    throw new Error("Query was cancelled");}This table has about 50 records that match this query. When the query is run this is what is returned for all 50 records.{    "ResultSetMetadata":    {        "Rows":        [            {                "Data":                [                    {                        "VarCharValue": "firstname"                    },                    {                        "VarCharValue": "lastname"                    },                    {                        "VarCharValue": "state"                    }                ]            }        ]    }}Only the column names are listed but no data from these columns.I see the exact same issue when I try it using the CLI as wellaws athena start-query-execution --query-string "SELECT firstname, lastname, state FROM employees WHERE zipcode = CAST(? as varchar) AND  companyname = CAST(? as varchar)" --query-execution-context "Database"="sample-employee" --result-configuration "OutputLocation"="s3://athena-query-bucket/" --execution-parameters "12345"  "Test 1"aws athena get-query-execution --query-execution-id "<query-execution-id>"aws athena get-query-results --query-execution-id "<query-execution-id>"FYI ColumnInfo in the ResultSetMetadata object has been removed to keep the json simple{    "ResultSetMetadata":    {        "Rows":        [            {                "Data":                [                    {                        "VarCharValue": "firstname"                    },                    {                        "VarCharValue": "lastname"                    },                    {                        "VarCharValue": "state"                    }                ]            }        ]    }}So, not exactly sure what I might be doing wrong. Any help/pointers on this would be great. We are currently running Athena engine version 2.FollowCommentalatech EXPERT2 months agoDoes that query return any results if run directly in AWS Console?Share"

Answer: "0yeah it does. I have about 50 records that match the where clause and I can see it in the Athena Query console. When I run my sdk code, I also get 50 records, but it only has the column names like shown below when using the sdk.[    {        "Data":        [            {                "VarCharValue": "firstname"            },            {                "VarCharValue": "lastname"            },            {                "VarCharValue": "state"            }        ]    },    {        "Data":        [            {                "VarCharValue": "firstname"            },            {                "VarCharValue": "lastname"            },            {                "VarCharValue": "state"            }        ]    }    .....]CommentSharerePost-User-0047597answered 2 months ago"


Question: Does CodeBuild support cross-account access with CodeCommit?

"Is there any way to configure a CodeBuild project in AWS account 888888888888 to access a CodeCommit repo in AWS account 111122223333?If not, is such support on the road map?FollowComment"

Answer: 0Accepted AnswerThis is not supported today. Thanks for the feature request.CommentShareSubin Manswered 4 years ago


Question: Web application failed request monitoring

"Hi,First post so hopefully I will give you enough information.We have a web application in Elixir that uses API's and we require the ability to monitor any failed requests. API servers (Custom instances in Ubuntu) are behind a standard load balancer and connect to an RDS database.First question is; we know application trace monitoring is available in tools like Datadog etc but i wonder if it is possible to use Cloudwatch in any way. I am aware of the standard metrics with in CW but wondered if there is a way to extend so that i can monitor any failed attempts or API calls?Second question if the answer to the first is "Yes", how?Thanks in advanceFollowComment"

Answer: "0Hi There,We recently launched CloudWatch ServiceLens that helps you gain observability into application performance using metrics, logs, and traces. This can help you view the faults or errors associated with the requests flowing through your services. You can learn more here: https://aws.amazon.com/about-aws/whats-new/2019/11/announcing-amazon-cloudwatch-servicelens/You an also learn how to get started here:https://aws.amazon.com/blogs/aws/visualize-and-monitor-highly-distributed-applications-with-amazon-cloudwatch-servicelens/If you intend to monitor endpoints such as APIs, URLs by creating synthetic traffic, you can also use the newly previewed CloudWatch Synthetics. You can learn more here: https://aws.amazon.com/about-aws/whats-new/2019/11/introducing-amazon-cloudwatch-synthetics-preview/Best,CloudWatch TeamCommentShareAWS-User-0407771answered 4 years ago0Hi,Yes this has worked for the URL and API as requested. I am sure it can do more and i will look into it with the links you have supplied.Thanks againRobEdited by: lighty9909 on Nov 28, 2019 3:05 AMCommentSharelighty9909answered 4 years ago"


Question: Human Revision with Textract Expenses

"Hi, we are developing an invoice OCR, so we decided to use Textract to get info from the invoices and exepenses useing the AnalyzeExpense/StartExpenseAnalysis commands.  In some cases there are fields that are not detected by them. We saw that there is an option to implement Textract with A2I to train our a model. But as we can see in  the API documentantion it seems to only be available with AnalyzeDocument. Is there any option to integrate with the requests in which we are interested (AnalyzeExpense/StartExpenseAnalysis) ?FollowComment"

Answer: "1Hi,At the moment only the AnalyzeDocument API has A2I direct integration.If you want to include an A2I in your AnalyzeExpense workflow please use the Amazon Augmented AI with Custom Task Types.CommentShareIoananswered a year agoKuara a year agoThanks for your reponse. We will take a look.ShareKuara a year agoHi Ioan,We have been looking to use Custom Task Types, but we are not sure how we could use our model on Textract.ShareAlex_T EXPERTa year agoFor a custom A2I task type, you would first call Textract (AnalyzeExpense), then call A2I StartHumanLoop with the raw output and build a custom UI to present that to the user for adjustment. Your custom UI could be simple (for e.g. see A2I sample UIs repo) or complex (For e.g. see this sample using a SageMaker post-processing model too)Share"


Question: Failed ping healthcheck after deploying TF2.1 model with TF-serving-contain

"Hello,I would appreciate any input to the following issue.We want to deploy a trained Tensorflow Model to AWS Sagemaker for inference with a tensorflow-serving-container. Tensorflow version is 2.1. Following the guide at https://github.com/aws/sagemaker-tensorflow-serving-container the following steps have been taken:Build TF 2.1 AMI and publish it to AWS ECR after sucessful local testingSetting Sagemaker Execution Role Permissions for S3 and ECR.Pack saved TF model folder (saved_model.pb, assets, variables) into model.tar.gz4a. Created endpoint with realtime predictor:import osimport sagemakerfrom sagemaker.tensorflow.serving import Modelfrom sagemaker.tensorflow.model import TensorFlowModelfrom sagemaker.predictor import json_deserializer, json_serializer, RealTimePredictorfrom sagemaker.content_types import CONTENT_TYPE_JSONdef create_tfs_sagemaker_model():    sagemaker_session = sagemaker.Session()    role = 'arn:aws:iam::XXXXXXXXX:role/service-role/AmazonSageMaker-ExecutionRole-XXXXXXX    bucket = 'XXXXXXX-tf-serving'    prefix = 'sagemaker/tfs-test'    s3_path = 's3://{}/{}'.format(bucket, prefix)    image = 'XXXXXXXX.dkr.ecr.eu-central-1.amazonaws.com/sagemaker-tensorflow-serving:2.1.0-cpu'    model_data = sagemaker_session.upload_data('model.tar.gz', bucket, os.path.join(prefix, 'model'))    endpoint_name = 'tf-serving-ep-test-1'    tensorflow_serving_model = Model(model_data=model_data, role=role, sagemaker_session=sagemaker_session, image=image, framework_version='2.1')    tensorflow_serving_model.deploy(initial_instance_count=1, instance_type='ml.c4.xlarge', endpoint_name=endpoint_name)    rt_predictor = RealTimePredictor(endpoint=endpoint_name, sagemaker_session=sagemaker_session, serializer=json_serializer, content_type=CONTENT_TYPE_JSON, accept=CONTENT_TYPE_JSON)4b. Create batch-transform job:def create_tfs_sagemaker_batch_transform():    sagemaker_session = sagemaker.Session()    print(sagemaker_session.boto_region_name)    role = 'arn:aws:iam::XXXXXXXXXXX:role/service-role/AmazonSageMaker-ExecutionRole-XXXXXXXX'    bucket = 'XXXXXXX-tf-serving'    prefix = 'sagemaker/tfs-test'    image = 'XXXXXXXXXX.dkr.ecr.eu-central-1.amazonaws.com/sagemaker-tensorflow-serving:2.1.0-cpu'    s3_path = 's3://{}/{}'.format(bucket, prefix)    model_data = sagemaker_session.upload_data('model.tar.gz', bucket, os.path.join(prefix, 'model'))    tensorflow_serving_model = Model(model_data=model_data, role=role, sagemaker_session=sagemaker_session, image=image, name='deep-net-0', framework_version='2.1')    print(tensorflow_serving_model.model_data)    out_path = 's3://XXXXXX-serving-out/'    input_path = "s3://XXXXXX-serving-in/"        tensorflow_serving_transformer = tensorflow_serving_model.transformer(instance_count=1, instance_type='ml.c4.xlarge', accept='application/json', output_path=out_path)    tensorflow_serving_transformer.transform(input_path, content_type='application/json')Both steps 4a and 4b are running and in the AWS Cloudwatch logs we see successful starting of the instances, loading of the model and TF-Serving entering the event loop – see below:_2020-07-08T17:07:16.156_02:00+INFO:main:starting services_2020-07-08T17:07:16.156_02:00+INFO:main:nginx config:_2020-07-08T17:07:16.156_02:00+load_module modules/ngx_http_js_module.so;_2020-07-08T17:07:16.156_02:00+worker_processes auto;_2020-07-08T17:07:16.156_02:00+daemon off;_2020-07-08T17:07:16.156_02:00+pid /tmp/nginx.pid;_2020-07-08T17:07:16.157_02:00+error_log /dev/stderr error;_2020-07-08T17:07:16.157_02:00+worker_rlimit_nofile 4096;_2020-07-08T17:07:16.157_02:00+events { worker_connections 2048;_2020-07-08T17:07:16.157_02:00+}_2020-07-08T17:07:16.162_02:00+http { include /etc/nginx/mime.types; default_type application/json; access_log /dev/stdout combined; js_include tensorflow-serving.js; upstream tfs_upstream { server localhost:10001; } upstream gunicorn_upstream { server unix:/tmp/gunicorn.sock fail_timeout=1; } server { listen 8080 deferred; client_max_body_size 0; client_body_buffer_size 100m; subrequest_output_buffer_size 100m; set $tfs_version 2.1; set $default_tfs_model None; location /tfs { rewrite ^/tfs/(.*) /$1 break; proxy_redirect off; proxy_pass_request_headers off; proxy_set_header Content-Type 'application/json'; proxy_set_header Accept 'application/json'; proxy_pass http://tfs_upstream; } location /ping { js_content ping; } location /invocations { js_content invocations; } location /models { proxy_pass http://gunicorn_upstream/models; } location / { return 404 '{"error": "Not Found"}'; } keepalive_timeout 3; }_2020-07-08T17:07:16.162_02:00+}_2020-07-08T17:07:16.162_02:00+INFO:tfs_utils:using default model name: mode_2020-07-08T17:07:16.162_02:00+INFO:tfs_utils:tensorflow serving model config:_2020-07-08T17:07:16.162_02:00+model_config_list: { config: { name: "model", base_path: "/opt/ml/model", model_platform: "tensorflow" }_2020-07-08T17:07:16.162_02:00+}_2020-07-08T17:07:16.162_02:00+INFO:main:using default model name: model_2020-07-08T17:07:16.162_02:00+INFO:main:tensorflow serving model config:_2020-07-08T17:07:16.163_02:00+model_config_list: { config: { name: "model", base_path: "/opt/ml/model", model_platform: "tensorflow" }_2020-07-08T17:07:16.163_02:00+}_2020-07-08T17:07:16.163_02:00+INFO:main:tensorflow version info:_2020-07-08T17:07:16.163_02:00+_TensorFlow ModelServer: 2.1.0-rc1_dev.sha.075ffcf+_2020-07-08T17:07:16.163_02:00+TensorFlow Library: 2.1.0_2020-07-08T17:07:16.163_02:00+INFO:main:tensorflow serving command: tensorflow_model_server --port=10000 --rest_api_port=10001 --model_config_file=/sagemaker/model-config.cfg --max_num_load_retries=0_2020-07-08T17:07:16.163_02:00+INFO:main:started tensorflow serving (pid: 13)_2020-07-08T17:07:16.163_02:00+INFO:main:nginx version info:_2020-07-08T17:07:16.163_02:00+nginx version: nginx/1.18.0_2020-07-08T17:07:16.163_02:00+built by gcc 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1)_2020-07-08T17:07:16.163_02:00+built with OpenSSL 1.1.1 11 Sep 2018_2020-07-08T17:07:16.163_02:00+TLS SNI support enabled_2020-07-08T17:07:16.163_02:00+configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-g -O2 -fdebug-prefix-map=/data/builder/debuild/nginx-1.18.0/debian/debuild-base/nginx-1.18.0=. -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie'_2020-07-08T17:07:16.163_02:00+INFO:main:started nginx (pid: 15)_2020-07-08T17:07:16.163_02:00+2020-07-08 15:07:15.075708: I tensorflow_serving/model_servers/server_core.cc:462] Adding/updating models._2020-07-08T17:07:16.163_02:00+2020-07-08 15:07:15.075760: I tensorflow_serving/model_servers/server_core.cc:573] (Re-)adding model: model_2020-07-08T17:07:16.163_02:00+2020-07-08 15:07:15.180755: I tensorflow_serving/util/retrier.cc:46] Retrying of Reserving resources for servable: {name: model version: 1} exhausted max_num_retries: 0_2020-07-08T17:07:16.163_02:00+2020-07-08 15:07:15.180887: I tensorflow_serving/core/basic_manager.cc:739] Successfully reserved resources to load servable {name: model version: 1}_2020-07-08T17:07:16.163_02:00+2020-07-08 15:07:15.180919: I tensorflow_serving/core/loader_harness.cc:66] Approving load for servable version {name: model version: 1}_2020-07-08T17:07:16.163_02:00+2020-07-08 15:07:15.180944: I tensorflow_serving/core/loader_harness.cc:74] Loading servable version {name: model version: 1}_2020-07-08T17:07:16.163_02:00+2020-07-08 15:07:15.180995: I external/org_tensorflow/tensorflow/cc/saved_model/reader.cc:31] Reading SavedModel from: /opt/ml/model/1_2020-07-08T17:07:16.163_02:00+2020-07-08 15:07:15.205712: I external/org_tensorflow/tensorflow/cc/saved_model/reader.cc:54] Reading meta graph with tags { serve }_2020-07-08T17:07:16.164_02:00+2020-07-08 15:07:15.205825: I external/org_tensorflow/tensorflow/cc/saved_model/loader.cc:264] Reading SavedModel debug info (if present) from: /opt/ml/model/1_2020-07-08T17:07:16.164_02:00+2020-07-08 15:07:15.208599: I external/org_tensorflow/tensorflow/core/common_runtime/process_util.cc:147] Creating new thread pool with default inter op setting: 2. Tune using inter_op_parallelism_threads for best performance._2020-07-08T17:07:16.164_02:00+2020-07-08 15:07:15.328057: I external/org_tensorflow/tensorflow/cc/saved_model/loader.cc:203] Restoring SavedModel bundle._2020-07-08T17:07:17.165_02:00+2020-07-08 15:07:16.578796: I external/org_tensorflow/tensorflow/cc/saved_model/loader.cc:152] Running initialization op on SavedModel bundle at path: /opt/ml/model/1_2020-07-08T17:07:17.165_02:00+2020-07-08 15:07:16.626494: I external/org_tensorflow/tensorflow/cc/saved_model/loader.cc:333] SavedModel load for tags { serve }; Status: success: OK. Took 1445495 microseconds._2020-07-08T17:07:17.165_02:00+2020-07-08 15:07:16.630443: I tensorflow_serving/servables/tensorflow/saved_model_warmup.cc:105] No warmup data file found at /opt/ml/model/1/assets.extra/tf_serving_warmup_requests_2020-07-08T17:07:17.165_02:00+2020-07-08 15:07:16.632461: I tensorflow_serving/util/retrier.cc:46] Retrying of Loading servable: {name: model version: 1} exhausted max_num_retries: 0_2020-07-08T17:07:17.165_02:00+2020-07-08 15:07:16.632484: I tensorflow_serving/core/loader_harness.cc:87] Successfully loaded servable version {name: model version: 1}_2020-07-08T17:07:17.165_02:00+2020-07-08 15:07:16.634727: I tensorflow_serving/model_servers/server.cc:362] Running gRPC ModelServer at 0.0.0.0:10000 ..._2020-07-08T17:07:17.165_02:00+warn getaddrinfo: address family for nodename not supported_2020-07-08T17:07:17.165_02:00+2020-07-08 15:07:16.635747: I tensorflow_serving/model_servers/server.cc:382] Exporting HTTP/REST API at:localhost:10001 ..._2020-07-08T17:07:17.165_02:00+evhttp_server.cc : 238 NET_LOG: Entering the event loop …But both (endpoint and batch transform) fail the Sagemaker Ping Health check with:_2020-07-08T17:07:32.169_02:00+2020/07/08 15:07:31 error 16#16: *1 js: failed ping{ "error": "Could not find any versions of model None" }_2020-07-08T17:07:32.170_02:00+_169.254.255.130 - -08/Jul/2020:15:07:31 _0000 "GET /ping HTTP/1.1" 502 157 "-" "Go-http-client/1.1"+Also, when tested locally with self build tf-serving-container the model is running without problems and can be queried with curl.What could be the issue?Thank you for your help.Best regardsDominikEdited by: DominikPanther on Jul 9, 2020 5:27 AMFollowComment"

Answer: "0The solution to the problem is as follows:Environmentvariable "SAGEMAKER_TFS_DEFAULT_MODEL_NAME" needs to be set to correct model name e.g. "model"import osimport sagemakerfrom sagemaker.tensorflow.serving import Modelfrom sagemaker.tensorflow.model import TensorFlowModelfrom sagemaker.predictor import json_deserializer, json_serializer, RealTimePredictorfrom sagemaker.content_types import CONTENT_TYPE_JSONdef create_tfs_sagemaker_model():    sagemaker_session = sagemaker.Session()    role = 'arn:aws:iam::XXXXXXXXX:role/service-role/AmazonSageMaker-ExecutionRole-XXXXXXX    bucket = 'tf-serving'    prefix = 'sagemaker/tfs-test'    s3_path = 's3://{}/{}'.format(bucket, prefix)    image = 'XXXXXXXX.dkr.ecr.eu-central-1.amazonaws.com/sagemaker-tensorflow-serving:2.1.0-cpu'    model_data = sagemaker_session.upload_data('model.tar.gz', bucket, os.path.join(prefix, 'model'))    endpoint_name = 'tf-serving-ep-test-1'    env = {"SAGEMAKER_TFS_DEFAULT_MODEL_NAME": "model"}    tensorflow_serving_model = Model(model_data=model_data, role=role, sagemaker_session=sagemaker_session, image=image, name='model', framework_version='2.1', env=env)    tensorflow_serving_model.deploy(initial_instance_count=1, instance_type='ml.c4.xlarge', endpoint_name=endpoint_name)    rt_predictor = RealTimePredictor(endpoint=endpoint_name, sagemaker_session=sagemaker_session, serializer=json_serializer, content_type=CONTENT_TYPE_JSON, accept=CONTENT_TYPE_JSON)This creates the endpoint correctly and passes the ping health check with:2020-07-16T12:08:20.654_02:00 10.32.0.2 - -[16/Jul/2020:10:08:20 _0000 "GET /ping HTTP/1.1" 200 0 "-" "AHC/2.0"CommentShareDominikPantheranswered 3 years ago"


Question: Cost explorer boto3 cost and usage without specific tag

"How could I apply filter for cost and usage report using boto3. I want to search for all entitites that do not have specific tag.In cost explorer UI you could specify NoTag and choose the tag you want.Should I just pass empty value for tag name?            {                'Tags': {                    'Key': 'some_tag',                    'Values': '',                }FollowCommentJoeSomontan a year agoNot sure about your json method, but I have something similar when checking for Backups on ebs volumes.if tag['Key'] == 'Backup' and tag['Value'] == ''  ##Key name exists but value is null.print('Backup Key found, but value is null.')But to answer your question, yes,  I used two single quotes to get the null values.ShareChris_P a year agoI'm trying to figure out if you are trying to use the Cost Explorer api or if you are trying to query your cost and utilization report. Those are two different things.Share"

Answer: 0You could apply a tag with an empty value.  You will then have to enable the tag as a Cost Allocation Tag in order for the tag to show in your cost and usage report (CUR).  Once added the tag will create a column in your CUR report named 'resource_tags_user_some_tag'.  This will happen within 24 hours.  You would then be able to view resources which do not have a value within this column.I would also recommend creating the CUR/Athena integration to easily query your CUR data.  Please note there is a small charge for this as it creates infrastructure to hydrate the Athena table.CommentShareamazonchrisanswered a year ago


Question: "Pearson Vue exam technical issue, do I need to wait 14 days?"

"Hi,I had a technical issue  while giving the exam on 18th March 2023. The exam was interrupted. After many hours with customer service, they gave me a voucher for a new test, and told me I could reschedule.  However, I got an email from AWS today that I of course failed the exam (since I only attempted 10 mins of my exam after which it stopped), and that I can reattempt in 14 days. I just want to get this exam over with as soon as possible as it affects my mid year reviews. Can AWS help and lift off this restriction of 14 days ?Exam Registration id : 444775942FollowComment"

Answer: "0Please submit a ticket to the AWS Training & Certification customer support team, and they will provide assistance. If you already submitted a case, please allow at least 48 hrs to get a response.CommentShareNelliT-AWSanswered 2 months ago"


Question: AWS Activate credit usage notifications

"Being in the AWS Activate startup program, we've been allocated free credits. I know how to setup alerts for billing usage, but how can I setup alerts for credit usage?For example; when credits are 50%-90% depleted I am notified.ThanksFollowComment"

Answer: "0Hello,Based on your question, I'd recommend speaking with our Billing Support team directly for guidance around tracking credit your balance.You can do this by creating a case from the Support Center, here: go.aws/support-center.-- Ben G.CommentShareEXPERTAWS Support - Benanswered 3 months ago"


Question: Installing Tableau on Server and Serverless Environment

"Hello,I have two questions regarding the tableau Server and InstallationCan we install Tableau on AWS Elastic Beanstalk Environment running Ec2 instance?Also is there a way to install Tableau Server on Serverless Environments such as AWS Lamda or AWS Fargate?FollowComment"

Answer: 1Accepted AnswerI would not recommend to do so.There is a quickstart available to install Tableau: https://aws.amazon.com/de/quickstart/architecture/tableau-server/More Details in the Quickstart documentation: https://aws-quickstart.s3.amazonaws.com/quickstart-tableau-server/doc/tableau-server-on-the-aws-cloud.pdfAll available and recommended options can be found in the Tableau Doku: https://help.tableau.com/current/server-linux/en-us/ts_aws_deployment_options.htmCommentShareMarcoanswered a year agoEXPERTFabrizio@AWSreviewed a year ago


Question: What is the benefit of using the MyRocks storage engine on RDS for MariaDB?

Latest RDS for MariaDB 10.6 has support for storage engine MyRocks. What kind of workloads have you found that are best suited for it?FollowComment

Answer: "0Certain OLTP workloads appear to benefit from MyRocks as the storage engine.Bulk inserts are slower on MyRocks than on InnoDB, but the Sysbench oltp_read_write.lua script shows better performance with MyRocks.(third-party link, not validated by AWS)https://minervadb.com/index.php/2018/06/06/a-friendly-comparison-of-innodb-and-myrocks-performance/CommentShareorlyandicoanswered a year ago"


Question: "Switch From Unreal Engine 4 to Lumberyard ,how to go about it?"

I know unreal engine 4 and unity fairly well but when I stumbled upon lumberyard I thought of giving it a try but when editor launched I found myself scratching my head Like clicking on fbx file doesn't open animation editor and stuff. I am really into Lumberyard so would like to ask the best resources to learn lumberyard and its API.ThanxFollow

Answer: "0Accepted AnswerTheses tutorials can help https://www.youtube.com/channel/UCEHxPR3uLODasO_XdZIplXwSharerePost-User-7620461answered 5 years ago0And these are the documented tutorials for lumberyard : https://gamedev.amazon.com/forums/tutorialsSharerePost-User-7620461answered 5 years ago0Thankx for replying ;but it seems like the videoes are really old like 2 years old.so my question is are they still relevant.SharerePost-User-7943541answered 5 years ago0Thank for replying, the link was of great use. If you know any other links please let me know.SharerePost-User-7943541answered 5 years ago"


Question: Redshift snapshots - incremental/full and retention

"Hi,For compliance reasons, my client requires two types of backup - a daily backup with 35 day retention (although I assume they read the docs and decided on 35 days as it's the limit...) but also monthly full backup which is kept for 2 years (24 months).I'm a little confused by the documentation -Firstly, the snapshots are incremental but each one can be used to do a full restore to a new cluster - how is this possible? Is it incremental since the last snapshot and if so, what happens if the previous snapshots are deleted?Secondly, I can see there's a limit of 20 snapshots (which you can request to change). Before I even consider manual monthly snapshots, if my automated snapshot is daily and is retained for 35 days I am going to have >35 automated snapshots at any point in time - will this be an issue?Thirdly, if my DWH size is 24TB and  I am somehow (?) able create a full database backup via snapshots, I'm going to be paying for the storage of 576 TB (24 months x 24TB) in S3 which will be at a very high cost. Ideally, we'd be able to store this in Glacier but I understand we don't have access to the S3 bucket containing snapshots.So my questions are:How is a full cluster restore performed from an incremental snapshot?Is this still possible if there's only one incremental snapshot (all the others are deleted?)Will I exceed the 20 snapshot limit by having a 35 day retention period?Is it possible to create a "full" backup in a snapshot?Is it possible to access snapshot locations on S3 so that we can move them to Glacier and still make them available to Redshift for restore?Thanks in advance,JFollowComment"

Answer: "0Not sure if you'll get an AWS response on this on here. Raise it with your account manager if you need an official answer.Regarding snapshots, we users have no access to the mechanism but AFAICT it keeps track of changed blocks and ensure that it has at least one copy of each populated block for the time period specified. Consult the docs for details of what a block is: http://docs.aws.amazon.com/redshift/latest/dg/c_columnar_storage_disk_mem_mgmnt.htmlRe full backups retained for 2 years, the snapshot mechanism doesn't offer this. You'd have to UNLOAD every table to S3 and use a lifecycle to have the bucket move objects to Glacier automatically after, say, 7 days. This sounds like a huge pain in the ass to me.As an alternative we retain all of the incoming load data on S3 and design our ETL so that it can be reloaded as needed. Our lifecycle puts the objects into Infrequent Access after 7 days and Glacier after 90 days.CommentSharejoeharris76answered 6 years ago"


Question: Is it possible to migrate a Pinpoint Phone Number into another account?

I have a toll-free number purchased and registered in my Production AWS account and I want to use the same phone number in another AWS account.FollowComment


Question: How do I troubleshoot Amazon S3 Batch Operations issues?

"I'm trying to create an Amazon Simple Storage Service (Amazon S3) Batch Operations job for objects stored in my bucket. However, Amazon S3 keeps returning an error or my batch job keeps failing. How do I troubleshoot this?FollowComment"

Answer: "0Hi there, thanks for your question. Two things to try would be confirming that you've 1) added a trust policy so that S3 Batch Operations can assume the IAM role, discussed here: https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-iam-role-policies.html, and 2) would be to configure a completion report for your job in case the errors are occurring at the object level once the job progresses to the Active phase. That completion report would then display object level error/failure info.CommentShareawsrwxanswered a year ago"


Question: Tableau version upgrade

What are the steps to upgrade Tableau version 2021.3.6  to 2021.3.15 .the existing version is running in aws ec2. What is the best way.And what about new licence etcFollowComment


Question: CloudFront to ALB connection

"Hi,I set up CloudFront to serve static front-end from S3 and need some dynamic back-end as well. So, I set up redirection for some requests to ALB as origin (ALB runs Lambda) with cache disabled. Direst requests to ALB work fine and fast (~200ms), but when requests go to CF, only ~50% really work. For other 50% CF returns 502 and ALB doesn't receive any requests.My location is close to ALB region, so delays shouldn't be.Tried adjusting TLS versions, forwarding to ALB "native" dns as well as to custom subdomain. The result is the same: half of the times connection doesn't happen. When it happens - it works fast.FollowComment"

Answer: "0Found the issue. As ALB now forces to add two subnets and I was setting up qa website, I added second randomly and that second was private SN. That's why approx 50% calls failed.Really, AWS shouldn't force to add second subnet. For prod it is a good thing, but for qa just brings troubles.Edited by: Corwin on Aug 28, 2020 10:18 AMCommentShareCorwinanswered 3 years ago"


Question: Aurora Postgres Logical Replication in Java

"My goal is to stream the Postgres WAL inside a system that runs on the JVM. I am using Aurora RDS Postgres.If I try to run the following:    PGReplicationStream stream =        pgConnection.getReplicationAPI()            .replicationStream()            .logical()            .withSlotName("test_slot")            .withStartPosition(lsn)            .start();I get the error:; (err) ERROR: syntax error at or near "START_REPLICATION"; (err)   Position: 1Postgres logs the following command::ERROR:  syntax error at or near "START_REPLICATION" at character 1:STATEMENT:  START_REPLICATION SLOT test_slot LOGICAL 0/40DCC70;This does look like the command the jdbc driver is trying to write. (as seen here)START_REPLICATION does seem to be a command Postgres supports. Is it that Aurora RDS does not support this? If so, is there an alternative way to do this?FollowComment"

Answer: "0Accepted AnswerThe problem was that I was using the wrong connection. I had a HikariCP, and thought I could just take one of the connections from it.But what you need to do, is to create a specific 'replication' connection. Something like:    Properties props = new Properties();    PGProperty.USER.set(props, "user");    PGProperty.PASSWORD.set(props, "pass");    PGProperty.ASSUME_MIN_SERVER_VERSION.set(props, "9.4");    PGProperty.REPLICATION.set(props, "database");    PGProperty.PREFER_QUERY_MODE.set(props, "simple");    Connection con = DriverManager.getConnection(url, props);CommentSharestopaanswered a month ago"


Question: KMS events are not being excluded form CloudTrail Management Events

"Hi everyone!I recently struggled with some CloudTrail costs in my account, to give some context, I enabled DynamoDB Global tables for two regions, using encryption with a CMK in the primary region and creating a replica of this key in the second one.The thing is, after setting up the global table, the CloudTrail costs started to significantly increasing, I notice that most of the events recorded were Decrypt events with the source IP address replication.dynamodb.amazonaws.com and the event source was kms.amazonaws.com. As you might guess, the trail wasn't excluding AWS KMS events for management events, and after changing the configuration I expected those costs to decrease again but they keep the same, also, the event history still shows management events from kms.amazonaws.com. Is there something I might be missing?This is the Terraform configuration I'm using for setting up CloudTrail.resource "aws_cloudtrail" "security" {  name                          = "security"  s3_bucket_name                = var.supervising_cloudtrail.s3_bucket_name  s3_key_prefix                 = "audit"  kms_key_id                    = var.supervising_cloudtrail.kms_key_arn  enable_log_file_validation    = true  enable_logging                = true  is_multi_region_trail         = true  include_global_service_events = true  insight_selector {    insight_type = "ApiCallRateInsight"  }  event_selector {    read_write_type                  = "All"    include_management_events        = true    exclude_management_event_sources = ["kms.amazonaws.com"]    data_resource {      type   = "AWS::Lambda::Function"      values = ["arn:aws:lambda"]    }    data_resource {      type   = "AWS::S3::Object"      values = ["arn:aws:s3:::"]    }    data_resource {      type   = "AWS::DynamoDB::Table"      values = ["arn:aws:dynamodb"]    }  }}FollowCommentMiguelUT 8 months agoWhen you look at the trail in CloudTrail in the AWS Console under the "Management Events" section do you see that KMS Events are being excluded?ShareOsain 8 months agoHi @MiguelUT! Thanks for answering!Yes, I see the option for excluding KMS events from management events as enabled (With the yes option)Share"

Answer: "1Accepted AnswerIf you are using the "Event History" feature to view events in the CloudTrail console, you are not able to exclude KMS events from that dashboard.  See the note in Logging management events for trails in the Management Events section.  However, you should not see those events showing up in your S3 bucket where the trail events are stored.CommentShareMiguelUTanswered 8 months agoOsain 7 months agoYou're right, thanks to Athena I was able to see the real events that are causing the high costs, which are the events GetRecords by the agent replication.dynamodb.amazonaws.com  from the main and the replica region. Is there a way to filter those events to be tracked by CloudTrail?I think an option can be reducing the tracking scope to the main DynamoDB and selecting to save just write operation.ShareMiguelUT 7 months agoThe GetRecords event is a data event (as opposed to a management event).  See Logging data events for trails for information on how to set up an advanced selector for your events.ShareOsain 7 months agoThanks! That solved the issue, I ended up using advanced selectors for excluding the needed events. Thanks, Miguel!Share"


Question: Publish MQTT from Lambda C++

"Hi,I developed a Lambda in C++ that publishes messages to MQTT using the IoTDataPlaneClient, however it takes 1 full second to send the first message, any subsequent messages (within the same request) take about 10 ms. Is there any way to improve the speed of this first message?FollowComment"

Answer: "0Hi,For IoTDataPlaneClient within Lambda, if Lambda's are being reused, moving the instantiation of client outside of the main event handler can reduce subsequent calls. Then if the same Lambda is called again, that client can be reused.What I haven't investigated is how the underlying client managed state, and if those parameters can be adjusted. The data plane client is making HTTP POSTs for the different operations such as Publish, so creating an HTTP persistent connection could be an approach to keep a connection pool open. Not a C++ expert, but I found this example that may help.CommentShareGavin_Aanswered 3 months agorePost-User-2247908 3 months agoThanks for the reply,Would there be a way to maintain the connection across Lambda invocations?ShareGavin_A 3 months agoApologies, I misread this as a full MQTT connection (when I definitely saw the reference to IoTDataPlaneClient too! :) ). I've updated my answer with guidance on that.Share"


Question: Extremely slow queries on Lakeformation governed tables via Athena

"Hello, we are experiencing extremely slow queries against lake formation governed tables when using the Athena console and/or jdbc clients. For example, a simple count(*) of a three-row table takes something like two-three minutes and the execution details and data scanned indicate that this time is NOT being spent actually processing data. There is no cross-account data movement happening, and we are using parquet as our data storage format. The tables are being created by awswrangler. This is compared with low-single digit seconds for the same query against an external table. Any ideas what is going on?FollowComment"


Question: Unable to connect to db

"I tried to connect to my db  (mariadb) using HeidiSql and Navicat, connection fails with "unknown error". I can still connect through a connection in an application.  First time in several months I have tried. and first time since they apparently upgraded security, always worked in the pastFollowComment"


Question: Pricing difference in Nat Gateway

"What is the pricing difference for NAT Gateway when using a single Elastic IP, multiple Elastic IPs ?FollowComment"

Answer: 1NAT gateways are charged by the hour and by data transmission.The fee concept should remain the same whether there is a single or multiple Elastic IP.https://aws.amazon.com/vpc/pricing/?nc1=h_lsCommentShareEXPERTRiku_Kobayashianswered 10 days ago


Question: Can Amazon Tap be used as a Personal Device?

"Hi,I wonder if Amazon Tap can be a Personal Device or A4B is not compatible with Amazon Tap.FollowComment"

Answer: "0Accepted AnswerYes, you can use Tap as a personal device. Tap is not supported as shared device.Please note not all Alexa features are available on the Amazon Tap.CommentShareMilo Oostergoanswered 3 years ago"


Question: StreamManager | Recover Persisted Data from File

"I built a custom component that uses aws.greengrass.StreamManager component to export to a Kinesis stream.I'm sending dummy helloaaaaaaaa like this:self.stream_manager_client.append_message(self.modbus_data_stream_name, b'helloaaaaaaaaaaaaaa')The message stream persists the messages in the file system in .index and .log files. Like so:The content of the .log files looks like the following, which appears to be some "meta data" mixed with my message.One use case we're trying to support is this - when the device loses internet, a technician can retrieve the device and regain the messages it was supposed to upload.I'm wondering if I can get support on how to decode the files in order to parse my messages and any meta data.FollowComment"

Answer: "2Accepted AnswerEven when offline, you can use the read_messages API to read data from a stream from an arbitrary starting point. https://docs.aws.amazon.com/greengrass/v2/developerguide/work-with-streams.html#streammanagerclient-read-messagesCheers,MichaelCommentShareEXPERTMichaelDombrowski-AWSanswered 6 months agoMichaelDombrowski-AWS EXPERT6 months agoThis isn't documented because you aren't supposed to read the data manually, I absolutely will point you to the read messages API to do this for you.With that said, the header format is 32 bytes total, ending with the payload length:+-----------+---------+-----------+--------------+---------+-----------+---------------+| magicSeq  | version | relSeqNum | bytePosition |  crc       | timestamp | payloadLength ||  3 bytes     | 1 byte   |  4 bytes       |  4 bytes.       | 8 bytes |  8 bytes      |  4 bytes             |+-----------+---------+-----------+--------------+---------+-----------+---------------+Shareictwist 6 months agoThanks for suggesting the read_messages API. Would this API only work when called inside of a Greengrass component? Is there an API we can use without spinning up a Greengrass component?ShareMichaelDombrowski-AWS EXPERT6 months agoNormally you'd need a component yes just to authenticate with Stream manager, but you can also disable authentication in Stream manager. STREAM_MANAGER_AUTHENTICATE_CLIENT https://docs.aws.amazon.com/greengrass/v2/developerguide/stream-manager-component.html#stream-manager-component-configurationShareictwist 6 months agoOk thanks for that pointer - I will verify that.I have another follow-up question: It appears to me that the StreamManager persists the data regardless of whether the data is successfully exported, what's the intention behind that design? An alternative in my mind is to remove the successfully exported data, which will save storage space in the core device.Share"


Question: Passing HTTP Headers from API Gateway HTTP API to Step Function?

"I'm using SAM and I want to connect an HTTP POST endpoint from API Gateway to an AWS Step Function. I'm able to forward the request body but I'm unable to also pass the headers. This is my YAML definition:  /cancelOrder:    post:      responses:        default:          description: "zzzz"      x-amazon-apigateway-integration:        integrationSubtype: "StepFunctions-StartExecution"        credentials:          Fn::GetAtt: [zzzz, Arn]        requestParameters:          Input: "$request.body"          StateMachineArn:            Fn::GetAtt: [zzzz, Arn]        payloadFormatVersion: "1.0"        type: "aws_proxy"        connectionType: "INTERNET"        timeoutInMillis: 10000This works but I'm only able to receive the HTTP POST body, not the headers.Input: "$request.body" is, I suppose, the part that's parsing the JSON and sending it to my function. But I need both the Body and the HTTP headers.Is there a way to do this?FollowComment"

Answer: 0What you want is not supported by HTTP API. You can achieve this with REST API and request mapping.CommentShareEXPERTUrianswered a year ago


Question: "Redshift Disaster Recovery, attempting to restore tables to cluster in another account."

"Setting up Redshift disaster recovery. I'd like to be able to restore data (tables, schema) to another cluster in a DR account. It seems sharing snapshots wont as restoring tables needs to take place in the cluster they were created. Restoring snapshot to a provisioned cluster isn't ideal as the cluster in the DR account would be provisioned and managed by IAC. Wondering what options I have? Possibly using COPY, UPLOAD sql commands and store data in s3?FollowComment"

Answer: "01 -- if you want to just have only few tables and schema available to DR site on you can unload on S3 and load it to DR site Cluster when needed.2 --  You can also run dual ETL to load data in primary and DR cluster for specific tables.For both option 1 & 2 You can use Redshift Serverless as a DR cluster, which will be auto paused when not being used and will be available in minutes  when you need it.3 -- AZ Failure  - You may want to look into CROSS AZ Relocation feature of Redshift. This will have fail over cluster available with no data loss and will be available in minutes.https://docs.aws.amazon.com/redshift/latest/mgmt/managing-cluster-recovery.html4 -- Region Failure  - You can enable cross region snapshot to copy data in other region in a automated fashion and restore it to the DR cluster when required.https://aws.amazon.com/blogs/aws/automated-cross-region-snapshot-copy-for-amazon-redshift/CommentShareNita_Sanswered 10 months ago"


Question: PHP7.3 - Can't get ssh2_connect working

"This is my first time here and I could not find anything referencing this, so any help is appreciated. Keep im mind I am about 30 days in with EB so I am still a novice, but I do understand the basics and have loaded and ran a handful of sites already.I noticed EB upgraded to 7.3 which is great news, but now I cannot get my application to recognize the ssh2_connect() function.Currently I am adding this into my extensions:files:  "/etc/php.d/ssh2.ini" :    mode: "000755"    owner: root    group: root    content: |      extension=ssh2.soWhich, this seems to add it correctly since the php.ini shows it in there. I have also rebooted the instance. Still, anytime I attempt to use our SSH2 functionality we get:"Error: Call to undefined function ********ssh2_connect() in ********.php on line 157"When checking PHP version here is my CLI notice:[ec2-user@ip-*********** php.d]$ php -vPHP Warning:  PHP Startup: Unable to load dynamic library 'ssh2.so' (tried: /usr/lib64/php/7.3/modules/ssh2.so (/usr/lib64/php/7.3/modules/ssh2.so: cannot open shared object file: No such file or directory), /usr/lib64/php/7.3/modules/ssh2.so.so (/usr/lib64/php/7.3/modules/ssh2.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0PHP 7.3.11 (cli) (built: Oct 31 2019 18:30:52) ( NTS )Copyright (c) 1997-2018 The PHP GroupZend Engine v3.3.11, Copyright (c) 1998-2018 Zend Technologies    with Zend OPcache v7.3.11, Copyright (c) 1999-2018, by Zend TechnologiesFrom this it seems like the ssh2.so file does not exist, but the phpinfo() says it does. So... should I attempt to manually install libssh2? Is there a way to install it on the fly with EB configs?Any help or insight would be appreciated!FollowComment"

Answer: "0I found my own answer. It seems I was getting a false response from my php.ini regarding SSH2 being installed. Also, the SSH2 that it showed installed was also not compatible with PHP7.3. I terminated the EB instance and started a fresh one, then I was able to see that SSH2 was not installed at all.  Below is the basic process to get SSH2 on PHP 7.3 in case anyone needs:Check if installed:php -r "print_r(get_loaded_extensions());"Install libssh2-devel first:sudo yum install libssh2-develGet PHP7.3 compatible version:wget https://pecl.php.net/get/ssh2-1.2.tgzUnpack and build:tar -xzvf ssh2-1.2.tgzcd ssh2-1.2phpize./configuremakemake installVerify installed now:php -r "print_r(get_loaded_extensions());"CommentSharerpearlanswered 3 years ago"


Question: AppSync (CF): Does DbClusterIdentifier expect an ARN or a name?

"Hi,I have a question about the DbClusterIdentifier field for AppSync RelationalDatabase RdsHttpEndpointConfig (https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-relationaldatabaseconfig-rdshttpendpointconfig.html)Doc states: "The database cluster identifier of the rdshttpendpoint."But it seems not to be working, and instead, it should be the cluster's ARN.See this issue: https://github.com/sid88in/serverless-appsync-plugin/issues/232Is the doc wrong?Bonus question:How to get a Cluster's ARN from CF?  According to the doc: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.htmlNeither Ref, nor Fn::GetAtt  expose it.Thank youFollowComment"

Answer: "0Accepted AnswerIssue is correct, the dbClusterIdentifier is an ARN. I will make a note to update the documentation to specify this.CommentShareAWS-User-0691748answered 4 years ago0Awesome, thank youCommentSharebboureanswered 4 years ago"


Question: Cant launch new EB ruby env - failing on AWSEBInstanceLaunchWaitCondition

"Hello,I'm attempting to spin up a new application environment in Elastic Beanstalk with a Ruby 2.6 and Passenger build. But I can't get past a AWSEBInstanceLaunchWaitCondition failure on every attempt.I cannot edit configs after the failed launch because the app is never in "Ready" state, so I'm stuck just rebuilding over and over again.If this is an issue with my default VPC, Security Groups, or whatever, how can I tell beanstalk to create a new VPC and security group with the correct configurations?I've tried the following options through the console:selecting both a Ruby and a Node build just to see if Ruby platform was the problemDeploy Sample ApplicationDeploy my new appDeploy an app that's successfully on running on Beanstalk on my other accountFree Tier Eligible optionHigh Availability optionCustom configlonger timeoutdo not fail on health check failuremore instances in auto scaling groupI've tried via the console and the CLI. Same AWSEBInstanceLaunchWaitCondition error launching a new environment from the CLI. I'm probably racking up charges due to all thee failed deployments so reaching out for some help at this point. I haven't had this issue with beanstalk before. Current failed env id is  e-ryvsuzzkjr though I have created and deleted at least 10 others over the last few days.Thanks!Edited by: harrisjb on Apr 30, 2019 1:18 AMFollowComment"

Answer: "0As suspected, this was an issue with the configuration of my EC2 VPC that was created by beanstalk.Route table was fine, had an internet gateway attached.ACL rules were set to deny all inbound traffic, added rules to allow both ssh traffic on port 22 as well as all traffic and the health check started to pass when the environment was rebuilt.If this is not the correct approach I'm open to hearing suggested best practice, please either post the actual suggested configuration or a link to the documentation suggesting best practice.CommentShareharrisjbanswered 4 years ago0For now I'm marking this as answered as I got the health check working, but open to hearing suggestions on best practice fixing the misconfigured ACL from beanstalk environment creation.CommentShareharrisjbanswered 4 years ago"


Question: Cant login to sendy after changing email provider from privateemail.com to microsoft business email

"I just recently changed email provider from privatemail.com to microsoft. my domain stayed on namecheap but i changed the dns record  so messages go directly to microsoft now. Now i received a message from amazon saying dkim signin was disabled for this domain in dns records i dont know if this has to do with the fact that i cannot login to sendy.co but i copied and pasted back the 3 Cname records back in name cheap..Can somebody help me out with this, i need to investigate how i can log back in to sendy.co with my domain and loginThank youFollowComment"

Answer: "0The three CNAME records (which it sounds like you may have temporarily removed) are used to prove to SES that you own your domain and are authorizing SES to send authenticated mail using your domain in the From header of your messages. Removing the records will cause the domain to become unverified.After adding the DKIM records back to DNS you may need to wait for a period of time that is greater than the TTL (Time to Live) for your NameCheap DNS records. Go to the SES console and switch to the region in which you have verified your domain identity. Navigate to 'Verified identities', click on your domain identity, and then to the right of 'DomainKeys Identified Mail (DKIM)' click the 'Retry' button.If the domain fails to verify, please contact AWS Support to allow them to help you troubleshoot.If you are having trouble configuring and using the Sendy application, please locate their Contact & Support information on the bottom of their web page.CommentShareJesse_Tanswered 3 months ago"


Question: Making a game by the community in this official forum

"Hi Everyone 🙂Please participate in this survey and share it with others.🙏 🌹If there is enough agreement, the team will be formed on this official forum soon.Benefits of this Issue: 👇1- Successful internet team experience2- Improving the skills and knowledge of making game3- Familiarity with Divide work and do work in a game project4- If making the game is good, Most likely Amazon and Lumberyard team will welcome it and various applause💡  Do you agree that we can help each other to create a game according to the existing forum , and start a game development project in this official forum ❓[poll type=regular results=always chartType=pie groups=admins,trust_level_0,trust_level_1,trust_level_2,trust_level_3,trust_level_4]YesNo[/poll]Follow"

Answer: "0This will probably be a good and fun learning experience for whoever participates but as we all probably know from AAA titles.... games made by committee are usually terrrrrible.SharerePost-User-9359627answered 3 years ago0@REDACTEDUSERI know this can be a problem, but we can make a good game together and with each other's knowledge and experience, this game can be small or medium or large in consultation with each other, We have to try our best, I know it will take time but it is not impossible, If enough agreement is reached and there are many members of our internet team, a project manager can use the capabilities of all members, I know it can be difficult at first glance, but no one knows the result in the future ...   I hope others will agree, and Participate in this survey 🙂SharerePost-User-8224505answered 3 years ago0I can help.https://forums.awsgametech.com/t/my-achievements-my-works-and-my-experiences/9296/14SharerePost-User-0396919answered 3 years ago0[quote="didzey, post:4, topic:9253"]I can help.[/quote]@REDACTEDUSERSharerePost-User-8224505answered 3 years ago0I suggest making a game with as many mechanics as possible. That is, a game like GTA 5, but with a much smaller location, and with a well-developed AI. I can model a small town, but writing a canvas script is difficult for me. I propose to assemble a team of those who answered "yes" to the survey. 6 people is enough to make a game.SharerePost-User-0396919answered 3 years ago0@REDACTEDUSERSharerePost-User-8224505answered 3 years ago0How many maps does our game have?Is it enough to start a map?SharerePost-User-8224505answered 3 years ago0I hope you come and participate in this poll and make a good game together 🙂I publish a video of new my project that made with script canvas , COMING SOON 😉SharerePost-User-8224505answered 3 years ago0It took more than a month for the vote to take place.8 persons announced their readiness to making a game together.We can start, if not, I will do it alone 🙂Thanks to everyone who voted🙏 🌹SharerePost-User-8224505answered 3 years ago0Voting time is overI created a small project example, This sample project took 2 weeks to complete, you can see it 👇 👇 👇 😉[quote="_AhmadKarami, post:9, topic:9253"]I publish a video of new my project that made with script canvas , COMING SOON 😉[/quote]https://forums.awsgametech.com/t/video-demonstration-of-3d-visualization-script-canvas-project-amazon-lumberyard-1-25/9351SharerePost-User-8224505answered 3 years ago0Okay. I want to collaborate because I will be the 3D artist. I'm in. I have a game idea.SharerePost-User-0141305answered 2 years ago0[quote="_AhmadKarami, post:7, topic:9253"]No network usage and Standalone[/quote]Hmm but I wanted to have it on the cloud....SharerePost-User-0141305answered 2 years ago0[quote="Logimite, post:13, topic:9253"]Hmm but I wanted to have it on the cloud…[/quote]I prefer to start small steps and then big things ...SharerePost-User-8224505answered 2 years ago0Yeah but my idea is based on multiplayer...SharerePost-User-0141305answered 2 years ago"


Question: How to massively increase EKS pod limit

"I am trying to move an existing Kubernetes cluster to EKS but I ran into a bit of a snag.By default a t2.small instance for example has a pod limit of 11 (eleven). That is ridiculously low. On a node with equivalent CPU and RAM I'm currently running 110 pods.This is mainly because my pods are tiny, plenty and mostly idle. I am running review apps for feature branches during software development, so there is one installation for each feature branch and each installation has a couple of pods, one per service. Most of the time those pods do nothing, except for a couple of minutes per day when someone reviews the particular feature branch.I need to increase the pod limit per instance massively for this to make sense. A possible alternative is of course to deploy a couple of EC2 instances and install k3s on them but I would prefer to have this all on EKS.FollowComment"

Answer: "2First of all, generally speaking you should not run 110 pods on t2.small. You should seriously consider a different way of launching pods. If you don't need the pod, delete them. Or have some other ways to schedule the jobs.As to why you encounter the limit is due to the fact that by default each pod get its IPs from ENIs of the node. And there is a limit how many ENIs and IPs the node can have.One way to work around the issue is to use custom networking and CNI add-on. You can refer here. You should be able to at least get ~110 pods. However, you should seriously consider your scheduling strategy.CommentShareJason_Sanswered a year agoAndreKR a year agoNot sure if I get the reasons why many pods are bad. A pod is just a process, with minimal overhead. If the executable uses maybe 5 MB RAM and is mostly idle, why not squeeze them all on a small instance.Anyway, I will look into "prefix delegation", that seems to be the magic sauce that will make it work.Share1Let's assume 110 pods need to run in EKS, you need to review how many IPs can a node have.I have the same situation and I use m5.4xlarge that can host 234 max pods/ node (cost effective I can use also with two ec2 instances m5.2xlarge it will give me 116 total pods per nodes)Other option you can consider multi containers pod to reduce the number of nodenote: the instance type will depends on your applicationCommentShareMarwaanswered a year agoAndreKR a year agoWell, sure, but m5.4xlarge is 50 times the price of t3.small and still 2.5 times the price per pod. Makes sense when your pods actually need the performance but for a bunch of idle pods it seems like a waste. I will look into the solution that Jason_S provided.ShareMarwa 10 months agoof course it will depends on what the resources the pods need that will drive your choice. my choice is memory optimized because the pod consumes memory.The number of pods are driven from xlarge 2xlage 4xlargeShare"


Question: Could not find [..dependency gems] in any of the sources on Ruby 2.6 running on 64bit Amazon Linux 2/3.4.4

"Hi, I want to upgrade Elastic Beantalk platforms from Ruby 2.6 running on 64bit Amazon Linux 2/3.4.2 to Ruby 2.6 running on 64bit Amazon Linux 2/3.4.4.Everything is ok. But when I try to run RAILS_ENV=production rails console, it will show error Could not find [... dependency gems] in any of the sources, but those dependency gems are in the group of developments or tests, it shouldn't need to install those gems when environment is production. I also try to run RACK_ENV=production rails console, and it is same error.This error only happens on Ruby 2.6 running on 64bit Amazon Linux 2/3.4.4.Ruby 2.6 running on 64bit Amazon Linux 2/3.4.2 is safe.Dose anyone meet same question?FollowComment"


Question: MQTT Connection keeps getting disconnected/closed while publishing or subscribing to topics using LTE Modem

"I'm using Quectel modem BG95 with a host MCU to connect to AWS IoT core and publish to topics and subscribe to topics as well.I used to get an error occasionally that closed the MQTT connection exactly while doing pub/sub operations and connection had to be re-established , but that was very rare.However, since the last few days I have been running tests on multiple devices (using same IoT core endpoint) and have  been getting this MQTT dis-connection on each pub or sub operation. I am attaching a log for review.To me it seems a server side issue since I have tried it with multiple modems and previous versions of firmware.[While publishing to topic];2022-05-08T02:29:41Z;28;-966233403;462863960;;RAK000121|-45,RAKTEST|-56AT+QIDEACT=1OK[ 2022-05-08T02:29:41Z ] [FARM_IP][INFO] MDM_SET_DEACTIVATE_PDP-elseAT+QIACT=1OKAT+QMTOPEN=0,"a5u9klmd2viw3z-ats.iot.us-west-1.amazonaws.com",8883OK+QMTOPEN: 0,0           --- [Opening MQTT Connection][ 2022-05-08T02:29:41Z ] [FARM_IP][INFO] Mqtt openedAT+QMTCONN=0,"0123qwer786"OK+QMTCONN: 0,0,0                            --- [MQTT client connected]AT+QMTPUB=0,1,1,0,"fm/1011",72        --- [Publishing to the MQTT Topic]> ;2022-05-08T02:29:41Z;28;-966233403;462863960;;RAK000121|-45,RAKTEST|-56OK+QMTSTAT: 0,1     --- [MQTT Connection Closed][While Subscribing to topic]AT+QMTSUB=0,1,"imei/get_logs",0--- [Subscribing to the MQTT Topic]OK+QMTSTAT: 0,1--- [MQTT Connection Closed][  ] [FARM_IP][INFO] Starting timerAT+QMTSUB=0,1,"imei/get_logs",0--- [Subscribing to the MQTT Topic]OK+QMTSTAT: 0,1--- [MQTT Connection Closed]FollowCommentDoron-AWS a year agoWhat is the payload size you are publishing?Have you enabled CloudWatch logging on the AWS IoT side? What do they tell?What is the disconnection reason you get on the disconnect Lifecycle events? (https://docs.aws.amazon.com/iot/latest/developerguide/life-cycle-events.html)Share"

Answer: "1When you client is disconnected while publishing or subscribing the reason might be the IoT policy that is used. If you are not allowed to publish or subscribe to a topic your client is being disconnected.You can use CloudWatch logs to drill down this error further. If the IoT policy is the reason you will find an authorization error in CloudWatch logs.KR,PhilippCommentSharePhilipp Sanswered a year ago0Not sure if you are still running into this problem but I was just faced with something similar. I spun up a second device and whenever one contacted AWS the other disconnected. I was sure I had made a mistake with credentials or something but actually I had overlooked an AT command from the MQTT Operation Example.  When you send AT+QMTCONN=<client_idx>,<clientID>[,<username>[,<password>]] your clientID needs to be unique for each individual device. Changed clientID to be my thingName and everything has been smooth sailing since.Hope it helps.hansCommentSharehansanswered 8 months ago"


Question: [Feature Request] Shutdown GameSessions from Backend

"Why can we not terminate a GameSession from the GameLift backend?Testing while setting up the GameLift features can sometimes mean that GameSessions do not shutdown from alone.GameSession costs easily pass the two digit barrier in a single day - even when just idling with no players.A feature to shutdown a GameSession is needed for developers, to help avoid costs which are not necessarily considered usual costs associated with GameLift.What developers want and some consider a basic feature, is a free GameLift testing environment.FollowComment"

Answer: "0I believe the only ways to terminate a game session from the GameLift side is to either scale down the instances in the fleet (although this wont work if you have game session protection on in your fleet), remote connect into the instance and terminate the server process hosting the game session there, or have the server invoke the ProcessEnding method from the server SDK. I do agree that there should be an easier/targeted way to terminate a specific game session/server process from the GameLift side.CommentSharerePost-User-5100160answered a year ago"


Question: Cognito User Attributes Modified Lambda Trigger

"I was planning on synchronizing my user pool attributes with my DynamoDB table, such as name and email. Unfortunately, I can't find a way to do this from Cognito's side. Would be nice if this existed, as I can avoid having to create my own API just to handle such a simple case of details update.Is such a thing on Cognito's roadmap? Or is there any other option I could use that do not require constant data retrieval and matching?FollowCommentysfaran-sde 7 months agoI was also looking for this feature but could only find an open issue on GitHub, which is in the amplify repo but seems like a Cognito feature: https://github.com/aws-amplify/amplify-js/issues/9391.Share"

Answer: "0You can add a pre token generation lambda. All the attributes defined in user pool would be available in event object. A call can be made to dynamodb to update any details available as attributes.CommentSharerePost-User-3564424answered 7 months agoRicardo Nolde 6 months agoYeah, I was trying to avoid that, as it seems excessive. As I have no other alternative, I am doing that and matching a timestamp between to find out if I should update it or not.Share"